性能调优1-工具

一,jstack(linux下特有)

可以观察到jvm中当前所有线程的运行情况和线程当前状态

1. 抓取分析文件的用法是:/usr/java/jdk1.6.0_13/bin/jstack -l 11831(其中11831是当前的java进程,这个需要自己ps看)

 

2. 抓到的文件内容大概是下面这个样子:

 

2010-03-18 13:09:52
Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.3-b02 mixed mode):

"Attach Listener" daemon prio=10 tid=0x00002aab41d02c00 nid=0x748b waiting on condition [0x0000000000000000..0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"SocketAcceptorIoProcessor-0.4" prio=10 tid=0x00002aab3e586800 nid=0x6a71 runnable [0x000000004234b000..0x000000004234bd20]
   java.lang.Thread.State: RUNNABLE
	at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
	at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:215)
	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
	- locked <0x00002aaab6c85770> (a sun.nio.ch.Util$1)
	- locked <0x00002aaab6c85788> (a java.util.Collections$UnmodifiableSet)
	- locked <0x00002aaab6c856f8> (a sun.nio.ch.EPollSelectorImpl)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
	at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:480)
	at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)

   Locked ownable synchronizers:
	- <0x00002aaab6c84ed0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

 

3.可以看出的问题:

   其实打出来的内容不是很好,但是如果同一个方法在输出内出现多次,或者是locked某些资源,就可以初步判定一下问题。

 

 

 

二。 jmap(linux下特有(推荐!)

1.观察运行中的jvm物理内存的占用情况。参数如下:

-heap:打印jvm heap的情况
-histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live :同上,但是只答应存活对象的情况
-permstat:打印permanent generation heap情况

 

2.用法:

jmap -J-d64 -dump:live,format=b,file=heap_dump.bin 15605

通常会将jmap的信息重定向输出到文件,然后使用工具来分析:) 比如MemoryAnalyzer这个非常牛的工具,

 

MemoryAnalyzer视图:这个视图还是比较强大的,会分析出最有可能泄露的4-5个根源,可以看到系统全部对象的资源。



 

 

 

。。oql,对象查询,,说实话不太会用。。但是掌握了估计用处很大,jhat也是支持这种查找的。

 

 

DB连接池泄露分析(还是这种gui的搜索方式比较对胃口),直接找一下connection,看看个数是不是接近pool.size上限,然后进去分析每个连接资源



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值