linux系统性能概览工具(一): top

Posted by fishcried on December 15, 2014

top是linux命令行中绝对top10的命令,使用起来说简单也简单,说复杂也复杂.关于top无非两点:

  1. 理解top的信息输出.并根据该信息对系统状况进行判断.不要只会敲top,但是不知道信息具体是什么意思,或者看不到全部信息.
  2. 快速获取自己关心的数据,也就是过滤排序的一个过程.因为top默认是3秒刷新的,有时看到一个自己关心的进程,结果一刷新进程不见了,好尴尬啊!

说实话top有点老了,htop要比top更好用.显示上颜色更加好看,功能要比top更强.个人喜欢htop的两点:

  1. 便捷的搜索(过滤)与排序功能
  2. 可以方便的与lsof,strace,ltrace联动

1. 基本使用

top -hv|-bcHisS -d delay -n limit [-u|U user] -p pid -w [cols]

参数说明

  • -b : 批次模式运行。通常用作来将top的输出的结果传送给其他程式或储存成文件。
  • -c : 显示执行任务的命令行。
  • -d : 设定延迟时间
  • -h : 帮助
  • -H : 显示线程。当这个设定开启时,将显示所有进程产生的线程。
  • -i : 显示空闲的进程。
  • -n : 执行次数。一般与-b搭配使用
  • -u/U : 监控指定用户相关进程
  • -p : 监控指定的进程。当监控多个进程时,进程ID以逗号分隔。这个选项只能在命令行下使用。
  • -s : 安全模式操作
  • -S : 累计时间模式
  • -v : 显示top版本,然后退出。

2. 显示数据说明

top

2.1 系统运行时间和平均负载

top命令的顶部(第一行)显示与uptime命令相似.

当前时间 系统已运行的时间 当前登录用户的数量 相应最近5、10和15分钟内的平均负载

可以使用’l’命令切换uptime的显示。

2.2 任务状态

第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。

这些进程概括信息可以用’t’切换显示。

2.3 CPU状态

第三行显示的是CPU状态。 这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:

  • us, user: 运行(未调整优先级的) 用户进程的CPU时间
  • sy,system: 运行内核进程的CPU时间
  • ni,niced:运行已调整优先级的用户进程的CPU时间
  • wa,IO wait: 用于等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si: 处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间.这个只有在虚机中才有值

按1试试看,可以显示每个cpu的状态.

2.4 内存使用

接下来两行显示内存使用率,有点像’free’命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。 物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是: 全部、已使用、空闲和缓冲交换空间。

内存显示可以用’m’命令切换。

2.5 进程字段的说明

在横向列出的系统属性和状态下面,是以列显示的进程。不同的列代表下面要解释的不同属性。

默认上,top显示这些关于进程的属性:

  • PID 进程ID,进程的唯一标识符
  • USER 进程所有者的实际用户名。
  • PR 进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。
  • NI 进程的nice值(优先级)。越小的值意味着越高的优先级。
  • VIRT 进程使用的虚拟内存。
  • RES 驻留内存大小。驻留内存是任务使用的非交换物理内存大小。
  • SHR SHR是进程使用的共享内存。
  • S 这个是进程的状态。它有以下不同的值:
    • D - 不可中断的睡眠态。
    • R – 运行态
    • S – 睡眠态
    • T – 被跟踪或已停止
    • Z – 僵尸态 关于如何处理僵死进程可以参看这里
  • %CPU 自从上一次更新时到现在任务所使用的CPU时间百分比。
  • %MEM 进程使用的可用物理内存百分比。
  • TIME+ 任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
  • COMMAND 运行进程所使用的命令。

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息.可以按f然后进行添加显示.全部的项目如下:

      Fields Management for window 1:Def, whose current sort field is PR
   Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
   'd' or <Space> toggles display, 's' sets sort.  Use 'q' or <Esc> to end!

* PID     = Process Id             DATA    = Data+Stack (KiB)
* USER    = Effective User Name    nMaj    = Major Page Faults
* PR      = Priority               nMin    = Minor Page Faults
* NI      = Nice Value             nDRT    = Dirty Pages Count
* VIRT    = Virtual Image (KiB)    WCHAN   = Sleeping in Function
* RES     = Resident Size (KiB)    Flags   = Task Flags <sched.h>
* SHR     = Shared Memory (KiB)    CGROUPS = Control Groups
* S       = Process Status         SUPGIDS = Supp Groups IDs
* %CPU    = CPU Usage              SUPGRPS = Supp Groups Names
* %MEM    = Memory Usage (RES)     TGID    = Thread Group Id
* TIME+   = CPU Time, hundredths
* COMMAND = Command Name/Line
  PPID    = Parent Process pid
  UID     = Effective User Id
  RUID    = Real User Id
  RUSER   = Real User Name
  SUID    = Saved User Id
  SUSER   = Saved User Name
  GID     = Group Id
  GROUP   = Group Name
  PGRP    = Process Group Id
  TTY     = Controlling Tty
  TPGID   = Tty Process Grp Id
  SID     = Session Id
  nTH     = Number of Threads
  P       = Last Used Cpu (SMP)
  TIME    = CPU Time
  SWAP    = Swapped Size (KiB)
  CODE    = Code Size (KiB)

3 交互式热键

什么是热键,我的理解就是”一个按键解决全部”.

过滤

  • f|F 上面提到用户添加自己想要的项
  • H 统计线程
  • c 控制comm,是全部还是缩写
  • u|U 通过user过滤

关于数据排序

  • M 内存排序
  • N pid排序
  • P cpu排序
  • T TIME排序
  • R 反向
  • 如果需要对其他列进行排序,只需要x高亮列,然后使用<,>移动即可,这是个大招啊.

默认分组,类似于profile

  • A 分组显示,每组的列都不同,通过a/w可以进行切换
  • g 选择一组进行单独显示.这个很好用.

变更记录

Why Who When
create fishcired 2014-10-09
完善草稿 fishcired 2014-12-15
修改标题名称,形成top,htop,glances系列 fishcired 2015-06-08