提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
面试题,查一个jvm有多少个线程有哪些方法?
写本文背景
面试题,查一个jvm有多少个线程有哪些方法?
当时,回答了3中方法,人家还一直问,好吧,没辙了,回来再思考一下,丫的,又发现了2种方法。。。
我也不明白,能回答3种,有什么不够用 了,吐槽,吐槽。。。不过,既然被难倒,回来还是要总结一下,下次再碰到这种对手,干掉他
一、可视化方法
jcmd 进程号 PerfCounter.print 命令
[cloudera-scm@devSparkWorker2 ~]$ jcmd 59326 PerfCounter.print
59326:
...
java.threads.daemon=20
***java.threads.live=30***
java.threads.livePeak=35
java.threads.started=183342
二. jcmd 工具
1.实践
线程打印出来再grep一下
[cloudera-scm@devSparkWorker2 ~]$ jcmd 59326 Thread.print |grep tid |wc
76 743 8230
[cloudera-scm@devSparkWorker2 ~]$ jcmd 59326 Thread.print |grep RUNNABLE |wc
2、jcmd常用用法
jcmd 171829 Thread.print -l # 打印线程栈
jcmd 171829 VM.command_line # 打印启动命令及参数
jcmd 171829 GC.heap_dump /data/31275.dump # dump heap
jcmd 171829 GC.class_histogram #查看类的统计信息
jcmd 171829 VM.system_properties #查看系统属性内容
jcmd 171829 VM.uptime #查看虚拟机启动时间
jcmd 171829 PerfCounter.print #查看性能统计
三、jstack,dump
四、 生产环境使用什么方法?
请看上面的思维导图