jdk自带检测内存,cpu,线程 的工具――jvisualvm
2013-12-06 13:34
489 查看
一个很强大的免费工具:JDK6自带的jvisualvm。其实还有个自带工具 jconsole 这里不多说, 用法跟 jvisualvm 差不多。 都是输入命令启动
这个东西我以前听过说,但一直没有用过。看到它提供的截图中可以看到各线程的运行状态,所以准备试一下。这里记录一下使用过程。1。启动在命令行输入jvisualvm。如果jdk安装正确的话(6.x以上版本),就会看到如下的一个窗口:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/442ab7b0413c72951c3cf68c1c6517f3.jpg)
看起来相当简洁,不像是很强大的样子。2。运行一个Java程序IncTestN,jvisualvm会自动找到它
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/2e328c044c9f779db396c5c69f481d09.jpg)
3.右键点击它,”打开”
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/837fe6057ebdaff1a40db46abb8fc049.jpg)
可以看到它有很多标签页,可以让我们监测程序的各种数据。默认没有这么多,我其实安装了一些jvisualvm的插件。4。查看jvm参数及系统属性
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/bbe3c1e1b4bbdaa23b584897bea411a6.jpg)
5。查看cpu、内存、类、线程的统计数据
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/9fd22fd76ea16d81fb6b686be33b135c.jpg)
注意,右边第一个还可以查看PermGen。对于scala程序,因为它产生了大量的类定义,所以PermGen有可能会不足,可通过该选项查看PermGen,适当调整:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/f68391efcb42790f3f01a5eb828b5201.jpg)
可以看到,对于本程序来说,PermGen还是比较充分的,无须调整。6。查看各线程运行情况这个是重点,我们需要知道各线程的运行情况,特别是否被synchronized阻塞了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/806cc705b6618808beed83d76a940999.jpg)
注意右下角,有四个状态说明,分别是:运行(Running):我们最喜欢的状态。说明该线程正在执行代码,没有问题。
休眠(Sleeping):调用了Thread.sleep后的状态,说明线程正停在某个Thread.sleep处
等待(Wait):手动调用了wait方法,或者某些IO操作,在阻塞中等待数据。
监视(Monitor):这里就是我想找的问题了。它表示线程想执行一段synchronized中的代码,但是发现已经有其它线程正在执行,自己被block了,只能无奈地等待。如果这种状态多,说明程序需要好好优化。
从上面的这个图可以看到,下面多个线程都处于”监视”状态。多个线程都卡在了独木桥的一头过不去,干不了活干着急呢。当然这个程序是我专门设计成这样的,存在着严重的性能问题,需要好好优化。7。查看各线程的统计数据如果我们需要一些统计数据,比如某个线程总共运行了多少时间,”运行”状态有多久(或百分比),休眠、等待、监视有多久,则需要用到”表”这一页。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/7e28cff9c393a6571eef797bfcab1e08.jpg)
从中可以看到这个悲催的程序,几分所有的时间都用在了synchronized的阻塞上了。只有百分之零点几的时间在运行中,效率可真低啊。还可以使用图表方式来看这些数据,得到更直观的体验:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/9767d8f3e5408abe50f6acd7c2304d97.jpg)
8。查看各方法的运行时间想不想程序中到底是哪些方法一直在运行?可使用”抽样器”功能:
这个东西我以前听过说,但一直没有用过。看到它提供的截图中可以看到各线程的运行状态,所以准备试一下。这里记录一下使用过程。1。启动在命令行输入jvisualvm。如果jdk安装正确的话(6.x以上版本),就会看到如下的一个窗口:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/442ab7b0413c72951c3cf68c1c6517f3.jpg)
看起来相当简洁,不像是很强大的样子。2。运行一个Java程序IncTestN,jvisualvm会自动找到它
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/2e328c044c9f779db396c5c69f481d09.jpg)
3.右键点击它,”打开”
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/837fe6057ebdaff1a40db46abb8fc049.jpg)
可以看到它有很多标签页,可以让我们监测程序的各种数据。默认没有这么多,我其实安装了一些jvisualvm的插件。4。查看jvm参数及系统属性
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/bbe3c1e1b4bbdaa23b584897bea411a6.jpg)
5。查看cpu、内存、类、线程的统计数据
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/9fd22fd76ea16d81fb6b686be33b135c.jpg)
注意,右边第一个还可以查看PermGen。对于scala程序,因为它产生了大量的类定义,所以PermGen有可能会不足,可通过该选项查看PermGen,适当调整:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/f68391efcb42790f3f01a5eb828b5201.jpg)
可以看到,对于本程序来说,PermGen还是比较充分的,无须调整。6。查看各线程运行情况这个是重点,我们需要知道各线程的运行情况,特别是否被synchronized阻塞了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/806cc705b6618808beed83d76a940999.jpg)
注意右下角,有四个状态说明,分别是:运行(Running):我们最喜欢的状态。说明该线程正在执行代码,没有问题。
休眠(Sleeping):调用了Thread.sleep后的状态,说明线程正停在某个Thread.sleep处
等待(Wait):手动调用了wait方法,或者某些IO操作,在阻塞中等待数据。
监视(Monitor):这里就是我想找的问题了。它表示线程想执行一段synchronized中的代码,但是发现已经有其它线程正在执行,自己被block了,只能无奈地等待。如果这种状态多,说明程序需要好好优化。
从上面的这个图可以看到,下面多个线程都处于”监视”状态。多个线程都卡在了独木桥的一头过不去,干不了活干着急呢。当然这个程序是我专门设计成这样的,存在着严重的性能问题,需要好好优化。7。查看各线程的统计数据如果我们需要一些统计数据,比如某个线程总共运行了多少时间,”运行”状态有多久(或百分比),休眠、等待、监视有多久,则需要用到”表”这一页。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/7e28cff9c393a6571eef797bfcab1e08.jpg)
从中可以看到这个悲催的程序,几分所有的时间都用在了synchronized的阻塞上了。只有百分之零点几的时间在运行中,效率可真低啊。还可以使用图表方式来看这些数据,得到更直观的体验:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/9767d8f3e5408abe50f6acd7c2304d97.jpg)
8。查看各方法的运行时间想不想程序中到底是哪些方法一直在运行?可使用”抽样器”功能:
相关文章推荐
- JDK自带内存及线程分析工具小记
- 利用jdk自带的强悍工具jvisualvm检测多线程的竞争
- 利用jdk自带的强悍工具jvisualvm检测多线程的竞争
- JDK自带内存及线程分析工具小记
- JDK自带内存及线程分析工具
- 利用jdk自带的强悍工具jvisualvm检测多线程的竞争
- 利用jdk自带的强悍工具jvisualvm检测多线程的竞争
- 使用JDK自带的工具来检测是否有死锁的现象
- Jvisualvm是JDK自带的一款性能分析工具
- java自带工具JvisualVM调试tomcat CPU使用量过高
- 使用Jvisualvm监控JVM的内存、CPU、线程
- JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程
- 利用jdk自带工具检测java运行程序死锁现象
- 使用jdk自带工具生成heapdump文件以及分析内存中的变量情况
- 内存占满,未中毒,后台也没什么任务。Windows自带的内存检测工具,检测可尝试修复
- 4个最权威的电脑硬件检测,硬件查看工具,CPU、显卡、内存、主板查看工具
- java 监测工具-------------------jdk自带的强悍工具jvisualvm
- IMF 如何使用JDK自带jvisualvm监控工具
- 线程死锁及如何使用JDK自带工具监测是否有死锁现象
- 通过IIS自带工具Iisapp.vbs查询哪个w3wp.exe站点占用资源(cpu或内存)