55<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
66
77
8- - [ :beer : show-busy-java-threads.sh ] ( #beer-show-busy-java-threadssh )
8+ - [ :beer : show-busy-java-threads] ( #beer-show-busy-java-threads )
99 - [ 用法] ( #%E7%94%A8%E6%B3%95 )
1010 - [ 示例] ( #%E7%A4%BA%E4%BE%8B )
1111 - [ 贡献者] ( #%E8%B4%A1%E7%8C%AE%E8%80%85 )
1717 - [ ` Android ` 开发场景使用说明] ( #android%E5%BC%80%E5%8F%91%E5%9C%BA%E6%99%AF%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E )
1818 - [ 示例] ( #%E7%A4%BA%E4%BE%8B-1 )
1919 - [ 贡献者] ( #%E8%B4%A1%E7%8C%AE%E8%80%85-1 )
20- - [ :beer : find-in-jars.sh ] ( #beer-find-in-jarssh )
20+ - [ :beer : find-in-jars] ( #beer-find-in-jars )
2121 - [ 用法] ( #%E7%94%A8%E6%B3%95-2 )
2222 - [ 示例] ( #%E7%A4%BA%E4%BE%8B-2 )
2323 - [ 参考资料] ( #%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99 )
2424
2525<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2626
27- :beer : [ show-busy-java-threads.sh ] ( ../show-busy-java-threads.sh )
27+ :beer : [ show-busy-java-threads] ( ../show-busy-java-threads )
2828----------------------
2929
3030用于快速排查` Java ` 的` CPU ` 性能问题(` top us ` 值过高),自动查出运行的` Java ` 进程中消耗` CPU ` 多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。
@@ -46,50 +46,50 @@ PS,如何操作可以参见[@bluedavy](http://weibo.com/bluedavy)的《分布
4646### 用法
4747
4848``` bash
49- show-busy-java-threads.sh
49+ show-busy-java-threads
5050# 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈
5151
5252# 缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便
5353# 当然你可以手动指定要分析的Java进程Id,以保证只会显示出那个你关心的Java进程的信息
54- show-busy-java-threads.sh -p < 指定的Java进程Id>
54+ show-busy-java-threads -p < 指定的Java进程Id>
5555
56- show-busy-java-threads.sh -c < 要显示的线程栈数>
56+ show-busy-java-threads -c < 要显示的线程栈数>
5757
58- show-busy-java-threads.sh < 重复执行的间隔秒数> [< 重复执行的次数> ]
58+ show-busy-java-threads < 重复执行的间隔秒数> [< 重复执行的次数> ]
5959# 多次执行;这2个参数的使用方式类似vmstat命令
6060
61- show-busy-java-threads.sh -a < 输出记录到的文件>
61+ show-busy-java-threads -a < 输出记录到的文件>
6262# 记录到文件以方便回溯查看
6363
6464# #############################
6565# 注意:
6666# #############################
6767# 如果Java进程的用户 与 执行脚本的当前用户 不同,则jstack不了这个Java进程
6868# 为了能切换到Java进程的用户,需要加sudo来执行,即可以解决:
69- sudo show-busy-java-threads.sh
69+ sudo show-busy-java-threads
7070
71- show-busy-java-threads.sh -s < 指定jstack命令的全路径>
71+ show-busy-java-threads -s < 指定jstack命令的全路径>
7272# 对于sudo方式的运行,JAVA_HOME环境变量不能传递给root,
7373# 而root用户往往没有配置JAVA_HOME且不方便配置,
7474# 显式指定jstack命令的路径就反而显得更方便了
7575
7676# -m选项:执行jstack命令时加上-m选项,显示上Native的栈帧,一般应用排查不需要使用
77- show-busy-java-threads.sh -m
77+ show-busy-java-threads -m
7878# -F选项:执行jstack命令时加上 -F 选项(如果直接jstack无响应时,用于强制jstack),一般情况不需要使用
79- show-busy-java-threads.sh -F
79+ show-busy-java-threads -F
8080# -l选项:执行jstack命令时加上 -l 选项,显示上更多相关锁的信息,一般情况不需要使用
8181# 注意:和 -m -F 选项一起使用时,可能会大大增加jstack操作的耗时
82- show-busy-java-threads.sh -l
82+ show-busy-java-threads -l
8383
8484# 帮助信息
85- $ show-busy-java-threads.sh -h
86- Usage: show-busy-java-threads.sh [OPTION]... [delay [count]]
85+ $ show-busy-java-threads -h
86+ Usage: show-busy-java-threads [OPTION]... [delay [count]]
8787Find out the highest cpu consumed threads of java, and print the stack of these threads.
8888
8989Example:
90- show-busy-java-threads.sh # show busy java threads info
91- show-busy-java-threads.sh 1 # update every 1 seconds, (stop by eg: CTRL+C)
92- show-busy-java-threads.sh 3 10 # update every 3 seconds, update 10 times
90+ show-busy-java-threads # show busy java threads info
91+ show-busy-java-threads 1 # update every 1 seconds, (stop by eg: CTRL+C)
92+ show-busy-java-threads 3 10 # update every 3 seconds, update 10 times
9393
9494Options:
9595 -p , --pid < java pid> find out the highest cpu consumed threads from the specifed java process,
@@ -110,7 +110,7 @@ Options:
110110# ## 示例
111111
112112` ` ` bash
113- $ show-busy-java-threads.sh
113+ $ show-busy-java-threads
114114[1] Busy(57.0%) thread(23355/0x5b3b) stack of java process(23269) under user(admin):
115115" pool-1-thread-1" prio= 10 tid= 0x000000005b5c5000 nid= 0x5b3b runnable [0x000000004062c000]
116116 java.lang.Thread.State: RUNNABLE
@@ -146,7 +146,7 @@ $ show-busy-java-threads.sh
146146- ` AppMonitorDataAvgScheduler.run` 调用` DateFormat.format` 次数比较频繁。
147147- ` DateFormat.format` 比较慢。(这个可以由` DateFormat.format` 的实现确定。)
148148
149- 多执行几次` show-busy-java-threads.sh ` ,如果上面情况高概率出现,则可以确定上面的判定。
149+ 多执行几次` show-busy-java-threads` ,如果上面情况高概率出现,则可以确定上面的判定。
150150因为调用越少代码执行越快,则出现在线程栈的概率就越低。
151151脚本有自动多次执行的功能,指定 重复执行的间隔秒数/重复执行的次数 参数。
152152
@@ -321,7 +321,7 @@ class paths to find:
321321
322322[tgic](https://github.com/tg123)提供此脚本。友情贡献者的链接[commandlinefu.cn](http://commandlinefu.cn/)| [微博linux命令行精选](http://weibo.com/u/2674868673)
323323
324- :beer: [find-in-jars.sh ](../find-in-jars.sh )
324+ :beer: [find-in-jars](../find-in-jars)
325325----------------------
326326
327327在当前目录下所有` jar` 文件里,查找类或资源文件。
@@ -331,27 +331,27 @@ class paths to find:
331331
332332` ` ` bash
333333# 在当前目录下所有`jar`文件里,查找类或资源文件。
334- find-in-jars.sh ' log4j\.properties'
335- find-in-jars.sh ' log4j\.xml$'
336- find-in-jars.sh log4j\\ .xml$ # 和上面命令一样,Shell转义的不同写法而已
337- find-in-jars.sh 'log4j(\.properties|\.xml)$'
334+ find-in-jars ' log4j\.properties'
335+ find-in-jars ' log4j\.xml$'
336+ find-in-jars log4j\\ .xml$ # 和上面命令一样,Shell转义的不同写法而已
337+ find-in-jars 'log4j(\.properties|\.xml)$'
338338
339339# -d选项 指定 查找目录(覆盖缺省的当前目录)
340- find-in-jars.sh 'log4j\.properties$' -d /path/to/find/directory
340+ find-in-jars 'log4j\.properties$' -d /path/to/find/directory
341341# 支持多个查找目录
342- find-in-jars.sh 'log4j\.properties' -d /path/to/find/directory1 -d /path/to/find/directory2
342+ find-in-jars 'log4j\.properties' -d /path/to/find/directory1 -d /path/to/find/directory2
343343
344344# 帮助信息
345- $ find-in-jars.sh -h
346- Usage: find-in-jars.sh [OPTION]... PATTERN
345+ $ find-in-jars -h
346+ Usage: find-in-jars [OPTION]... PATTERN
347347Find file in the jar files under specified directory(recursive, include subdirectory).
348348The pattern default is *extended* regex.
349349
350350Example:
351- find-in-jars.sh 'log4j\.properties'
352- find-in-jars.sh '^log4j(\.properties|\.xml)$' # search file log4j.properties/log4j.xml at zip root
353- find-in-jars.sh 'log4j\.properties$' -d /path/to/find/directory
354- find-in-jars.sh 'log4j\.properties' -d /path/to/find/dir1 -d /path/to/find/dir2
351+ find-in-jars 'log4j\.properties'
352+ find-in-jars '^log4j(\.properties|\.xml)$' # search file log4j.properties/log4j.xml at zip root
353+ find-in-jars 'log4j\.properties$' -d /path/to/find/directory
354+ find-in-jars 'log4j\.properties' -d /path/to/find/dir1 -d /path/to/find/dir2
355355
356356Options:
357357 -d, --dir the directory that find jar files, default is current directory.
@@ -369,7 +369,7 @@ Options:
369369
370370` ` ` bash
371371# 在当前目录下的所有Jar文件中,查找出 log4j.properties文件
372- $ find-in-jars.sh ' log4j\.properties$'
372+ $ find-in-jars ' log4j\.properties$'
373373./hadoop-core-0.20.2-cdh3u3.jar! log4j.properties
374374
375375# 查找出 以Service结尾的类
@@ -379,7 +379,7 @@ $ ./find-in-jars 'Service.class$'
379379......
380380
381381# 在指定的多个目录的Jar文件中,查找出 properties文件
382- $ find-in-jars.sh ' \.properties$' -d ../WEB-INF/lib -d ../deploy/lib | grep -v ' /pom\.properties$'
382+ $ find-in-jars ' \.properties$' -d ../WEB-INF/lib -d ../deploy/lib | grep -v ' /pom\.properties$'
383383../WEB-INF/lib/aspectjtools-1.6.2.jar! org/aspectj/ajdt/ajc/messages.properties
384384../WEB-INF/lib/aspectjtools-1.6.2.jar! org/aspectj/ajdt/internal/compiler/parser/readableNames.properties
385385../WEB-INF/lib/aspectjweaver-1.8.8.jar! org/aspectj/weaver/XlintDefault.properties
0 commit comments