性能调优工具Jstack使用
来源:互联网 发布:软件行业平均毛利率 编辑:程序博客网 时间:2024/06/05 00:58
前言:在web开发过程中,不管是eclipse还是web服务有时候会经常遇到OutofMemoryError(内存不足),内存泄露,线程锁死,java进程CPU过高等操作,服务器可以允许这些问题的存在,导致这些问题在日常开发中被更多的人忽略掉。
jstack的作用:
jstack 用于答应给定的java进程ID或者core file或远程调试服务的java堆栈信息,可以使用它查明问题。
详细命令格式:
jstack [ option ] pidjstack [ option ] executable corejstack [ option ] [server-id@] remote-hostname-or-IP
如果是在64位机器上,需要指定选项”-J-d64”,
首先看一下针对程序死锁的错误排查
package **/** * @author peng * @date 2015年9月14日 * @desc 死锁例子 */public class JstackLockTest { public static void main(String[] args) { final Object lock1 = new Object(), lock2 = new Object(); Thread t1 = new Thread("t1") { @Override public void run() { synchronized (lock1) { try { Thread.sleep(3000); } catch (InterruptedException e) { } synchronized (lock2) { System.out.println("thread t1 done."); } } } }; Thread t2 = new Thread("t2") { @Override public void run() { synchronized (lock2) { try { Thread.sleep(3000); } catch (InterruptedException e) { } synchronized (lock1) { System.out.println("thread t2 done."); } } } }; t1.start(); t2.start(); }}
上面示例代码是一个死锁的例子,如果在开发过程中遇到这样的例子,如图一所示:
等了很长时间都没有任何输出,而程序一直在运行中,然后通过jsp查看该程序的jpid值,使用jstack来查看堆栈信息:
Linux代码:
$jps10502 JstackLockTest12815 Jps5393 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar10863 JstackLockTest$jstack -l 10502
对应的结果:
......省略前面log"Finalizer" daemon prio=10 tid=0x00007fbd7c079000 nid=0x2912 in Object.wait() [0x00007fbd80ff6000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000f5561300> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0x00000000f5561300> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171) Locked ownable synchronizers: - None"Reference Handler" daemon prio=10 tid=0x00007fbd7c077800 nid=0x2911 in Object.wait() [0x00007fbd810f7000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000f55611d8> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x00000000f55611d8> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers: - None......省略后面log
从这个结果文件我们一看到发现了一个死锁,具体是线程t2在等待线程t1,而线程t1在等待线程t2造成的,同时也记录了线程的堆栈和代码行数,通过这个堆栈和行数我们就可以去检查对应的代码块,从而发现问题和解决问题。
对于高cpu的排查
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26045 peng 20 0 3186184 1.239g 1.145g S 100.4 8.0 421:44.79 vmware-vmx
14938 peng 20 0 1920880 31368 13076 S 100.1 0.2 3:03.75 java
9564 peng 20 0 4404644 1.187g 1.163g S 3.3 7.6 462:03.29 vmware-vmx
1132 root 20 0 540820 122556 104088 S 1.7 0.8 22:07.77 Xorg
3746 peng 20 0 1612920 196932 36636 S 1.7 1.2 33:28.35 compiz
12545 peng 20 0 857900 50584 23196 S 1.0 0.3 0:07.37 /usr/bin/termin
10 root 20 0 0 0 0 S 0.3 0.0 0:32.85 rcuos/2
490 peng 20 0 1173848 171256 60884 S 0.3 1.0 0:51.94 chromium-browse
981 peng 20 0 1288652 290592 64952 S 0.3 1.8 0:49.72 chromi
- 性能调优工具Jstack使用
- 性能调优 jstack
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- jvm 性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- Android中SharedPreferences使用方法介绍
- #include<string> 与#include<string.h>
- phantomjs设置截图大小
- android.support.v4.view.ViewPager 如何动态更换显示内容
- Sqlite3 使用入门
- 性能调优工具Jstack使用
- OC的内存管理
- 蒋鑫:为什么 Git 比 SVN 好
- Xamarin.Android使用教程之Android开发所需的模拟器
- Memcached之——整合Spring完整示例
- BI商业智能概述——大数据时代
- 洛谷1373 小a和uim之大逃离(dp)
- c/c++中delete/free 指针后,设置p=NULL的好处
- perl 正则表达式