一、查询资源占用率高的进程
1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
二、查看当前java程序中各对象的数量和占用空间
1. 命令如下,其中pid 为进程号
jmap -histo:live pid > pid.txt
也可以通过jmap -histo pid | head -n10 查看前10行的值
通过查看获取到[C代表Char
2,上图还是分析不出来哪个对象占用的多,需要借助
jmap -dump:format=b,file=a.txt pid
jhat -J-Xmx1024M a.txt
上面两个命令可以以页面的形式查看java程序内的内存分配情况
4,可以通过ip:7000访问此java内存的页面,5,通过以上分析出,我的User对象没有释放,导致User引用的所有对象都常驻内存,导致内存溢出,找到最下方的other query
进入 Show heap histogram
通过instance count 对比找出自己怀疑的异常对象,一般是自己包名下的类
通过References tothis object 找出引用此对象的object,通过此过程找到了内存不释放的原因
View Code
三、如何定位服务器性能问题
(1)常用方法:排除法、极限法、猜错法、探针法、清单法等等
(2)可能的性能瓶颈:大量大图片、程序内存泄漏、程序死锁、文件频繁读写、慢SQL、缓存雪崩等等
例如:门户类型网站访问首页有大量大图片情况下,通过网络传输耗时;
例如:慢SQL,比如我们的数据库使用的是mysql,存量数据增大后,执行select语句的耗时超过1秒钟,这样的SQL就是慢SQL,需要我们对这样的慢SQL给出调优方案。
(3)JVM。例如应用服务器堆内存设置
三、参考资料