本片将介绍服务器性能监控的几个命令:top free df vmstat iostat sar ps ……
top
top - 17:42:55 up 85 days, 6:58, 2 users, load average: 0.01, 0.01, 0.00
Tasks: 151 total, 1 running, 150 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.5 hi, 0.0 si, 0.0 st
MiB Mem : 1887.8 total, 190.0 free, 859.9 used, 837.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 804.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
226319 root 20 0 142788 24928 10548 S 0.7 1.3 160:41.19 AliYunDunMonito
804 redis 20 0 261488 5940 1912 S 0.3 0.3 154:43.59 redis-server
936 root 20 0 1589168 21884 6796 S 0.3 1.1 554:43.01 argusagent
1065 root 20 0 393468 25744 23748 S 0.3 1.3 4:31.24 rsyslogd
226308 root 20 0 97316 12036 9036 S 0.3 0.6 94:13.81 AliYunDun
278069 root 20 0 227020 4428 3764 R 0.3 0.2 0:00.02 top
1 root 20 0 104348 11584 8652 S 0.0 0.6 2:09.87 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.12 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
第一行显示结果:系统运行时长、当前系统时间、当前登录的用户数、1分钟5分钟15分钟的平均负载情况。
第二行显示任务进程:当前服务器总进程(total)、在运行的进程(running)、睡眠进程(sleeping)、停止的进程(stopped)、僵尸进程(zombie)。
第三行显示CPU状态信息:
- us(用户空间占用CPU的百分比)
- sy(内核空间占用CPU的百分比)
- ni(改变过优先级的进程占用CPU的百分比)
- id(空闲CPU百分比)
- wa(IO等待占用CPU的百分比)
- hi(硬中断占用CPU的百分比)
- si(软中断占用CPU的百分比)
第四行显示内存状态
第五行显示swap内存状态
:这里注意 实际可用内存=free(空闲) + buffer(缓冲) + cached(缓存)
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
第七行以下显示各进程(任务)的状态监控
- PID — 进程id
- USER — 进程所有者
- PR — 进程优先级
- NI — nice值。负值表示高优先级,正值表示低优先级
- VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
- RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
- SHR — 共享内存大小,单位kb
- S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
- %CPU — 上次更新到现在的CPU时间占用百分比
- %MEM — 进程使用的物理内存百分比
- TIME+ — 进程使用的CPU时间总计,单位1/100秒
- COMMAND — 进程名称(命令名/命令行)
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:
- l – 关闭或开启第一部分第一行 top 信息的表示
- t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
- m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
- N – 以 PID 的大小的顺序排列表示进程列表
- P – 以 CPU 占用率大小的顺序排列进程列表
- M – 以内存占用率大小的顺序排列进程列表
- T – 以时间/累计时间大小的顺序排列进程列表
- h – 显示帮助
- n – 设置在进程列表所显示进程的数量
- c – 显示进程的详细信息
- q – 退出 top
- s – 改变画面更新周期
free
free是指查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。
total used free shared buff/cache available
Mem: 1.8Gi 861Mi 157Mi 70Mi 868Mi 802Mi
Swap: 0B 0B 0B
- -b:以bytes为单位来显示内存的信息
- -k:以kb为单位来显示内存的信息
- -m:以m为单位来显示内存的信息
- -g:以G为单位来显示内存的信息
- -h:以适于人类可读方式显示内存信息,根据内存大小使用方便阅读单位显示
- -l:显示详细的低和高内存统计信息
- -t:显示linux的全部内存
- -s:表示每隔N秒打印一次内存信息
- -c:表示重复打印内存信息N次
- -w:宽幅输出,将带有/的字段拆开
- -V :显示版本信息
在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。
free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。
df(du)
df (disk free):通过文件系统中未分配的空间来确定文件系统中已分配空间的大小。
du(disk usage):计算那些可以访问的文件所占用的存储空间。后面必须接路径。
-a:显示全部目录和其次目录下的每个档案所占的磁盘空间
-s:只显示各档案大小的总合
vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 140300 139916 763972 0 0 2 4 2 3 1 1 99 0 0
- r 表示运行队列(就是说多少个进程真的分配到CPU)。
- b 表示阻塞的进程。
- swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
- free 空闲的物理内存的大小。
- buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存。
- cache cache直接用来记忆我们打开的文件,给文件做缓冲。
- si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
- so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
- bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
- bo 块设备每秒发送的块数量。
- in 每秒CPU的中断次数,包括时间中断。
- cs 每秒上下文切换次数。
- us 用户使用CPU占比。
- sy 系统使用CPU占比。
- id 空闲使用CPU占比。
- wt 等待IO的CPU占比。
iostat
iostat是用来查看服务器IO使用情况的命令,重要要理解IO统计的单位。
avg-cpu: %user %nice %system %iowait %steal %idle
0.59 0.01 0.68 0.01 0.00 98.71
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 1.01 3.24 7.86 24075475 58389892
sar
sar是一个非常全面的一个分析工具,可以比较瑞士军刀,对文件的读写,系统调用的使用情况,磁盘IO,CPU相关使用情况,内存使用情况,进程活动等都可以进行有效的分析。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
首先查看–help
[root@server1 ~]# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Main options and reports (report name between square brackets):
-B Paging statistics [A_PAGE]
-b I/O and transfer rate statistics [A_IO]
-d Block devices statistics [A_DISK]
-F [ MOUNT ]
Filesystems statistics [A_FS]
-H Hugepages utilization statistics [A_HUGE]
-I { <int_list> | SUM | ALL }
Interrupts statistics [A_IRQ]
-m { <keyword> [,...] | ALL }
Power management statistics [A_PWR_...]
Keywords are:
CPU CPU instantaneous clock frequency
FAN Fans speed
FREQ CPU average clock frequency
IN Voltage inputs
TEMP Devices temperature
USB USB devices plugged into the system
-n { <keyword> [,...] | ALL }
Network statistics [A_NET_...]
Keywords are:
DEV Network interfaces
EDEV Network interfaces (errors)
NFS NFS client
NFSD NFS server
SOCK Sockets (v4)
IP IP traffic (v4)
EIP IP traffic (v4) (errors)
ICMP ICMP traffic (v4)
EICMP ICMP traffic (v4) (errors)
TCP TCP traffic (v4)
ETCP TCP traffic (v4) (errors)
UDP UDP traffic (v4)
SOCK6 Sockets (v6)
IP6 IP traffic (v6)
EIP6 IP traffic (v6) (errors)
ICMP6 ICMP traffic (v6)
EICMP6 ICMP traffic (v6) (errors)
UDP6 UDP traffic (v6)
FC Fibre channel HBAs
SOFT Software-based network processing
-q Queue length and load average statistics [A_QUEUE]
-r [ ALL ]
Memory utilization statistics [A_MEMORY]
-S Swap space utilization statistics [A_MEMORY]
-u [ ALL ]
CPU utilization statistics [A_CPU]
-v Kernel tables statistics [A_KTABLES]
-W Swapping statistics [A_SWAP]
-w Task creation and system switching statistics [A_PCSW]
-y TTY devices statistics [A_SERIAL]
- -A:所有报告的总和
- -u:输出CPU使用情况的统计信息
- -v:输出inode、文件和其他内核表的统计信息
- -d:输出每一个块设备的活动信息
- -r:输出内存和交换空间的统计信息
- -b:显示I/O和传送速率的统计信息
- -R:输出内存页面的统计信息
- -y:终端设备活动情况
- -w:输出系统交换活动信息
- -B:显示换页状态;
- -e:设置显示报告的结束时间
- -f:从指定文件提取报告
- -i:设状态信息刷新的间隔时间
- -p:报告每个CPU的状态
- -q:平均负载分析
TIPS:sar有很多有用的服务器监测功能,这里不一一介绍,可以使用“man sar”在手册中查看。
ps
ps (process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。可以查看到服务器中运行的每一条进程。
ps的常用参数:
- -A 显示所有进程。
- -e 此参数的效果和指定”A”参数相同。
- -a 显示一个终端的所有进程,除了会话引线
- -x 显示没有控制终端的进程,同时显示各个命令的具体路径
- -f 全部列出,通常和其他选项联用
- -u 显示当前用户的进程状态
常用:
列出当前内存中的所有进程:ps -aux
查看服务器当前在运行的所有进程详细命令情况:ps -ef
ps命令参数有上百个之多,具体信息可通过“man ps”查看,通常都会配合grep命令来进行过滤查找目标。