linux服务器查询java线程占用的资源

1、使用top命令 ,查询java进程

比如选择86184这个进程

2、用 top -H -p 86184  ,查询该进程下的线程资源

3、使用jstack 86184 > jstack.txt  ,输出 该进程下的线程信息,

4、比如,观察到86344这个线程占用cpu 大, 将十进制的86344 转换成16进制  15148 (十进制转为其他进制 : echo "obase=进制;值" | bc 或者 echo 'ibase=10;obase=16;801312852' |bc

  cat jstack.txt | grep -i  15148

可以查看到是ump 监控线程的信息 

一、查询资源占用率高的进程

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 to this object 找出引用此对象的object,通过此过程找到了内存不释放的原因

 

三、如何定位服务器性能问题

(1)常用方法:排除法、极限法、猜错法、探针法、清单法等等
(2)可能的性能瓶颈:大量大图片、程序内存泄漏、程序死锁、文件频繁读写、慢SQL、缓存雪崩等等
例如:门户类型网站访问首页有大量大图片情况下,通过网络传输耗时;
例如:慢SQL,比如我们的数据库使用的是mysql,存量数据增大后,执行select语句的耗时超过1秒钟,这样的SQL就是慢SQL,需要我们对这样的慢SQL给出调优方案。
(3)JVM。例如应用服务器堆内存设置

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值