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
就可以看到它消耗在哪个类