top
top 是Linux系统下的最常用性能工具,可以实时查看系统的资源使用情况,虽然是老生常谈,但作为一个必备系统状态查看工具不得不提。当系统或者应用出现问题是,很多工程师第一时间想到的就是打开 top,看一下CPU,内存这些情况,下面是top命令的运行截图:
在综合统计部分:
第一行综合负载信息
- 13:55:49 是上一次统计时间,每个一段时间会自动更新一次,比如 3 秒钟。
- up 4 min,表示系统自从上一次启动之后的运行时间,由于我是在虚拟机里进行测试,时间比较短,这里是4分钟。线上生产环境的机器往往都是以 days 为单位。比如 up 120 days。
- load average:系统最近1分钟,5分钟 和 15分钟的平均负载(TODO 对于负载的解释)也可以通过
uptime
获取到。
- 第二行是进程信息:
- total:表示已经启动的进程总数。
- running:正在运行的进程数。
- sleeping: 正在休眠的进程数。
- stoped:停止运行的进程数。
- zombile:僵尸进程总数(TODO 进一步解释)
- 第三行是CPU信息
- us:用户空间占用CPU百分比
- sy:系统内核空间占用CPU百分比
- ni:用户进程空间内改变过优先级的进程占用CPU百分比(TODO)?
- id:空闲CPU百分比。
- wa:等待输入输出的CPU时间百分比?
- hi:硬中断的时间百分比
- si:软中断的时间百分比
- st:运行虚拟机所消耗的真实CPU时间百分比,如果没有虚拟机运行该值为0.
第四、五行是内存信息,以字节为单位,total = free + used + buff/cache
- total,可用物理内存的总的空间大小。
- free,可用物理内存的剩余空间大小。
- used,已经使用的物理内存的空间大小。
- buff/cache,表示 buff 和 cache 之和,他们都是系统所使用的内存,buff 是内核使用的内存空间大小,用于速度不对等时数据传输的缓冲区,cache 是 Page Cache 和 Slab 使用的内存,用户缓存数据结果。在其他程序需要内存时,这部分空间会被释放。
- Avail Mem ,在不进行交换的情况下, 有空多少空闲内存可使用使用的估算值, 3.14内核以上才有。
第五行是交换空间信息
- total,交换内存空间大小,一般大于物理内存空间。
- free,空闲的交换空间大小。
- used,已经使用的交换空间大小。
第二个区域为线程信息,另外也可以通过 top -Hpid
PID:进程ID。
USER:启动进程锁使用的用户名。
PR:进程的优先级,由系统内核动态调整,值越低,优先级越高,越容易获得CPU资源。
NI:进程的 NICE 值,对于普通进程,RP值是在NI基础之上加 20,该值可以由用户调节,比如使用命令 renice -10 -p
。 VIRT:进程所占用的虚拟内存大小,以 KB为单位。
RES:进程所用的,未被换出物理内存的大小,以KB为单位。
SHR:进程所占用的共享内存的大小,以KB为单位。
S: 表示进程的运行状态,S 代表睡眠状态,其余的值还有 D:不可中断的随眠状态,R:运行中,T:跟踪/停止,Z:僵尸状态。
%CPU:进程当前占用的CPU资源比例。
%MEM:进程当前占用内存资源比例。
TIME+:进程总计使用的CPU时间。
COMMAND:启动进程的程序或命令。
Sar
System Activity Reporter系统活动情况报告
sar 不是系统自带的工具,需要单独安装,他是 sysstat 工具包中的一个,该包中还以 iostat、mpstat、sa 等工具。
安装:
yum -y install sysstat
配置:
$ cat /etc/cron.d/sysstat
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
(TODO,详细介绍)
tsar
TODO
vmstat
TODO
nload
nload 是一个网卡流量监控工具,可以实时监控网络吞吐量,非常简单,开箱即用,可以快速上手。
nload 的安装:通过 yum 安装需要先安装第三方 epel 仓库。
$ sudo yum -y install epel-release
$ sudo yum -y install nload
nload 的使用:其中 enp0s9 是本地的网卡名称。
$ sudo nload enp0s9
nload 显示的界面包含两部分,上半部分(Incoming)是流入网卡(通常是用户提交的请求数据)的流量,下半部分(Outgoing)是流出网卡(返回给用户的数据)的流量。每个部分都包含:当前采样周期内的流量(Curr),平均流量(Avg),最小流量(Min),最大流量(Max),总和流量(Ttl)这几个值。
nload 使用非常简单,只包含如下几个参数:
- -a: 平均值(Avg)的计时窗口,以秒为单位,默认是300秒。
- -i:Incoming 部分的流量图中每个柱状标记(一个竖行)的最大值,默认是 10240 kBit/s。
- -m: 值显示统计数据,不显示流量图。
- -o:Outgoing 部分的流量图的最大值,和 -i 类似。
- -t:显示数据的刷新时间,以毫秒为单位,默认是500毫秒。
- -u:Curr、Avg、Min、Max 的显示单位, h: 自动, b: Bit/s, k: kBit/s, m: MBit/s,H: auto, B: Byte/s, K: kByte/s, M: MByte/s etc。
- -U:设置 Ttl 的显示单位,和 -u 相同。