生产环境系统运行慢,出现无法响应通常原因主要还在于分析CPU、内存、磁盘使用率情况,并结合命令查找出具体进程,并在进程中进一步分析主要因子情况,渗透到对于其中包含线程占用情况的分析。一般而言对于java项目需要结合top命令及jstack、jconsole等一系列命令综合进行分析,一步步追踪到某个线程,某段代码出现问题所在。现在就top命令具体用法做下分析。

top命令总结_物理内存

第一行

周期范围内的负载情况

10:16:18 为当前时间

up 23:44 为自上次重启来系统运行时间(单位为分钟,会根据时间不断变换新的单位)

1 user 当前登录用户数

load average:0.06 0.60 0.48 系统负载,分别为1分钟、5分钟、15分钟系统负载平均值

一般负载不超过CPU核心数

第二行:

进程运行数目情况

total: 表示进程任务总数

running: 表示正在运行的进程数

sleeping: 睡眠的进程数

stopped: 停止的进程数

zombile:僵尸进程数

第三行:

CPU使用率情况

%us: 用户空间所占CPU百分比

%sy: 系统内核空间所占CPU百分比

%ni: 用户进程改变过优先级的进程所占用的CPU百分比

通过nice命令可以更改优先级

负值优先级高,正值优先级低

-20最高,-19最低

%id:空闲CPU百分比,空闲百分比越低说明CPU资源使用有问题

%wa:等待输入输出的CPU百分比

因为CPU速度比硬盘写入数度快,有等待数据写入的过程,如果这个值大说明硬盘写入速度比较慢,压力比较大。 也就是IO性能可能存在瓶颈,可以通过命令iostat来查看

%hi: 硬件CPU重大中断占用的CPU百分比

一般硬件中断可以分析文件/proc/interrupts 、/proc/irq/pid/smp_affinity、服务 irqbalance 是否配置、以及CPU的频率设置

%si: 软中断所占用百分比

软中断一般和网络有关,如网卡到IP层的数据包收发,系统长时间写日志等都会产生软中断。 当网络出现拥塞,软件中断程序 ksoftirqd 肯定会出现瓶颈,可使用 ps aux | grep ksoftirqd 命令查看相关信息。

%st: 虚拟机占用百分比

第四行:

内存使用情况

total: 物理内存总量

used: 已使用物理内存总量

free: 空闲内存总量

buffer/cache: 用作内核缓存的内存

buffers 和 cached 的作用是缩短I/O 系统调用的时间,比如读写。cache 的值大,说明 cache 住的文件数多,若频繁的访问文件能被命中,则明显会比读取磁盘调用快,磁盘的IO必定会减少。若命中率低,要考虑 drop cache 并提升命中率

第五行:

交换空间使用情况

total: 交换空间总量

used: 已使用交互空间总量

free: 空闲交换空间总量

avail Mem: 实际可用内存 ( free+buff/cache)

第六行:

PID: 进程ID

USER: 进程所有者用户名

PR:优先级

NI:nice值,负值表示高优先级,正值表示低优先级

VIRT: 进程使用的虚拟内存总量,单位为Kib

RES: 进程使用的未被换出的物理内存大小(即进程实际使用内存)

SHR:共享内存大小单位为KiB

S:进程状态

R= 运行

S= 睡眠

T= 跟踪/停止

D= 不可中断的睡眠状态

Z= 僵尸进程

%CPU: 进程所占用的CPU百分比

%MEM: 进程所占用的物理内存百分比

TIME+: 进程使用的CPU时间总和,单位1/100秒

COMMAND: 命令行名称

显示CPU逻辑核心使用情况

按住键盘数字1键,显示逻辑CPU使用情况

top命令总结_top命令总结_02

快速进行按指定指标排序

按住键盘X键,将默认按列高亮显示**%CPU使用率降序排列**

按住键盘 shift+> 或 shift+< 键,进行左右改变排序的指标列

top命令总结_top命令_03