Linux常用性能监测工具参数说明
文章目录
- top详解
- 1️⃣ 第一行:系统整体信息
- 2️⃣ 第二行:任务信息 (进程状态)
- 3️⃣ 第三行:CPU 使用率
- 4️⃣ 第四、五行:内存与 SWAP
- buffer 与 cache 区别
- 5️⃣ 进程列表详解
- 6️⃣ 实用技巧
- jstack堆栈信息
- 1. 线程基本信息解读
- 2. 线程状态说明
- 3. 堆栈跟踪分析
- 4. 为什么重点关注 `nid`
top详解
1️⃣ 第一行:系统整体信息
top - 21:08:03 up 0 min, 1 user, load average: 1.79, 0.41, 0.13
- 系统时间:
21:08:03
→ 当前时间 - 运行时间 (uptime):
up 0 min
→ 系统运行了 0 分钟 - 登录用户数:
1 user
→ 当前登录系统的用户数量 - 负载平均值 (load average):
1.79, 0.41, 0.13
- 分别表示 1分钟、5分钟、15分钟 的平均负载
- Load > CPU核心数 → CPU 可能出现瓶颈
- 在
top
下按1
可以查看每个 CPU 的使用情况
💡 Tip:Linux负载不是百分比,是排队的进程数,值越大表示系统压力越大。
2️⃣ 第二行:任务信息 (进程状态)
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
- total:总进程数 = 29
- running:运行中进程 = 1
- sleeping:睡眠状态 = 28(大多数进程通常处于睡眠状态)
- stopped:停止状态 = 0
- zombie:僵尸进程 = 0
⚠️ 重点关注 僵尸进程,如果长期存在僵尸进程,说明父进程未处理子进程退出。
3️⃣ 第三行:CPU 使用率
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
各字段说明:
缩写 | 含义 | 正常参考 |
---|---|---|
us | 用户态 CPU 占比 | 0~70% 视负载 |
sy | 内核态 CPU 占比 | 0~20% |
ni | nice 值改变优先级进程占比 | 通常很小 |
id | 空闲 CPU | 越高说明 CPU 空闲越多 |
wa | I/O 等待 | 高说明磁盘或网络瓶颈 |
hi | 硬中断占比 | 高说明硬件问题 |
si | 软中断占比 | 高频率说明内核任务处理重 |
st | steal time | 虚拟机被抢占 CPU 时间片占比 |
小技巧:
us + sy + ni
≈ CPU 实际使用率,id
≈ 空闲率
4️⃣ 第四、五行:内存与 SWAP
MiB Mem : 7836.1 total, 7297.3 free, 563.2 used, 203.1 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 7272.9 avail Mem
- 总内存:
7836.1 MiB
- 空闲内存:
7297.3 MiB
- 已用内存:
563.2 MiB
- 缓冲 + 缓存:
203.1 MiB
- 可用内存 = free + buffers + cached =
约 7.5 GiB
- SWAP:用于内存不足时硬盘扩展
- 如果
used
高 → 内存紧张 - SWAP 高 → 系统性能可能下降
- 如果
buffer 与 cache 区别
- buffer:主要用于内核数据结构缓冲,如 I/O 数据块
- cache:主要用于文件缓存,加快数据访问速度
- 总结:Linux 会尽量用空闲内存做 cache,不代表内存不足
5️⃣ 进程列表详解
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
188 polkitd 20 0 306708 9084 6440 S 0.3 0.1 0:00.20 polkitd
字段说明:
字段 | 含义 |
---|---|
PID | 进程 ID |
USER | 所属用户 |
PR | 优先级 |
NI | nice 值 |
VIRT | 虚拟内存 = 进程可用内存总量(含 swap + 映射文件) |
RES | 驻留内存 = 实际占用物理内存 |
SHR | 共享内存 |
S | 进程状态:R=运行,S=睡眠,Z=僵尸,T=停止 |
%CPU | CPU 占用率 |
%MEM | 内存占用率 |
TIME+ | CPU 累计使用时间 |
COMMAND | 进程名称 |
⚠️ RES - SHR ≈ 进程实际占用的物理内存
6️⃣ 实用技巧
- 监控 CPU 核心负载:
top
→ 按1
- 排序:
- 按
%CPU
排序 →P
- 按
%MEM
排序 →M
- 按
- 查看特定进程:
top -p PID
- 终止进程:在 top 中按
k
→ 输入 PID
jstack堆栈信息
1. 线程基本信息解读
"pool-1-thread-1" #10 prio=5 os_prio=0 tid=0x00007f09e0166000 nid=0x7316 runnable [0x00007f09cc9cb000]java.lang.Thread.State: RUNNABLEat com.tuling.learnjuc.demo.JVMCPU$CPUTask.run(JVMCPU.java:16)- locked <0x0000000757d645b8> (a java.lang.Object)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:750)Locked ownable synchronizers:- <0x0000000757d65d00> (a java.util.concurrent.ThreadPoolExecutor$Worker)
字段 | 含义 |
---|---|
"pool-1-thread-1" | 线程名称,方便识别线程来源,例如线程池创建的线程 |
#10 | JVM 给线程分配的序号,从 #1 开始按创建顺序编号 |
prio=5 | Java 线程优先级(1-10,默认5) |
os_prio=0 | 操作系统线程优先级(与 Java 优先级可能不完全一致) |
tid=0x00007f09e0166000 | JVM 内部线程 ID(16 进制表示) |
nid=0x7316 | 操作系统线程 ID(Native Thread ID,十六进制) |
runnable | 线程状态(RUNNABLE、BLOCKED 等) |
[0x00007f09cc9cb000] | 线程的本地栈地址 |
注意:
nid
最常用来在操作系统层面定位线程,例如用top -H -p <pid>
查看 CPU 占用。
2. 线程状态说明
- NEW:线程刚创建,还没启动。
- RUNNABLE:线程可运行或正在 CPU 上运行。
- BLOCKED:线程在等待某个锁。
- WAITING:无限期等待另一个线程动作(
Object.wait()
/LockSupport.park()
等)。 - TIMED_WAITING:有超时限制的等待(
Thread.sleep()
/join(long)
/Lock.tryLock(timeout)
)。 - TERMINATED:线程已结束。
重点关注:
RUNNABLE
和BLOCKED
,尤其是高 CPU 或死锁分析时。
3. 堆栈跟踪分析
at com.tuling.learnjuc.demo.JVMCPU$CPUTask.run(JVMCPU.java:16)
- locked <0x0000000757d645b8> (a java.lang.Object)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
at com.tuling.learnjuc.demo.JVMCPU$CPUTask.run(JVMCPU.java:16)
当前线程正在执行的 Java 方法,定位问题代码行。- locked <0x0000000757d645b8>
当前线程持有的锁对象地址,可用于分析死锁或竞争。Locked ownable synchronizers
线程持有的可拥有锁(例如ReentrantLock
),在死锁排查中很有用。
4. 为什么重点关注 nid
-
nid
是操作系统层的线程 ID,可以用来和系统工具对应:# 查看线程 CPU 使用情况 top -H -p <pid>
然后找到对应的
nid
(十六进制需转为十进制)。 -
高 CPU、死锁、线程卡顿排查时,
nid
+ 堆栈信息是最直接证据。