2727
2828-------------------------------
2929
30- 关于` Java ` 排错与诊断,力荐️` Arthas ` ❤️
30+ 关于` Java ` 排错与诊断,力荐️` Arthas ` : ❤️
3131
32- - [ alibaba/arthas: Alibaba Java诊断利器 - github.com ] ( https://github. com/alibaba/arthas )
33- - ` Arthas ` 用户文档 https://alibaba. github.io/arthas/
32+ - ` Arthas ` 用户文档: https://arthas.aliyun. com/doc/quick-start.html
33+ - github repo: [ alibaba/arthas: Alibaba Java诊断利器 ] ( https://github.com/alibaba/arthas )
3434
3535` Arthas ` 功能异常(😜)强劲,且在阿里巴巴线上支持使用多年。我自己也常用,一定要看看用用!
3636
5151----------------------
5252
5353用于快速排查` Java ` 的` CPU ` 性能问题(` top us ` 值过高),自动查出运行的` Java ` 进程中消耗` CPU ` 多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。
54- 目前只支持` Linux ` 。原因是` Mac ` 、` Windows ` 的` ps ` 命令不支持列出进程的线程` id ` ,更多信息参见[ #33 ] ( https://github.com/oldratlee/useful-scripts/issues/33 ) ,欢迎提供解法。
54+ 目前只支持` Linux ` 。原因是` Mac ` 、` Windows ` 的` ps ` 命令不支持列出进程的线程` id ` ,更多信息参见 [ #33 ] ( https://github.com/oldratlee/useful-scripts/issues/33 ) ,欢迎提供解法。
5555
56- PS,如何操作可以参见[ @bluedavy ] ( http://weibo.com/bluedavy ) 的[ 《分布式Java应用》] ( https://book.douban.com/subject/4848587/ ) 的【5.1.1 ` CPU ` 消耗分析】一节,说得很详细:
56+ PS,如何操作可以参见[ ` @bluedavy ` ] ( http://weibo.com/bluedavy ) 的[ 《分布式Java应用》] ( https://book.douban.com/subject/4848587/ ) 的【5.1.1 ` CPU ` 消耗分析】一节,说得很详细:
5757
58581 . ` top ` 命令找出消耗` CPU ` 高的` Java ` 进程及其线程` id ` :
5959 1 . 开启线程显示模式(` top -H ` ,或是打开` top ` 后按` H ` )
@@ -65,7 +65,8 @@ PS,如何操作可以参见[@bluedavy](http://weibo.com/bluedavy)的[《分布
6565 1 . 在` jstack ` 输出中查找十六进制的线程` id ` (可以用` vim ` 的查找功能` /0x1234 ` ,或是` grep 0x1234 -A 20 ` )
66661 . 查看对应的线程栈,分析问题
6767
68- 查问题时,会要多次上面的操作以分析确定问题,这个过程** 太繁琐太慢了** 。
68+ 查问题时,会要多次上面的操作以分析确定问题,这个过程** 太繁琐太慢了** 。
69+ 期望整合上面的过程成一个脚本,这样一行命令就可以自动化地搞定。
6970
7071### 用法
7172
@@ -74,10 +75,12 @@ show-busy-java-threads
7475# 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈
7576
7677# 缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便
77- # 当然你可以手动指定要分析的Java进程Id ,以保证只会显示你关心的那个Java进程的信息
78+ # 当然你可以通过 -p 选项 手动指定要分析的Java进程Id ,以保证只会显示你关心的那个Java进程的信息
7879show-busy-java-threads -p < 指定的Java进程Id>
80+ show-busy-java-threads -p 42
81+ show-busy-java-threads -p 42,47
7982
80- show-busy-java-threads -c < 要显示的线程栈数 >
83+ show-busy-java-threads -c < 要展示示的线程栈个数 >
8184
8285show-busy-java-threads < 重复执行的间隔秒数> [< 重复执行的次数> ]
8386# 多次执行;这2个参数的使用方式类似vmstat命令
@@ -97,14 +100,14 @@ sudo show-busy-java-threads
97100
98101show-busy-java-threads -s < 指定jstack命令的全路径>
99102# 对于sudo方式的运行,JAVA_HOME环境变量不能传递给root,
100- # 而root用户往往没有配置JAVA_HOME且不方便配置,
101- # 显式指定jstack命令的路径就反而显得更方便了
103+ # 而root用户往往没有配置JAVA_HOME且不方便配置,不能找到jstack命令。
104+ # 这时显式指定jstack命令的路径就反而显得更方便了
102105
103- # -m选项 :执行jstack命令时加上-m选项 ,显示上Native的栈帧,一般应用排查不需要使用
106+ # -m 选项 :执行jstack命令时加上 -m 选项 ,显示上Native的栈帧,一般应用排查不需要使用
104107show-busy-java-threads -m
105- # -F选项 :执行jstack命令时加上 -F 选项(如果直接jstack无响应时,用于强制jstack),一般情况不需要使用
108+ # -F 选项 :执行jstack命令时加上 -F 选项(如果直接jstack无响应时,用于强制jstack),一般情况不需要使用
106109show-busy-java-threads -F
107- # -l选项 :执行jstack命令时加上 -l 选项,显示上更多相关锁的信息,一般情况不需要使用
110+ # -l 选项 :执行jstack命令时加上 -l 选项,显示上更多相关锁的信息,一般情况不需要使用
108111# 注意:和 -m -F 选项一起使用时,可能会大大增加jstack操作的耗时
109112show-busy-java-threads -l
110113
@@ -121,7 +124,7 @@ Example:
121124
122125Output control:
123126 -p , --pid < java pid(s)> find out the highest cpu consumed threads from
124- the specified java process. support pid list(eg: 42,99 ).
127+ the specified java process. support pid list(eg: 42,47 ).
125128 default from all java process.
126129 -c , --count < num> set the thread count to show, default is 5.
127130 set count 0 to show all threads.
0 commit comments