前言
最近生产环境某系统出现内存占用满导致被linux服务器kill的情况,本文记录下生产环境排查java应用的常用命令
正文
1、首先,使用top命令查询占用系统资源过高的进程
2、top参数解析
| 列名 | 含义 |
|---|---|
| PID | 进程id |
| USER | 进程所有者 |
| PR | 进程优先级 |
| NI | nice值。负值表示高优先级,正值表示低优先级 |
| 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)连接后便可实时查看进程的运行情况