AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下: ``` jstack [option] pid jstack [option] executablecore jstack [option] [server-id@]remote-hostname-or-ip ``` 命令行参数如下: ``` -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法) ``` jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。操作如下: 1.查询Java进程ID,如下图: ![](https://img.kancloud.cn/80/88/80880ea353d29bc2af639dacac7e54e6_1253x250.png) 2.通过进程ID查询对CPU消耗最大的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD,tid,time或者top -Hp pid,我这里用第三个,如下图: ![](https://img.kancloud.cn/c8/51/c8514733a77455ac5cda422b8c50a66c_792x392.png) 将线程ID转成16进制用于查询,使用如下命令即可实现: ``` printf "%x\n" pid ``` 3.使用jstack输出进程的堆栈信息,如下图: ![](https://img.kancloud.cn/b3/cd/b3cd0af7a852133daee449cb6ecacd2e_763x263.png)