【Java】如何查看某一Java進程中,當前有多少線程正在執行?


  • 我們先看一個最古老的多線程實現的服務端
public class SocketThread {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9889);
        while (true) {
            Socket client = serverSocket.accept();

            new Thread(() -> {
                try {
                    System.out.println("client port :" + client.getPort());
                    InputStream inputStream = client.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    while (true) {
                        System.out.println(bufferedReader.readLine());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();
        }

    }

}

 

 

 

strace指令查看:

  • 我們用【strace】指令檢測一下:

-o:輸出 到某個路徑
-ff: 抓取這個程序所有線程

[root@bogon thread]# strace -ff -o /root/data/thread-group/ooxx java SocketThread //程序對內核有沒有發生什么系統調用

 

然后可以再thread-group目錄中看到線程詳情:

 

 

 

 

jps進行查看

  • 首先用【jps】指令查看一下進程詳情:
[root@bogon thread-group]# jps
12485 Jps
12475 Loop

 

 

  • 然后我們進入【Loop】進程,繼續深入:
[root@bogon thread-group]# cd /proc/12475
[root@bogon 12475]# ls
attr        comm             fd        map_files   net            pagemap      schedstat  statm    wchan
autogroup   coredump_filter  fdinfo    maps        ns             patch_state  sessionid  status
auxv        cpuset           gid_map   mem         numa_maps      personality  setgroups  syscall
cgroup      cwd              io        mountinfo   oom_adj        projid_map   smaps   task
clear_refs  environ          limits    mounts      oom_score      root         stack      timers
cmdline     exe              loginuid  mountstats  oom_score_adj  sched        stat       uid_map

 

 

1》然后我們進入【task】目錄,可以看到線程詳情:

[root@bogon 12475]# cd task/
[root@bogon task]# ls
12475  12476  12477  12478  12479  12480  12481  12482  12483  12484
[root@bogon task]# ll
total 0
dr-xr-xr-x. 7 root root 0 May 27 10:08 12475
dr-xr-xr-x. 7 root root 0 May 27 10:08 12476
dr-xr-xr-x. 7 root root 0 May 27 10:08 12477
dr-xr-xr-x. 7 root root 0 May 27 10:08 12478
dr-xr-xr-x. 7 root root 0 May 27 10:08 12479
dr-xr-xr-x. 7 root root 0 May 27 10:08 12480
dr-xr-xr-x. 7 root root 0 May 27 10:08 12481
dr-xr-xr-x. 7 root root 0 May 27 10:08 12482
dr-xr-xr-x. 7 root root 0 May 27 10:08 12483
dr-xr-xr-x. 7 root root 0 May 27 10:08 12484

 

2》也可以進入【fd】目錄

以數字為文件描述符名字的文件

 

 

 

  • 我們新開一個界面,可以用【nc】模擬一次客戶端請求:
[root@bogon ~]# nc 192.168.33.10 9889

 

此時可以看到連接情況的變化:

 

 

 

 

服務端會打印出客戶端連接進入的信息(此處我重新連了一下,所以和上述端口會產生不一致):

1》客戶端發送:

 

2》服務端接收:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM