通过JPS
命令查看进程。
用jstack
命令dump
线程信息。
我机器上只启动了kafka
,所以就看zookeeper
的线程信息。
jstack 4075314 > /home/zhu/dump01
获取到dump01
文件。然后统计下
zhu@vm-zhu-001:~$ grep java.lang.Thread.State dump01 |awk '{print $2$3$4$5}' |sort |uniq -c
9 RUNNABLE
1 TIMED_WAITING(onobjectmonitor)
2 TIMED_WAITING(sleeping)
2 WAITING(onobjectmonitor)
8 WAITING(parking)
zhu@vm-zhu-001:~$
可以看见WAITING(onobjectmonitor)
的状态的线程只有两个,优化的非常好。
如果有大量的WAITING(onobjectmonitor)
的线程,去文件中查看具体是什么任务的线程在等待。我看的《Java并发编程的艺术》
中是很多的JBOSS
的线程,说明任务很少线程都是空闲的,可以去线程配置信息中把JBOSS
的配置进行修改。其他应该也是类似。
线程都是通过时间片进行切换的,每次保存和加载都是一次上下文切换,减少WAITING
状态的线程可以减少上下文切换次数。