Linux环境通过java虚拟机定位程序问题位置的方法
来源:互联网 发布:欧洲卡车模拟 知乎 编辑:程序博客网 时间:2024/05/17 20:30
1. # ps -ef | grep tomcat
结果类似如下格式:
[@sjs_113_75 vmstudy]# ps -ef | grep tomcatroot 62776 1 99 11:34 pts/17 07:49:56 /usr/bin/java -Djava.util.logging.config.file=/search/odin/xx/tomcat7/conf/logging.properties -Djava.util.logging
找到出问题的进程pid, 如上为62776,
2. # pidstat -p 62776 1 100 -u -t (-p指定进行pid,-u表示对CPU使用率的监控, -t参数将系统性能的监控细化到线程级别)
输出结果如下:
14时24分42秒 TGID TID %usr %system %guest %CPU CPU Command14时24分43秒 81988 - 916.00 27.00 0.00 943.00 21 java14时24分43秒 - 81988 0.00 0.00 0.00 0.00 21 |__java14时24分43秒 - 81997 0.00 0.00 0.00 0.00 2 |__java14时24分43秒 - 81998 4.00 1.00 0.00 5.00 17 |__java14时24分43秒 - 81999 4.00 0.00 0.00 4.00 4 |__java14时24分43秒 - 82000 4.00 0.00 0.00 4.00 2 |__java14时24分43秒 - 82001 4.00 0.00 0.00 4.00 1 |__java14时24分43秒 - 82002 5.00 0.00 0.00 5.00 11 |__java14时24分43秒 - 82003 5.00 0.00 0.00 5.00 23 |__java14时24分43秒 - 82004 5.00 0.00 0.00 5.00 18 |__java14时24分43秒 - 82005 3.00 0.00 0.00 3.00 5 |__java14时24分43秒 - 82006 4.00 0.00 0.00 4.00 27 |__java14时24分43秒 - 82007 5.00 0.00 0.00 5.00 26 |__java14时24分43秒 - 82008 4.00 0.00 0.00 4.00 3 |__java14时24分43秒 - 82009 4.00 1.00 0.00 5.00 13 |__java14时24分43秒 - 82010 4.00 1.00 0.00 5.00 9 |__java14时24分43秒 - 82011 4.00 0.00 0.00 4.00 12 |__java14时24分43秒 - 82012 4.00 1.00 0.00 5.00 7 |__java14时24分43秒 - 82013 4.00 0.00 0.00 4.00 30 |__java14时24分43秒 - 82014 4.00 0.00 0.00 4.00 19 |__java14时24分43秒 - 82015 4.00 0.00 0.00 4.00 21 |__java14时24分43秒 - 82016 4.00 0.00 0.00 4.00 0 |__java14时24分43秒 - 82017 5.00 1.00 0.00 6.00 6 |__java14时24分43秒 - 82018 4.00 0.00 0.00 4.00 8 |__java14时24分43秒 - 82019 4.00 0.00 0.00 4.00 15 |__java14时24分43秒 - 82020 4.00 0.00 0.00 4.00 29 |__java14时24分43秒 - 82021 5.00 0.00 0.00 5.00 5 |__java14时24分43秒 - 82022 1.00 0.00 0.00 1.00 12 |__java14时24分43秒 - 82023 0.00 0.00 0.00 0.00 7 |__java14时24分43秒 - 82024 0.00 0.00 0.00 0.00 18 |__java14时24分43秒 - 82025 0.00 0.00 0.00 0.00 18 |__java14时24分43秒 - 82026 0.00 0.00 0.00 0.00 0 |__java14时24分43秒 - 82027 0.00 0.00 0.00 0.00 26 |__java14时24分43秒 - 82028 0.00 0.00 0.00 0.00 9 |__java14时24分43秒 - 82029 0.00 0.00 0.00 0.00 18 |__java14时24分43秒 - 82030 0.00 0.00 0.00 0.00 11 |__java14时24分43秒 - 82031 0.00 0.00 0.00 0.00 18 |__java14时24分43秒 - 82062 0.00 0.00 0.00 0.00 18 |__java14时24分43秒 - 82083 0.00 0.00 0.00 0.00 7 |__java14时24分43秒 - 82084 0.00 0.00 0.00 0.00 6 |__java14时24分43秒 - 82085 0.00 0.00 0.00 0.00 16 |__java14时24分43秒 - 82103 0.00 0.00 0.00 0.00 6 |__java<strong>14时24分43秒 - 82104 84.00 2.00 0.00 86.00 24 |__java14时24分43秒 - 82105 75.00 2.00 0.00 77.00 20 |__java14时24分43秒 - 82106 82.00 2.00 0.00 84.00 10 |__java14时24分43秒 - 82107 84.00 1.00 0.00 85.00 5 |__java14时24分43秒 - 82108 77.00 3.00 0.00 80.00 2 |__java14时24分43秒 - 82109 80.00 3.00 0.00 83.00 16 |__java14时24分43秒 - 82110 83.00 3.00 0.00 86.00 3 |__java14时24分43秒 - 82111 84.00 4.00 0.00 88.00 9 |__java14时24分43秒 - 82112 82.00 2.00 0.00 84.00 1 |__java14时24分43秒 - 82113 84.00 3.00 0.00 87.00 25 |__java</strong>
如上,可以看出,该进程下线程很多,其中黑体部分,%usr,%CPU的占有率很高,说明这些线程占了大部分CPU的时间,当然这是我的代码,因为是开启了多个线程来跑同一个需求,所以每个线程占用的CPU时间差不多相同,可以看出是如上黑体部分的线程占用了大部分CPU时间
3. 使用命令导出指定Java进行的所有线程到文件中
# jstack -l 62776 > /temp/t.txt
该文件中会出现类似如下内容
"Thread-0" prio=10 tid=0xb75b300 nid=0x4b4 runnable [0x8f171000] java.lang.Thread.State: runnable at javatunning.ch6.toolscheck.HoldCPUMain$<strong>HoldCPUTask</strong>.run(HoldCPUMain.java:7)........................这样就可以定位出出问题的类了
0 0
- Linux环境通过java虚拟机定位程序问题位置的方法
- 通过valgrind、gdb定位程序问题的几个方法小结
- 通过valgrind、gdb定位程序问题的几个方法小结
- JNI调用本地库时JAVA虚拟机异常退出问题定位,通过虚拟机生成的hs_err_pidxxx.log日志文件定位过程
- linux下检测和定位内存泄漏位置的方法
- Linux环境定位C程序内存泄露以及非法访问的方法
- 【经验随笔】Java程序远程调试定位特定运行环境上出现的问题
- linux 下通过pid 定位该程序打开的端口
- Windows下通过虚拟机搭建android的linux编译环境
- gdb通过core file定位程序崩溃位置
- mini2440通过dnw下载linux虚拟机的程序
- Android通过崩溃日志中控件id定位崩溃位置的方法
- JAVA异常的定位问题方法
- java性能问题的定位常用方法
- 程序问题的定位
- 定位iphone程序crash的位置
- 定位程序内存泄露的位置
- 定位问题的方法
- hdu 5695 拓扑排序裸题
- 第12周项目3-数组类运算的实现
- mysql Threads_created 增长过快的解决
- Java之------大数(BigInteger,BigDecimal)
- 做程序员就要打好基础
- Linux环境通过java虚拟机定位程序问题位置的方法
- Python yield 总结
- Oracle修改实例名及数据库名
- 无人机飞控平台ArduPilot源码入门教程 - 首页
- 图解Windows网络命令使用实例
- .Net中的json操作类
- EventBus事件总线的使用
- Location服务之LocationManager
- IIS7.5 Microsoft VBScript runtime error '800a0046'的解决