生产环境系统运行慢,出现无法响应通常原因主要还在于分析CPU、内存、磁盘使用率情况,并结合命令查找出具体进程,并在进程中进一步分析主要因子情况,渗透到对于其中包含线程占用情况的分析。一般而言对于java项目需要结合top命令及jstack、jconsole等一系列命令综合进行分析,一步步追踪到某个线程,某段代码出现问题所在。现在就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使用情况
快速进行按指定指标排序
按住键盘X键,将默认按列高亮显示**%CPU使用率降序排列**
按住键盘 shift+> 或 shift+< 键,进行左右改变排序的指标列