Linux下JAVA线程占用CPU高的分析方法
2013-09-27 11:04
573 查看
上次分析系统中占用CPU高的问题,得到一些使用Java自身调试工具的经验,与大家分享。
(1)使用top命令找出占用cpu最高的JAVA进程PID:28174
(2)如下命令找出占用cpu最高的线程
Java代码
top -Hp 28174 -d 1 -n 1
32694 root 20 0 3249m 2.0g 11m S 2 6.4 3:31.12 java
28175 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.06 java
28176 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.79 java
28177 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.12 java
28178 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.11 java
28179 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.33 java
28180 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.58 java
28181 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.36 java
28182 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.02 java
28183 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.96 java
28184 root 20 0 3249m 2.0g 11m S 0 6.4 4:38.30 java
28185 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.46 java
28186 root 20 0 3249m 2.0g 11m S 0 6.4 0:01.83 java
28187 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.00 java
28189 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.01 java
28190 root 20 0 3249m 2.0g 11m S 0 6.4 0:49.01 java
(3)打印占CPU最高JAVA进程28174的堆栈信息
Java代码
/usr/java/jdk1.6.0_21/bin/jstack 28174 > /root/mss/41-100javathreaddump.txt
(4)占CPU最高线程32694换算成16进制到文档中寻找对应线程
7fb6
Java代码
"MSXMLProcessorThread" prio=10 tid=0x00002b469923a800 [color=darkred]nid=0x7fb6[/color] sleeping[0x00002b46b0200000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at com.adventnet.management.xml.MSXmlProcessor.listen(MSXmlProcessor.java:279)
at com.adventnet.management.xml.MSXmlProcessor.run(MSXmlProcessor.java:264)
at java.lang.Thread.run(Thread.java:619)
以上过程手工进行,虽然不如Jprofiler和java自带的可视化工具那么直观,但是能够解决问题!尤其是在不能使用远程调试工具的时候,能够提供最大的帮助。
(1)使用top命令找出占用cpu最高的JAVA进程PID:28174
(2)如下命令找出占用cpu最高的线程
Java代码
top -Hp 28174 -d 1 -n 1
32694 root 20 0 3249m 2.0g 11m S 2 6.4 3:31.12 java
28175 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.06 java
28176 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.79 java
28177 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.12 java
28178 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.11 java
28179 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.33 java
28180 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.58 java
28181 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.36 java
28182 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.02 java
28183 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.96 java
28184 root 20 0 3249m 2.0g 11m S 0 6.4 4:38.30 java
28185 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.46 java
28186 root 20 0 3249m 2.0g 11m S 0 6.4 0:01.83 java
28187 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.00 java
28189 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.01 java
28190 root 20 0 3249m 2.0g 11m S 0 6.4 0:49.01 java
(3)打印占CPU最高JAVA进程28174的堆栈信息
Java代码
/usr/java/jdk1.6.0_21/bin/jstack 28174 > /root/mss/41-100javathreaddump.txt
(4)占CPU最高线程32694换算成16进制到文档中寻找对应线程
7fb6
Java代码
"MSXMLProcessorThread" prio=10 tid=0x00002b469923a800 [color=darkred]nid=0x7fb6[/color] sleeping[0x00002b46b0200000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at com.adventnet.management.xml.MSXmlProcessor.listen(MSXmlProcessor.java:279)
at com.adventnet.management.xml.MSXmlProcessor.run(MSXmlProcessor.java:264)
at java.lang.Thread.run(Thread.java:619)
以上过程手工进行,虽然不如Jprofiler和java自带的可视化工具那么直观,但是能够解决问题!尤其是在不能使用远程调试工具的时候,能够提供最大的帮助。
相关文章推荐
- Linux 修改时间,时区和设置时间自动同步
- Linux运维工程师笔试题
- Ubuntu Linux下为PHP5安装cURL
- 在nuc950上使用u-boot
- linux运维故障定位汇总
- linux下解压命令大全
- CentOS LDAP安装配置
- grub安装centos
- CentOS OpenLdap SSL
- linux服务器 IE中ico 不能正常显示
- CentOS下安装网卡驱动
- linux 密码破解
- CentOS minimal 版安装图形界面的步骤分享,中文语言包
- centos IPTables 配置方法
- centos vsftpd
- CentOS怎样强制卸载PHP以及自定义安装PHP
- linux如何查看CPU,内存,机器型号,网卡信息
- linux下连接windows的远程桌面
- linux下连接windows的远程桌面
- linux下连接windows的远程桌面