Java 性能优化实战记录(1)---定位并分析耗cpu最多的线程
1) jps
列出相关的java进程, 以及对应的pid
也可以使用如下命令来尝试
ps aux | grep java --color
2) top -Hp <pid>
按ctrl+t, 按时间消耗来进行排序
同等的命令替换如下所示
ps -eLf | awk '$2 ~/<pid>/ {print "pid:", $2, " lwp:", $4, " pcpu:", $5}' | sort -k6nr
ps -eLf | head -n 1
具体的field含义,需要再check一下
3) jstack <pid>
对java进程进行一次threads dump
同等命令:
kill -3 <pid>, 也能实现类似的效果
signo 3 == SIGQUIT
kill -l 列出信号列表
4) printf "%x\n" <thread_id>
jstack进行线程dump之后, 需要进制转化才能对应上, 因为每个线程id(对应field为nid)是16进制数, 而linux获取的线程id是10进制
那如何把10进制转化为16进制, 以及各种转换
printf "%x\n" <number>
5) 缺憾
在linux下,Thread.currentThread().getId(), 并不与线程id保持一致
1 public class Simple { 2 3 public static void main(String[] args) { 4 System.out.println("threadId is : " + Thread.currentThread().getId()); 5 } 6 7 } 8 9 /* 10 输出结果如下所示: 11 threadId is : 1 12 */
另一方面,线程ID=进程ID+内部线程对象ID并不成立,
参考: blog.csdn.net/heyetina/article/details/6633901
如何在java代码中获取进程process id, 实现方法如下所示:
参考: rednaxelafx.iteye.com/blog/716918
posted on 2014-04-21 17:28 mumuxinfei 阅读(2157) 评论(0) 编辑 收藏 举报