zoukankan      html  css  js  c++  java
  • 【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》服务端接收:

  • 相关阅读:
    Python编码和文件操作
    Python的list和tuple及dictionary
    Python代码对比
    python的基础知识
    day2 springcloud组件(nacos注册/配置中心 feign组件请求调用 gateway网关)
    springcloud与springboot版本对应关系
    git配置
    day1 分布式基础概念
    spring中的依赖注入(DI)笔记
    20210223 爱生气的书店老板(滑动窗口)
  • 原文地址:https://www.cnblogs.com/boluopabo/p/12969682.html
Copyright © 2011-2022 走看看