Linux 笔记 - 第十三章 Linux 系统日常管理之(一)系统状态监控
一、前言
如果你是一名 Linux 运维人员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行。系统运行状态主要包括:系统负载、内存状态、进程状态、CPU 负载等信息。
二、监控系统的状态
监控系统的状态主要包括系统负载和 CPU 的使用率。
2.1 w 查看当前系统的负载
需要特别关注的是第一行的 "load average:"后面的3个数值,第1个数值表示1分钟内系统的平均负载值,第2个数值表示5分钟内系统的平均负载值,第3个值表示15分钟内系统地平均负载值。这个值表示单位时间段内 CPU 的活动进程数,这个值越大就说明服务器压力越大。通常情况下,这个值只要不超过服务器的 CPU 数量就没有关系。
[root@ryan ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4710MQ CPU @ 2.50GHz
stepping : 3
microcode : 23
cpu MHz : 2494.259
cache size : 6144 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm ida arat epb xsaveopt pln pts dtherm fsgsbase bmi1 avx2 smep bmi2 invpcid
bogomips : 4988.51
clflush size : 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4710MQ CPU @ 2.50GHz
stepping : 3
microcode : 23
cpu MHz : 2494.259
cache size : 6144 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm ida arat epb xsaveopt pln pts dtherm fsgsbase bmi1 avx2 smep bmi2 invpcid
bogomips : 4988.51
clflush size : 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:
此处查看 processor 的数值,从 0 开始,得到处理器的个数。
也可以使用 uptime 命令,显示的内容为:使用 w 命令输出的第一行,从左到右即为:系统现在的时间,系统从上次开机到现在运行了多长时间,系统目前有多少登录用户,系统在1分钟内、5分钟内、15分钟内的平均负载。
[root@ryan ~]# uptime
19:00:29 up 91 days, 21:39, 1 user, load average: 0.11, 0.05, 0.05
2.2 vmstat 监控系统的状态
vmstat - Report virtual memory statistics,报告虚拟内存的统计信息,包含6个部分:procs、memory、swap、io、system 和 cpu。重点关注一下 r、b、si、so、bi 和 bo 这几列信息。
其中:
buff 表示缓冲区,即准备要写入磁盘的数据大小,buff 缓冲(cpu 处理完的数据 > 内存 (buff)> 磁盘);
cache 表示缓存区,即准备从磁盘中需要读取的数据大小,cache 缓存(磁盘 > 内存(cache) > cpu 处理数据)。
# vmstat 3
表示每3秒钟更新一次输出信息,循环输出,按 Ctrl + c 键结束。
# vmstat 3 5
表示每隔3秒更新一次输出信息,共输出5次后停止。
2.3 命令 iostat
显示 CPU 的统计信息和磁盘输入/输出的统计信息。
-c 选项:只显示 CPU 的使用情况;
-d 选项:只显示磁盘的使用情况;
2.4 top 显示进程锁占的系统资源
top 命令用于动态监控进程所占的系统资源,默认时间间隔:每隔3秒更新一次。
默认排序方式:按照 %CPU 降序排序,按 Shift + m 按照 %MEM 降序排序。
# top -d 5 表示设置每隔5秒更新一次输出信息;执行 top 命令后按数字1,可以查看每个 CPU 的使用状态,按 z 可彩色显示;
# top -c 将最后一列的命令显示为完整路径。
直接使用 top 命令如下:
使用 top -c 之后,按 1,然后按 z,显示如下:
# top -bn1,表示非动态打印系统资源的使用情况:
最左侧显示进程 ID,即 PID,通过 PID 编号可以在 /proc/ 目录下面查到对应 PID 的目录,即系统内存的映射目录,进入后即可查询到对应进程的详细信息。
2.5 sar 监控系统状态
sar 命令很强大,它可以监控系统所有资源的状态。比如平均负载、网卡流量、磁盘状态、内存使用等。它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。列的单位为 Byte。
如果系统没有安装这个命令,请使用:yum install -y systat。它的数据库在 /var/log/sa 目录下。
查看网卡流量,以十分钟为间隔
sar -n DEV
如果想实时查看网卡流量,如:
# sar -n DEV 1 3
表示 1 秒显示一次,共显示3秒次后结束:
如果需要查看指定某一天的网卡流量历史,可以添加 -f 选项,后面跟文件名。
查看流量历史目录,ls -l /var/log/sa:
查看流量历史文件,sar -n DEV -f /var/log/sa/sa06:
查看历史负载
# sar -q
会显示历史负载,以 10 分钟为间隔:
sar -b 可以对磁盘I/O进行统计,sar -b 1 3 表示1秒钟统计一次,共统计3秒钟:
2.6 free 查看内存使用状况
free 命令可以查看当前系统的总内存大小以及使用内存的情况。默认单位为 KB,添加 -m 或者 -h 可以分别以 MB 或者合适的单位显示内存的使用容量。最后一行为 swap 交换分区大小,如果系统没有设置 swap,则不显示。如下:
以上图为例,当前系统总内存大小为 1906280KB,以及使用 154884KB,剩余 1751396KB。如果把 buffers 和 cached 考虑在内,实际剩余内存大小并不是 1751396KB,而是 1810784 KB,实际使用的内存也应该是 95496 KB,而不是 154884KB。
可以通过将 watch 和 free 相结合来动态监控内存状况:
在 watch 后面跟上需要运行的命令,watch 就会自动重复运行这个命令,默认2秒钟执行一次,并把执行的结果更新到屏幕上:
# watch -n 3 -d free
-n 指定重复执行的时间,-d 表示高亮显示变动。
2.7 ps 查看系统进程
常用的 ps 命令的参数组合为:
# ps aux
# ps -elf
可以看出,使用 # ps aux 时,不用加 "-" 符号,# ps -elf 比 # ps aux 在最左侧多了一列 父进程 id。
pgrep 命令通过进程名称从运行进程队列中查找进程,并显示查找到的进程id。常用的选项有 -lo 表示列出对应进程组中最小进程号和程序名,-ln 表示列出对应进程组中最大进程号和程序名。
2.8 netstat 查看网络状况
netstat 命令用来打印网络连接状况、系统所开放的端口、路由表等信息。
打印当前系统开放了哪些端口:
# netstat -lnp,仅显示监听状态的端口
打印网络连接状况:
# netstat -an,显示所有监听的端口和非监听状态的连接
注意:
从整体上看,netstat 的输出结果可以分为两个部分:
一个是 Active Internet connections,称为有源TCP连接,其中 "Recv-Q" 和 "Send-Q" 指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是 Active UNIX domain sockets,称为有源 Unix 域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
ss 命令用来显示处于活动状态的套接字信息。ss 命令可以用来获取 socket 统计信息,它可以显示和 netstat 类似的内容。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快速更高效。
综上命令进行简单归类:
CPU 性能评估:vmstat 命令、sar 命令、iostat 命令、uptime 命令等;
内存性能评估:free 命令、vmstat 命令、sar -r 命令等;
磁盘 I/O 性能评估:sar -d 命令、iostat -d 命令、vmstat -d 命令等;
网络性能评估:netstat -I 命令、netstat -r 命令、sar -n 命令等;