前言
由于工作中常常需要兼顾运维工作,涉及到对服务器资源的巡检,所以会用到各种命令来检查服务器各项指标是否正常,本篇文章将介绍巡检过程中常用的命令,也是给自己做一个总结,希望对各位读者有所帮助。
一、CPU篇
(一)top命令
top
命令其实算是一个比较综合的查询系统资源的命令,它提供了一个动态的、交互式的实时视图。我们从下图中可以看到,看板中大致可以分为两个模块,上面的模块是系统的整体性能信息,下面的模块展示正在运行的进程的相关信息。
我们现在主要关心CPU参数,那么我们就先忽略其他内容,先聚焦于第三行的CPU信息。
1、关于CPU 参数的解释
我们可以看到,图中展示的cpu信息是:%Cpu(s): 5.6 us, 1.1 sy, 0.0 ni, 93.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
,这一串文本具体是什么意思呢?
我们可以结合下面的名词解释进行介绍。
us
us是user
的缩写,表示用户空间占用CPU百分比 。正常情况下,我们部署在服务器上面的应用、中间件以及执行的脚本,都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态。
像5.6 us
表示的就是当前服务器用户空间占用CPU的百分比为5.6%
,其实很多应用都是属于非CPU密集型类型的,所以CPU资源占用少是比较正常的。sy
sy是system
的缩写,表示内核空间占用CPU百分比。所有进程要使用的系统资源都是由Linux内核处理的。当处于用户态(用户地址空间)的进程需要使用系统的资源时,比如需要分配一些内存、或是执行IO操作、再或者是去创建一个子进程,此时就会进入内核态(内核地址空间)运行。事实上,决定进程在下一时刻是否会被运行的进程调度程序就运行在内核态。
一般来说,sy占比比较高的常见场景是系统中存在大量的IO操作(比如说文件拷贝,大批量的内存回收)或者是并发状态下服务器处理请求ni
ni 是nice
的缩写,表示用户进程空间内改变过优先级的进程占用CPU百分比。Linux支持我们通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间。如果系统中没有进程被调整过nice值,那么ni就显示为0
(这个用得比较少,我们一般也不怎么关注)id
id 是idle
的缩写,表示空闲CPU百分比。我们可以利用这个值来获取当前空闲的CPU以及反向推算CPU的使用率wa
wa是wait
的缩写等待输入输出的CPU时间百分比。我们知道CPU的速度要远比磁盘的IO速度快得多,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的。hi和si
hi和si分别是hard interrupt
和soft interrupt
,对应硬中断和软中断占用百分比。
硬中断表示硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理(消耗CPU时间)
软中断表示由程序发出的中断,最终也会执行相应的处理程序(消耗CPU时间)
那么cpu使用率怎么看?
可以两种计算方式:100% - id%
或者 us% + sy% ni%
(后者的公式不是很严谨,没算上等待时间和中断时间,但一般基本都够用),通过任意一个式子基本上就可以得到当前服务器cpu资源的使用情况了
2、top命令常用的参数
选项 | 效果 |
---|---|
-d <秒数> | 指定 top 命令的刷新时间间隔,单位为秒(不指定的话默认3s刷新一次) |
-n <次数> | 指定 top 命令运行的次数后自动退出 |
-p <进程ID> | 仅显示指定进程ID的信息 |
-u <用户名> | 仅显示指定用户名的进程信息 |
-H | 在进程信息中显示线程详细信息 |
-i | 不显示闲置(idle)或无用的进程 |
-b | 以批处理(batch)模式运行,直接将结果输出到文件 |
-c | 显示完整的命令行而不截断 |
-S | 累计显示进程的 CPU 使用时间 |
3、top的交互命令
top
命令和其他常见命令不同的地方在于,它在执行过程中支持交互性的传递参数。下面我们就列举几个常用的交互性参数吧
命令 | 解释 |
---|---|
1 | 多cpu情况下会展示每个cpu的使用情况,其实用得不算多 |
u + 用户名 | 筛选出指定用户的进程 |
E | 切换顶部的内存显示单位,从KB/MB/GB/T/E等单位轮询切换 |
e | 切换底部进程的内存显示单位,从KB/MB/GB/T/E等单位轮询切换 |
c | 展示COMMAND 列中完整的命令行 |
注意事项
巡检的时候由于服务器数量多,且top命令默认又是交互型的命令,所以我们一般不太会每台服务器都登录上去手动执行top
命令后再手动按q
退出。
我们一般会非交互式地执行top
命令,并把结果输出到一个结果文件中
top -n 1 >> a.txt
二、内存篇
其实top
命令本身就已经包含了内存数据,不过更多时候笔者还是习惯用free
命令来快速查看系统当前的内存使用情况
(一)free命令
free
命令是专门用来展示当前系统的内存和Swap交换区使用情况的命令,默认情况下结果以KB为单位进行展示
我们可以加一些选项来优化输出结果
结果以(人类)易读模式展示
free -h
结果加上汇总列
free -t
三、磁盘篇
(一)df
df命令是disk free
的缩写,表示磁盘空间,是我们经常用来检查磁盘使用空间的命令。df命令默认情况下也是以KB作为展示单位,我们常常会使用df -h
命令来方便我们查看结果
了解Linux系统根路径目录的读者可能已经发现了,
df
命令的结果中并没有/etc
、/proc
等根路径目录的存储结果,这是因为df
命令是以文件系统为单位进行展示的,如果你想知道怎么判断某个目录是属于哪个文件系统,可以从下一小节的磁盘清理介绍中了解到更多细节。
(二)关于磁盘清理
当出现磁盘空间超过健康值的情况,我们一般会对磁盘容量进行分析,查看哪些文件以及目录占用的磁盘空间比较高,再根据实际情况来进行转移/压缩或者删除处理。
假设现在我发现/dev/mapper/rootvg-lv_root
这个文件系统空间快满了,希望删除一些临时文件来减轻磁盘压力,那么这个时候我们会希望知道当前删除的文件是否在这个文件系统上面。我们可以通过下面的命令来查看这个文件(夹)是属于哪个文件系统的
df path
(三)du
du命令是disk usage
单词的缩写,表示磁盘使用情况。和df
命令不同,df
命令是一个大而笼统的统计,有时候我们可能只是单纯希望统计某个目录下所有文件的总大小。这个时候du
命令会更适合我们,du命令默认情况下会展示当前目录下所有子目录的大小(注意,这里的子目录是已经包含子目录内所有层级所有文件的大小))以及当前目录的总大小,存储单位为KB。但是du
命令默认不会展示目录内非目录类型的文件大小
下面是比较常见的选项
选项 | 解释 |
---|---|
-a / -all | 详细展示所有层级的子目录和文件大小 |
-h或--human-readable | 以K,M,G为单位,提高信息的可读性 |
-s | 比较实用的命令,一般来说我们更关注当前下一个层级目录的总大小。仅显示指定目录或文件的总大小,而不显示其子目录的大小 |
--exclude=<目录或文件> | 略过指定的目录或文件 |
--max-depth=<目录层数> | 超过指定层数的目录后,予以忽略 |
笔者一般会使用du -sh * | sort -rh | head -n 5
来快速查看当前目录下最占空间的目录或者文件