jps查看java进程中哪个线程在消耗系统资源
2015-11-15 06:20
405 查看
jps或ps -ef|grep java可以看到有哪些java进程,这个不用说了。
但值得一提的是jps命令是依赖于/tmp下的某些文件
的。 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无法查看到实际存在的java进程。不过jstat,
jstack等命令也同样如此,所以当jps列不出进程的时候,这些命令也都不能用了。不在我们此次讨论范围之内。
top -p $pid -H 加上-H这个参数后,会列出有哪些线程。这样就可以看到哪个线程id最消耗系统资源了。
看到的线程id是10进制的数字。
jstack $pid 可以打印出制定java进程的stack状况。
将前边top命令看到的线程id转为16进制显示,就可以在jstack的结果中找到它了。
例如以下:
"pool-2-thread-1" prio=10 tid=0x000000004c9b2000 nid=0x11f4 waiting on condition [0x0000000042f36000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000580089050> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662)
其中的“nid=0x11f4 ”, 11f4就是线程id的16进制表示
但值得一提的是jps命令是依赖于/tmp下的某些文件
的。 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无法查看到实际存在的java进程。不过jstat,
jstack等命令也同样如此,所以当jps列不出进程的时候,这些命令也都不能用了。不在我们此次讨论范围之内。
top -p $pid -H 加上-H这个参数后,会列出有哪些线程。这样就可以看到哪个线程id最消耗系统资源了。
看到的线程id是10进制的数字。
jstack $pid 可以打印出制定java进程的stack状况。
将前边top命令看到的线程id转为16进制显示,就可以在jstack的结果中找到它了。
例如以下:
"pool-2-thread-1" prio=10 tid=0x000000004c9b2000 nid=0x11f4 waiting on condition [0x0000000042f36000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000580089050> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662)
其中的“nid=0x11f4 ”, 11f4就是线程id的16进制表示
相关文章推荐
- jps查看java进程中哪个线程在消耗系统资源
- Java 里把 InputStream 转换成 String 的几种方法
- Java 里把 InputStream 转换成 String 的几种方法
- java中this关键字的用法
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
- java 的23种设计模式 之装B者模式
- Eclipse怎么显示行号,定位某行
- Eclipse怎么显示行号,定位某行
- 第4章 控制执行流程
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Java解析HTML之HTMLParser使用与详解
- maven+ibatis+spring mvc环境搭建
- 第3章 操作符
- Struts接收时间类型报错
- 取消MyEclipse中MyEclipse Derby的显示
- 【2015/11/15】为了解决账号登录显示用户名和登录之后退出的问题倒腾一晚上!
- 搭建maven+spring+freemaker+mybatis环境之四
- springMVC教程-快速入手-深入分析
- 第2章番外2 令人惊喜的注释文档