JAVA 自带jconsole 监听内存,CPU,线程
最近使用JAVA 自带jconsole 监听web项目 内存,CPU,线程使用情况,感觉还蛮好的,下面介绍一下使用方法和过程
1.使用jconsole背景:
发现项目运行一段时间就会挂掉,最初认为是某些地方代码质量不高,导致内存泄露.打算找个内存分析工具分析一下.
2.使用过程:
监控本地工程:
正如 http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html#Enabling_JMX_Remote所说
Note: This configuration is needed only if you are going to monitor Tomcat remotely. It is not needed if you are going to monitor it locally, using the same user that Tomcat runs with.
jconsole监听本地工程不需要进行配置,windows平台是命令行 运行 'jconsole' 就可以打开监听窗口了
本地进程会自动列示出来,只需要选择后,点击 '连接' 就可以了
概述选项卡,你可以看到内存使用情况,线程数,类数量,以及CPU的使用情况,你也可以点击单独的选项卡查看详细情况.
VM摘要,可以看到jconsole监控多长时间了,活动线程数,垃圾收集器有哪些,物理内存以及VM参数等.
监控远程服务器:
服务器是Linux 系统,
首先在$TOMCAT_HOME/bin中找到Catalina.sh文件,打开文件,找到
# OS specific support. $var _must_ be set to either true or false. 这行,在这行下面加入:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
其中
-Dcom.sun.management.jmxremote.port=1090远程监听端口.
-Dcom.sun.management.jmxremote.ssl=false是否加密连接
-Dcom.sun.management.jmxremote.authenticate=false是否密码访问
保存退出.
在设置完成之后需要重启Tomcat.此时可以采用netstat -an命令查看一下监听端口的状态.
另外需要注意的是在修改完Catalina.sh文件之后,查看一下/etc/hosts文件.是不是包含服务器真实IP地址,如果只有127.0.0.1的话,就加上,
hosts文件格式
ip地址 主机名/域名 (主机别名)
例如:192.168.4.141 Matata.Center localhost
现在配置就完成了,打开命令窗口,输入 jconsole ,选择远程进程,输入监听服务器地址:监听端口,
点 '连接' 按钮,就可以监听服务器情况了
下面说一下,解决问题的过程:
1.因为最初怀疑是内存泄露,所以先查看了一下内存使用情况,发现并不是太高,过一一周左右,在登陆上来查看的时候发现,内存基本保持平稳,却发现线程数有些多,达到了200多,
点击 '线程' 的选项卡,发现很多都是名字类似的线程,点击 一个线程后,从右边窗口的详情可以分析出是哪个类创建的线程,从而找到项目中的代码,修改了代码,又测试了一段时间,问题解决了.
思路: 模拟异常,让异常重现,通过监听查看那部分出了问题,分析异常点,找到对应的漏洞代码,修复代码.
上一篇: Android 游戏框架 libgdx 学习笔记 - Log 使用
下一篇: &和&&