LINUX服务器,内存溢出常用命令

  • Post author:
  • Post category:linux



1. 查看各挂载点的容量及信息

df -h
[root@dm8-0001 appdata]# df -h
文件系统                                     容量  已用  可用 已用% 挂载点
devtmpfs                                      16G     0   16G    0% /dev
tmpfs                                         16G   64K   16G    1% /dev/shm
tmpfs                                         16G  1.6G   14G   10% /run
tmpfs                                         16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/klas_host--10--224--53--70-root   35G   18G   18G   51% /
tmpfs                                         16G  896K   16G    1% /tmp
/dev/vdb1                                    500G   57G  444G   12% /appdata
/dev/vda2                                   1014M  218M  797M   22% /boot
/dev/vda1                                    200M  5.8M  195M    3% /boot/efi
tmpfs                                        3.1G     0  3.1G    0% /run/user/993
tmpfs                                        3.1G     0  3.1G    0% /run/user/0
/dev/loop0                                   4.1G  4.1G     0  100% /yum


2. 查看目前内存使用情况

free -g
[root@dm8-0001 appdata]# free -g
              total        used        free      shared  buff/cache   available
Mem:             30          15           2           0          12           9
Swap:             3           1           2


3. 抓取堆栈信息

我这里中间件使用的是金蝶

pid直接用ps -ef | grep apusic命令去查就行

 jmap -dump:live,format=b,file=/xxx/xxx/heap.hprof pid


4. 系统宕机时linux环境导出堆栈日志和内存详细占用日志



方法1:如系统直接宕机可采用自动打dump方式:


一般在启动文件startup.bat或startup.sh中设置

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dump

其中/opt/dump为系统真实路径可自行修改

系统会自动记录OOM时候的内存堆栈,并生成dump文件供开发排查分析。


方法2:如系统处于响应慢,所有操作十分卡顿状态,并未直接宕机,可采用手动打dump方式:


此过程不可关闭tomcat

步骤1:查看中间件进程PID

	ps –ef|grep tomcat

步骤2:通过jstack命令输出堆栈日志到指定位置

	jstack $pid > /opt/dump1350/jstack.txt

步骤3:通过jmap命令输出内存详细占用日志到指定位置

	jmap -dump:format=b,file=/opt/dump1350/dump.hprof  $pid


5. 根据进程号查询最耗费CPU的线程

TIME列就是各个Java线程耗费的CPU时间

top -Hp pid

在这里插入图片描述

找到最耗费时间的线程,通过下列命令获取到16进制值

printf "%x\n" $pid

在这里插入图片描述

jstack上场,输出进程21711的堆栈信息,然后根据线程ID的十六进制值grep

jstack 1980747 | grep 1e581a

就可以看到它消耗在哪个类



版权声明:本文为weixin_43896556原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。