linux系统性能概览工具(一): top
top是linux命令行中绝对top10的命令,使用起来说简单也简单,说复杂也复杂.关于top无非两点:
- 理解top的信息输出.并根据该信息对系统状况进行判断.不要只会敲top,但是不知道信息具体是什么意思,或者看不到全部信息.
- 快速获取自己关心的数据,也就是过滤排序的一个过程.因为top默认是3秒刷新的,有时看到一个自己关心的进程,结果一刷新进程不见了,好尴尬啊!
说实话top有点老了,htop要比top更好用.显示上颜色更加好看,功能要比top更强.个人喜欢htop的两点:
- 便捷的搜索(过滤)与排序功能
- 可以方便的与
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. 显示数据说明
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 选择一组进行单独显示.这个很好用.