Skip to content

Commit 7052aca

Browse files
committed
update document
1 parent 7cfe2a9 commit 7052aca

File tree

1 file changed

+97
-53
lines changed

1 file changed

+97
-53
lines changed

README.md

Lines changed: 97 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,30 @@ $ show-busy-java-threads.sh
3939
The stack of busy(57.0%) thread(23355/0x5b3b) of java process(23269) of user(admin):
4040
"pool-1-thread-1" prio=10 tid=0x000000005b5c5000 nid=0x5b3b runnable [0x000000004062c000]
4141
java.lang.Thread.State: RUNNABLE
42-
at java.text.DateFormat.format(DateFormat.java:316)
43-
at com.xxx.foo.services.common.DateFormatUtil.format(DateFormatUtil.java:41)
44-
at com.xxx.foo.shared.monitor.schedule.AppMonitorDataAvgScheduler.run(AppMonitorDataAvgScheduler.java:127)
45-
at com.xxx.foo.services.common.utils.AliTimer$2.run(AliTimer.java:128)
46-
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
47-
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
48-
at java.lang.Thread.run(Thread.java:662)
42+
at java.text.DateFormat.format(DateFormat.java:316)
43+
at com.xxx.foo.services.common.DateFormatUtil.format(DateFormatUtil.java:41)
44+
at com.xxx.foo.shared.monitor.schedule.AppMonitorDataAvgScheduler.run(AppMonitorDataAvgScheduler.java:127)
45+
at com.xxx.foo.services.common.utils.AliTimer$2.run(AliTimer.java:128)
46+
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
47+
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
48+
at java.lang.Thread.run(Thread.java:662)
4949

5050
The stack of busy(26.1%) thread(24018/0x5dd2) of java process(23269) of user(admin):
5151
"pool-1-thread-2" prio=10 tid=0x000000005a968800 nid=0x5dd2 runnable [0x00000000420e9000]
5252
java.lang.Thread.State: RUNNABLE
53-
at java.util.Arrays.copyOf(Arrays.java:2882)
54-
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
55-
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572)
56-
at java.lang.StringBuffer.append(StringBuffer.java:320)
57-
- locked <0x00000007908d0030> (a java.lang.StringBuffer)
58-
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:890)
59-
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869)
60-
at java.text.DateFormat.format(DateFormat.java:316)
61-
at com.xxx.foo.services.common.DateFormatUtil.format(DateFormatUtil.java:41)
62-
at com.xxx.foo.shared.monitor.schedule.AppMonitorDataAvgScheduler.run(AppMonitorDataAvgScheduler.java:126)
63-
at com.xxx.foo.services.common.utils.AliTimer$2.run(AliTimer.java:128)
64-
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
65-
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
53+
at java.util.Arrays.copyOf(Arrays.java:2882)
54+
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
55+
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572)
56+
at java.lang.StringBuffer.append(StringBuffer.java:320)
57+
- locked <0x00000007908d0030> (a java.lang.StringBuffer)
58+
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:890)
59+
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869)
60+
at java.text.DateFormat.format(DateFormat.java:316)
61+
at com.xxx.foo.services.common.DateFormatUtil.format(DateFormatUtil.java:41)
62+
at com.xxx.foo.shared.monitor.schedule.AppMonitorDataAvgScheduler.run(AppMonitorDataAvgScheduler.java:126)
63+
at com.xxx.foo.services.common.utils.AliTimer$2.run(AliTimer.java:128)
64+
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
65+
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
6666
...
6767
```
6868

@@ -92,31 +92,75 @@ The stack of busy(26.1%) thread(24018/0x5dd2) of java process(23269) of user(adm
9292
### 用法
9393

9494
```bash
95-
# 查找当前目录下所有Jar中的重复类的jar
96-
show-duplicate-java-classes.py
95+
# 查找当前目录下所有Jar中的重复类
96+
show-duplicate-java-classes
9797

98-
# 查找当前目录下所有Jar中的重复类的Jar
99-
show-duplicate-java-classes.py -v
98+
# 查找指定目录下所有Jar中的重复类
99+
show-duplicate-java-classes path/to/lib/dir
100100

101-
# 查找当前目录及其子目录下所有Jar中的重复类
102-
show-duplicate-java-classes.py -r
101+
# 查找多个指定Class目录下的重复类
102+
show-duplicate-java-classes path/to/lib/dir1 /path/to/lib/dir2
103103

104-
# 查找当前目录下所有Jar中的重复类,排除指定的一些Jar,使用glob匹配
105-
show-duplicate-java-classes.py -e '*spring*.jar' --excludes '*apache*.jar'
106-
107-
# 查找当前目录下所有Jar中的重复类,结果到html文件中,包含Jar中重复类的明细
108-
show-duplicate-java-classes.py --html
104+
# 查找指定Class目录和指定目录下所有Jar中的重复类的jar
105+
show-duplicate-java-classes -c path/to/classes/dir1 -c path/to/classes/dir2 path/to/lib/dir1 /path/to/lib/dir2
109106
```
110107

111108
### 示例
112109

113110
```bash
114-
$ show-duplicate-java-classes.py
115-
['./ace4j-servicemgr-inner-api-0.0.1-20141223.031744-27.jar', './ace4j-servicemgr-inner-impl-0.0.1-20141223.031744-27.jar']
116-
['./ace4j-servicemgr-impl-0.0.1-SNAPSHOT.jar', './ace4j-servicemgr-inner-impl-0.0.1-20141223.031744-27.jar']
117-
......
111+
$ show-duplicate-java-classes WEB-INF/lib
112+
$ show-duplicate-java-classes -c WEB-INF/classes WEB-INF/libFound duplicate classes in below class path:
113+
1 (293@2): WEB-INF/lib/sourceforge.spring-2.5.6.SEC02.jar WEB-INF/lib/sourceforge.spring.modules.orm-2.5.6.SEC02.jar
114+
2 (2@3): WEB-INF/lib/servlet-api-3.0-alpha-1.jar WEB-INF/lib/jsp-api-2.1-rev-1.jar WEB-INF/lib/jstl-api-1.2-rev-1.jar
115+
3 (104@2): WEB-INF/lib/commons-io-2.2.jar WEB-INF/lib/jakarta.commons.io-2.0.jar
116+
4 (6@3): WEB-INF/lib/jakarta.commons.logging-1.1.jar WEB-INF/lib/commons-logging-1.1.1.jar WEB-INF/lib/org.slf4j.jcl104-over-slf4j-1.5.6.jar
117+
5 (344@2): WEB-INF/lib/sourceforge.spring-2.5.6.SEC02.jar WEB-INF/lib/sourceforge.spring.modules.context-2.5.6.SEC02.jar
118+
...
119+
120+
================================================================================
121+
Duplicate classes detail info:
122+
================================================================================
123+
1 (293@2): WEB-INF/lib/sourceforge.spring-2.5.6.SEC02.jar WEB-INF/lib/sourceforge.spring.modules.orm-2.5.6.SEC02.jar
124+
1 org/springframework/orm/toplink/TopLinkTemplate$13.class
125+
2 org/springframework/orm/hibernate3/HibernateTemplate$24.class
126+
3 org/springframework/orm/jpa/vendor/HibernateJpaDialect.class
127+
4 org/springframework/orm/hibernate3/TypeDefinitionBean.class
128+
5 org/springframework/orm/hibernate3/SessionHolder.class
129+
...
130+
2 (2@3): WEB-INF/lib/servlet-api-3.0-alpha-1.jar WEB-INF/lib/jsp-api-2.1-rev-1.jar WEB-INF/lib/jstl-api-1.2-rev-1.jar
131+
1 javax/servlet/ServletException.class
132+
2 javax/servlet/ServletContext.class
133+
3 (104@2): WEB-INF/lib/commons-io-2.2.jar WEB-INF/lib/jakarta.commons.io-2.0.jar
134+
1 org/apache/commons/io/input/ProxyReader.class
135+
2 org/apache/commons/io/output/FileWriterWithEncoding.class
136+
3 org/apache/commons/io/output/TaggedOutputStream.class
137+
4 org/apache/commons/io/filefilter/NotFileFilter.class
138+
5 org/apache/commons/io/filefilter/TrueFileFilter.class
139+
...
140+
...
118141

119-
$ show-duplicate-java-classes.py --html > result.html
142+
================================================================================
143+
class paths to find:
144+
================================================================================
145+
1 : WEB-INF/lib/sourceforge.spring.modules.context-2.5.6.SEC02.jar
146+
2 : WEB-INF/lib/misc.htmlparser-0.0.0.jar
147+
3 : WEB-INF/lib/normandy.client-1.0.2.jar
148+
4 : WEB-INF/lib/xml.xmlgraphics__batik-css-1.7.jar-1.7.jar
149+
5 : WEB-INF/lib/jakarta.ecs-1.4.2.jar
150+
...
151+
152+
$ show-duplicate-java-classes WEB-INF/lib
153+
COOL! No duplicate classes found!
154+
155+
================================================================================
156+
class paths to find:
157+
================================================================================
158+
1 : WEB-INF/lib/sourceforge.spring.modules.context-2.5.6.SEC02.jar
159+
2 : WEB-INF/lib/misc.htmlparser-0.0.0.jar
160+
3 : WEB-INF/lib/normandy.client-1.0.2.jar
161+
4 : WEB-INF/lib/xml.xmlgraphics__batik-css-1.7.jar-1.7.jar
162+
5 : WEB-INF/lib/jakarta.ecs-1.4.2.jar
163+
...
120164
```
121165

122166
### 贡献者
@@ -344,9 +388,9 @@ tcp-connection-state-counter.sh
344388

345389
```bash
346390
$ tcp-connection-state-counter.sh
347-
ESTABLISHED 290
348-
TIME_WAIT 212
349-
SYN_SENT 17
391+
ESTABLISHED 290
392+
TIME_WAIT 212
393+
SYN_SENT 17
350394
```
351395

352396
:beer: [parseOpts.sh](parseOpts.sh)
@@ -401,13 +445,13 @@ source /path/to/parseOpts.sh
401445

402446
parseOpts "a,a-long|b,b-long:|c,c-long+" -a -b bv --c-long c.sh -p pv -q qv arg1 \; aa bb cc
403447
# 可以通过下面全局变量来获得解析的参数值:
404-
# _OPT_VALUE_a = true
405-
# _OPT_VALUE_a_long = true
406-
# _OPT_VALUE_b = bv
407-
# _OPT_VALUE_b_long = bv
408-
# _OPT_VALUE_c = (c.sh -p pv -q qv arg1) ,数组类型
409-
# _OPT_VALUE_c_long = (c.sh -p pv -q qv arg1) ,数组类型
410-
# _OPT_ARGS = (aa bb cc) ,数组类型
448+
# _OPT_VALUE_a = true
449+
# _OPT_VALUE_a_long = true
450+
# _OPT_VALUE_b = bv
451+
# _OPT_VALUE_b_long = bv
452+
# _OPT_VALUE_c = (c.sh -p pv -q qv arg1) ,数组类型
453+
# _OPT_VALUE_c_long = (c.sh -p pv -q qv arg1) ,数组类型
454+
# _OPT_ARGS = (aa bb cc) ,数组类型
411455
```
412456

413457
`--`的使用效果示例:
@@ -418,13 +462,13 @@ source /path/to/parseOpts.sh
418462

419463
parseOpts "a,a-long|b,b-long:|c,c-long+" -a -b bv -- --c-long c.sh -p pv -q qv arg1 \; aa bb cc
420464
# 可以通过下面全局变量来获得解析的参数值:
421-
# _OPT_VALUE_a = true
422-
# _OPT_VALUE_a_long = true
423-
# _OPT_VALUE_b = bv
424-
# _OPT_VALUE_b_long = bv
425-
# _OPT_VALUE_c 没有设置过
426-
# _OPT_VALUE_c_long 没有设置过
427-
# _OPT_ARGS = (--c-long c.sh -p pv -q qv arg1 ';' aa bb cc) ,数组类型
465+
# _OPT_VALUE_a = true
466+
# _OPT_VALUE_a_long = true
467+
# _OPT_VALUE_b = bv
468+
# _OPT_VALUE_b_long = bv
469+
# _OPT_VALUE_c 没有设置过
470+
# _OPT_VALUE_c_long 没有设置过
471+
# _OPT_ARGS = (--c-long c.sh -p pv -q qv arg1 ';' aa bb cc) ,数组类型
428472
```
429473

430474
### 兼容性

0 commit comments

Comments
 (0)