转自:http://blog.csdn.net/never_cxb/article/details/48197967
java 性能监控 工具
除了 javac java javap 之外, jdk 安装包还提供了很多其他工具
列出 bin 目录下的文件
<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-constant" style="box-sizing: border-box;">TomChens</span>-<span class="hljs-constant" style="box-sizing: border-box;">MacBook</span>-<span class="hljs-constant" style="box-sizing: border-box;">Pro</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:Commands</span> tomchen<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>ls appletviewer javadoc jmap keytool serialver apt javah jmc native2ascii servertool extcheck javap jps orbd tnameserv idlj javaws jrunscript pack20<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> unpack20<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> jar jcmd jsadebugd policytool wsgen jarsigner jconsole jstack rmic wsimport java jdb jstat rmid xjc java_home jhat jstatd rmiregistry javac jinfo jvisualvm schemagen</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>
jvisualvm
可以在线安装很多插件, 这是最新的非常强大的多合一故障处理工具
生成 Heap Dump, 可以在OQL Console 执行类似 sql 语句的 OQL
jvisualvm 的 BTrace 插件
生产环境服务无法停止的时候, 而日志里的信息无法满足我们需要时候, 可以通过这个打印调用堆栈 参数 返回值等
jconsole
也是一个图形化的监控工具
jps 虚拟机进程状况工具
类似于 ps 命令
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">jps -l <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">582</span> HttpFind <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">431</span> RefreshBlog<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.jar</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">585</span> sun<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tools</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.jps</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Jps</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
jstat 虚拟机统计信息监控工具
<code class="hljs mathematica has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> jstat -gcutil <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">431</span> S0 S1 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">E</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">O</span> P YGC YGCT FGC FGCT GCT <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.00</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">57.17</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12.43</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24.74</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">42.31</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">13</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.044</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.000</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.044</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>
从中可以看出 survivor(S0 S1) eden (E) young GC(YGC) 等参数
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">jstat <span class="hljs-attribute" style="box-sizing: border-box;">-class</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">434</span> Loaded <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Bytes</span> Unloaded <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Bytes</span> Time <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17095</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">36897.7</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1899</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2970.9</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14.87</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
类加载时间为14.87
jstack java堆栈管理工具
可以查看线程死锁
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">jstack <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">582</span> ...... ...... Found one Java-level deadlock: ============================= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-199"</span>: waiting to lock monitor <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007facb3027608</span> (object <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b528</span>, a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>), which is held by <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-3"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-3"</span>: waiting to lock monitor <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007facb3026108</span> (object <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b518</span>, a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>), which is held by <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-8"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-8"</span>: waiting to lock monitor <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007facb3027608</span> (object <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b528</span>, a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>), which is held by <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-3"</span> Java stack information for the threads listed above: =================================================== <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-199"</span>: at HttpFind$SyncAdd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.run</span>(HttpFind<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">52</span>) - waiting to lock <<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b528</span>> (a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>) at java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Thread</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.run</span>(Thread<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">722</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-3"</span>: at HttpFind$SyncAdd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.run</span>(HttpFind<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">53</span>) - waiting to lock <<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b518</span>> (a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>) - locked <<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b528</span>> (a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>) at java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Thread</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.run</span>(Thread<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">722</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Thread-8"</span>: at HttpFind$SyncAdd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.run</span>(HttpFind<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">53</span>) - waiting to lock <<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b528</span>> (a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>) - locked <<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000007e786b518</span>> (a java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Integer</span>) at java<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.lang</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Thread</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.run</span>(Thread<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">722</span>) Found <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> deadlock. </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li></ul>