一、查看CPU实时运行情况
top
第一部分
第一行 | 参数 | 含义 | 备注 |
top时间 | 系统当前时间 | ||
up 时间 | 系统运行时间 | 开机时间 | |
数字users | 用户登录人数 | ||
load average: | 系统平均负载 | 负载越高越使用率越高 | |
第二行 | Tasks: 137 total | 总进程数 | |
1 running | 1个进程在运行 | ||
136 sleeping | 休眠线程数 | ||
0 stopped | 停止线程数 | ||
0 zombie | 僵尸线程数 | ||
第三行 | 0.0 us | 用户空间占用CPU百分比 | user mode |
0.1 sy | 内核空间占用CPU百分比 | system mode | |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 | low priority user mode (nice) | |
99.9 id | 闲CPU百分比 | idle task | |
0.0 wa | 等待IO的CPU时间百分比 | I/O waiting | |
0.0 hi | 硬件中断时间百分比 | servicing IRQs | |
0.0 si | 软件中断 时间百分比 | servicing soft IRQs | |
0.0 st | 实时时间百分比 | steal (time given to other DomU instances) | |
第四行 | 3736.2 total | 物理内存总量(MB) | |
152.5 free | 空闲内存总量(MB) | ||
718.8 used | 使用的物理内存总量(MB) | ||
2864.9 buff/cache | 用作内核缓存的内存量(MB) | ||
第四行 | 0.0 total | 交换区总量(MB) | |
0.0 free | 空闲交换区总量(MB) | ||
0.0 used | 使用的交换区总量(MB) | ||
2726.0 avail Mem | 可用的内存(MB) |
第二部分
简写 | 全称 | 含义 |
PID | Process Id | 进程ID |
USER | User Name | 当前进程运行的用户 |
PR | Priority | 优先级 |
NI | Nice Value | 负值表示高优先级,正值表示低优先级 |
VIRT | Virtual Image | 进程使用的虚拟内存总量(KB)。VIRT=SWAP+RES |
RES | Resident size | 进程使用的、未被换出的物理内存大小(KB)。RES=CODE+DATA |
SHR | Shared Mem size | 共享内存大小,单位(KB) |
S | Status | 进程状态(D|R|S|T|Z),可以看后面那进程张状态表 |
%CPU | cpu | CPU占用百分比 |
%MEM | memory | 内存占用百分比 |
TIME+ | TIME | 系统运行时间 |
COMMAND | COMMAND | 运行的程序 |
进程状态表
状态值 | 含义 | 全称 |
R | 运行 | running |
D | 不可中断的睡眠状态 | uninterruptible sleep |
S | 睡眠 | sleeping |
T | 跟踪/停止 | traced or stopped |
Z | 僵尸进程 | zombie |
I | 空闲 | Idle |
X | Dead | top命令看不到 |
一、查看内存的占用情况
free
-m MB单位显示
-h 表示以人类可读的方式显示
参数 | 含义 |
total | 总内存 |
used | 使用内存 |
free | 空闲内存 |
shared | 共享内存 |
buff/cache | 缓冲区内存 |
available | 可用内存 |
三、查看磁盘的占用情况
df -h
四、查看GC情况
查看java 进程几种方式
1.使用 ps -ef|grep java 即可查看java进程id
2.使用 jps -q 查看所有进程Id
3.使用 jps -m 查看进程i 并带上main参数信息
4.使用 jps -l 查看进程id 并带上应用程序jar和完成路径名
5.使用 jps -v 查看进程id 并带上jvm参数信息
进程的GC回收状态
jstat -gc 851827 2000
命令及参数 | 含义 |
jstat | jdk自带的工具 |
-gc | 查看gc的情况(还可以查看class/compile/gcold) |
34574 | 进程ID,本次要查看的进程ID为34574,生产上要根据上一步的jps获得 |
2000 | 每隔2000毫秒打印一次 |
保存进程的栈现场
jstack 34574 > jstack.log
参数或命令 | 含义 |
jstack | jdk自带命令,可以查看栈现场的情况 |
34574 | 进程ID,本次要查看的进程ID为34574,生产上要根据上一步的jps获得 |
> | 重定向 |
jstack.log | 重定向到当前目录下的jstack.log,若没有则生成 |
对刚刚生成的栈现场文件进行分析,查看有多少个线程
grep 'java.lang.Thread.State' jstack.log | wc -l
参数或命令 | 含义 |
grep | 匹配并过滤出 |
‘java.lang.Thread.State’ | 匹配并过滤出java.lang.Thread.State的文本内容 |
jstack.log | 被过滤的文件 |
| | 管道,用于将过滤出的结果传递给下一个命令 |
wc | word count 统计 |
-l | 按行统计,统计行数 |
查看线程是否有异样
grep -A 1 'java.lang.Thread.State' jstack.log | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n
参数 | 含义 |
grep -A 1 ‘java.lang.Thread.State’ | 匹配 java.lang.Thread.State并过滤文件,并关联出对应上下各1行 |
jstack.log | 被匹配的文件 |
| | 管道,将刚刚的输出结果作为输入 |
grep -v ‘java.lang.Thread.State’ | 匹配不含java.lang.Thread.State的内容(这样只剩下上下各一行) |
sort | 将所有行按照字典序排序 |
uniq -c | 去除排序后相连重复的行 |
sort -n | 以数字的形式排序 |
保存进程的堆现场
jmap -dump:format=b,file=heap.log 851827
参数或命令 | 含义 |
jmap | jdk自带命令,可以查看堆现场的情况 |
-dump:format=b | 以二进制的形式输出堆 |
file=heap.log | 输出文件的文件名为heap.log |
851827 | 进程ID,本次要查看的进程ID为34574,生产上要根据上一步的jps获得 |
压缩heap.log 下载到本地
gzip -6 heap.log
解压后修改后缀名为hprof,在使用分析工具进行查看
标签:泄漏,java,log,查看,Thread,排查,内存,进程 From: https://www.cnblogs.com/Ali0826/p/16757539.html