JAVA线上问题排查

710 阅读2分钟

前言

最近生产环境某系统出现内存占用满导致被linux服务器kill的情况,本文记录下生产环境排查java应用的常用命令

正文

1、首先,使用top命令查询占用系统资源过高的进程

2、top参数解析

列名含义
PID进程id
USER进程所有者
PR进程优先级
NInice值。负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR共享内存大小,单位kb
S进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME进程使用的CPU时间总计,单位1/100秒
COMMAND进程名称(命令名/命令行)

2、使用free命令查看内存占用情况

3、jmap命令
jmap -heap pid 查看指定进程堆栈情况
jmap -histo pid 查看指定进程堆中对象的个数
jmap -dump:format=b,file=filename pid 导出指定进程堆栈信息

4、jstat命令
jstat -gc pid 5000 打印指定进程gc次数
jstat -gccouse pid 5000 打印指定进程gc信息以及gc原因

5、使用jdk自带工具监控进程
1)启动脚本中新增如下启动配置

-Dcom.sun.management.jmxremote.port=port -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=ip

2)在安装有JDK的windows电脑上打开JDK安装路径/bin/jvisualvm.exe工具,右击远程,点击添加远程主机,输入应用服务器IP 3)右击刚添加的远程主机,点击添加JMX连接,在连接输入框中输入设置的端口号,点击确定,若连接失败则选择使用安全凭证,输入应用服务器用户名/密码,点击确定即可 4)连接后便可实时查看进程的运行情况