top命名使用详解

top 命令

top是linux/unix系统自带的系统排查命令,但是你真的了解其中的意义吗?

top命名使用详解
每一行都显示了不同的系统信息。

  • 第一行

    分表代表 系统时间、机器的运行时间、目前系统登陆的用户数(可以使用who查看)、load average(从左到右分别为 Load1 Load5 Load15 ,解释为 一分钟,五分钟,十五分钟 Load 的平均值)
    load :通常表明了目前系统的运行情况,n核(直接按数字键盘的1,可以看到该 cpu 的核数,以及每个 cpu 核的具体情况)的cpu最大Load负载值就是n,超过n说明此时机器已经在超负荷运行。

  • 第二行

系统目前的进程情况 total 是目前系统所有进程数、 running 是目前运行的进程数、sleeping 是目前sleep 的进程数、 stopped 为中断进程数、 zombie 为僵尸进程数。
此时如果出现过多的zombie或stopped进程,需考虑系统是否有调整过进程的优先级,建议重启机器。

  • 第三行
    cpu的详细信息(直接按数字键盘的 1 ,可以看到该 cpu 的核数,以及每个 cpu 核的具体情况 )
    us(user model) 是指用户空间占用cpu的时间百分比(cpu在执行用户自己的代码时)
    sy(system model) 是指内核空间占用CPU百分比
    ni(nice) 是指用户进程空间内改变过优先级的进程占用CPU百分比(ni默认是0,优先级从-20(高)到19(低),可以通过改变进程的ni使之获取更多的cpu时间片)
    id(idle task) 是指为空闲时间时间占比
    wa(I/O waiting) 是指等待磁盘读写消耗的cpu时间(如果说top下wa的比例较高,需考虑是否业务日志输出较多)
    hi(servicing IRQs) si(servicing soft IRQs) 是硬中断软中断耗费的 cpu 时间(硬中断是由外部硬件发起的cpu 中断信号,由中断控制器提供,如网卡来数据了,键盘按键了之类都算是硬中断,硬中断的cpu消耗是正常的,但不会过大,出现了硬中断大量的时间消耗,一般是计算机硬件出问题了)
    st(steal) 是指虚拟机从宿主机获取cpu时间片的耗时百分比,当机器是虚拟机的时候才会有值。

  • 第四、五行

分别是真实内存信息和交换内存信息。
total ,used ,free 分表标识总数、使用和空闲。used+free = total很好理解。buffer是buffer内存数,chache为cache的内存数。
下面我们详细的看下 buffers 和 cache。
cache 表示从硬盘中读取文件中到内存的缓存,例如我们打开文件或是vi 看文件的时候占用的是cache。而buffer是用户两个系统间速度不均衡的缓存,例如我们都知道程序要从网络上获取数据,通常网络数据是需要先经过网卡到系统的buffer,然后再拷贝到程序空间的buffer的,此时占用的都是buffer。
一句话简单而精辟的说明 Buffer通常是待处理的数据,而Cache是处理结果。

看下 cache 与 buffer是linux系统的缓存内存,缓存内存在程序真实需要使用的时候才会释放。

所以真实使用的内存数应该是 used - buffer - cache
相对的真实空闲内存 free + cache + buffer
以上我们可以使用 free -h (-/+ buffers/cache) 其实就代表了这个意义。

  • top 最后一行

是系统中所有系统的进程情况
PID:是进程的 进程号
USER: 拉起进程的用户
PR: 该列值加100为进程优先级,若优先级小于100,则该进程为实时(real-time)进程,否则为普通(normal)进程,实时进程的优先级更高,更容易获得cpu调度,以上输出结果中,java进程优先级为120,是普通进程,had进程优先级为2,为实时进程,migration 进程的优先级RT对应于0,为最高优先级
NI: 进程的nice优先级值,该列中,实时进程的nice值为0,普通进程的nice值范围为-20~19 (通常进程优先级 = pr+ ni )
VIRT: 进程所占虚拟内存大小(默认单位kB)
RES: 进程所占物理内存大小(默认单位kB)
SHR: 进程所占共享内存大小(默认单位kB)
S: 进程的运行状态( D=不可中断的睡眠状态、R=运行、S=睡眠、T=跟踪/停止、Z=僵尸进程)
%CPU 表示进程占用的 cpu 百分比(top -Hp pid ,printf “%x \n” [pid] 转换16进制 显示线程内的cpu 占比 我们通常在分析cpu飙升的问题时经常会用到。)
%MEM 表示进程占用的 内存 百分比
TIME+: 进程使用的cpu时间总计
COMMAND: 拉起进程的命令