应用服务器发送如上错误,抓线程堆栈,用到jps、jstack 命令
A、 jps(Java Virtual Machine Process Status Tool)
jps主要用来输出JVM中运行的进程状态信息。语法格式如下:
1 | jps [options] [hostid] |
如果不指定hostid就默认为当前主机或服务器。
命令行参数选项说明如下:
1 | -q 不输出类名、Jar名和传入main方法的参数 |
2 | -m 输出传入main方法的参数 |
3 | -l 输出main类或Jar的全限名 |
4 | - v 输出传入JVM的参数 |
B、 jstack
jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:
1 | jstack [option] pid |
2 | jstack [option] executable core |
3 | jstack [option] [server- id @]remote- hostname -or-ip |
命令行参数选项说明如下:
1 | -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 |
2 | -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法) |
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。
比如:
转自:http://www.cnblogs.com/rainy-shurun/p/5732341.html