
做性能测试有时需要监控系统的状况,top 是 Linux 下的动态进程监视工具,我们可以用这个工具来查看系统cup、内存等资源。这个方法不需要我们再安装其他工具,简单方便。
在终端输入top,出现如下内容:

top 输出分为统计区和进程区。统计区决定了系统上限,进程区只负责查肇事者。
统 计 区

第一行
top:当前时间。
up:机器运行了多长时间。
users:当前登录用户数。
load average:平均负载,分别代表过去 1分钟、5分钟、15分钟 的运行队列中(处于可运行状态或不可中断睡眠状态)的平均进程数。
注意:如果 1分钟值 >> 15分钟值,说明系统正在突增流量,性能正在急剧恶化;反之则说明高峰正在过去。
第二行
total:当前有多少进程,即共存在的 进程(PID) 总数(包含内核态和用户态)。
running:正在运行或可运行状态,处于 R (Running 或 Runnable) 状态的进程数。
sleeping:正在休眠的进程数,这类进程在等待某个事件(如等待用户输入、等待网络数据包、等待锁释放)。
stopped:处于暂停状态的进程。
zombie:僵尸进程数。
注意:正常情况应为 0,如果持续增长,说明父进程存在 Bug。虽然僵尸进程不占用 CPU 和内存资源,但它占用进程号PID,如果僵尸进程持续累积导致 PID 耗尽,系统将无法再创建任何新进程,服务彻底瘫痪,且此时 top 的 load average 可能并不高。
第三行
CPU 状态:us、sy、id、wa、hi、si。
us (User Space):用户进程占用 CPU 百分比。如果这个数值过大(如> 80%):应用层代码存在密集计算,如死循环、大量正则解析、JSON序列化,需要结合进程区定位具体进程进行代码级剖析。
sy (System Space):内核空间占用 CPU 百分比(系统调用)。
正常:us : sy 约等于 2 : 1。
异常:如果 sy 持续超过 20%~30%,说明系统调用过于频繁(如频繁读写文件、频繁创建销毁线程)。此时即使 us 不高,系统吞吐量也会急剧下降。
id (Idle):空闲 CPU。值越低,说明 CPU 越繁忙。如果 id 长期接近于 0%,意味着 CPU 已成为绝对瓶颈。
wa (I/O Wait):等待 I/O 完成的时间。
警界值:> 5% 就需要警觉;> 20% 表明严重 I/O 瓶颈。这通常意味着磁盘(HDD/SSD)读写太慢,或数据库正在执行全表扫描。
hi (Hardware Interrupts) / si (Software Interrupts):硬件/软件中断。
注意:正常情况下应 接近于 0%。如果 si 突然升高(如 > 5%),通常是由于网卡流量暴涨(网络软中断)或 USB/PCIe 设备驱动问题,导致 CPU 被频繁打断。
第四行
total:物理内存总量。
free:空闲内存量,不是最关键的指标,当内存的free变少的时候,并不需要太紧张,真正需要看的是Swap中的used信息。
used:使用的内存量。
buffer/cache:用作内核缓存的内存量。
第五行
total:交换区内存总量。
free:空闲交换区总量。
used:使用的交换区总量,理想值为0 KB,如果Swap used > 0,说明物理内存已经不足,系统开始使用磁盘作为虚拟内存。
avail Mem:实际可供程序使用的内存。

进程区关键指标
RES (Resident Memory):物理内存常驻大小,可以用来判断内存泄漏。
S (Status):
R (Running):正在运行或等待队列中。
D (Uninterruptible Sleep):正在等待磁盘 I/O。
%CPU:这里是单个核心的占用率。
注意:如果某个 Java/Python 进程的 RES 持续线性增长且不下降,判定为内存泄漏。如果有大量 D 状态的进程堆积,证明磁盘性能已崩溃。
夜雨聆风