linux下java进程占用内存过高(排查)

  最近发现一个很奇怪的现象,白天系统业务压力较大的时候服务器cpu,内存使用率正常。晚上业务量小,没人使用系统

的时候cpu正常,内存暴涨的70%以上。

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
内容解释:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

常用的命令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行

1>使用top命令查看 如图显示:


1517233070(1).jpg

2>使用命令 printf "%x\n" pid 可以对应进程id的16进制id 如图:


2.png

3>使用命令jstack pid|grep 16进制id -A 90 可以查看到具体的代码块:


1517233855(1).jpg

这样根据异常信息可以定位 具体问题 ,应该是这些thread正常消耗内存


3.png

唉。。。苦逼的解决中。。。后续更新解决方案。

推荐阅读更多精彩内容