追踪java 程序中的线程执行情况

当我们希望观察java程序运行的堆栈情况,多次执行jstack,或者通过cpu 采用发现某个线程都在同一个函数函数. 这可能是两种情况引起的: 在这个线程中,这个函数是高频函数. 线程当前阻塞在这个函数上. Linux中没有真正的线程,java线程是由进程来模拟实现的. 这种进程又称作:轻量级进程(LWP). 因此可以通过strace -p 追踪其运行情况,来区分以上两种情况. 但是通过ps -ef或者jps只能看到java程序的pid. 如果需要追踪线程,可以jstack查找线程的pid. 线程第一个行中的 nid字段,就是该线程pid的16进制表示. 转化为10进制即可. 例如下面,线程显示在执行io上,读数据相对这个操作是比重多的. 但是是频繁执行io,还是文件系统出现问题,卡在io上,这是无法区分. 就可以这样追踪一下.