共计 2844 个字符,预计需要花费 8 分钟才能阅读完成。
相信所有的 linux 管理员最常用的命令就是这个 w 了,该命令显示的信息还是蛮丰富的。第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。其实,在这些信息当中,我们最应该关注的应该是第一行中的‘load average:’后面的三个数值。
第一个数值表示 1 分钟内系统的平均负载值;第二个数值表示 5 分钟内系统的平均负载值;第三个数值表示 15 分钟系统的平均负载值。这个值的意义是,单位时间段内 CPU 活动进程数。当然这个值越大就说明服务器压力越大。一般情况下这个值只要不超过服务器的 cpu 数量就没有关系,如果服务器 cpu 数量为 8,那么这个值若小于 8,就说明当前服务器没有压力,否则就要关注一下了。那么如何查看服务器有几个 cpu?
‘/proc/cpuinfo’这个文件记录了 cpu 的详细信息。目前市面上的服务器通常都是 2 颗 4 核 cpu,在 linux 看来,它就是 8 个 cpu。查看这个文件时则会显示 8 段类似的信息,而最后一段信息中 processor : 后面跟的是‘7’所以查看当前系统有几个 cpu,我们可以使用这个命令:grep -c ‘processor’ /proc/cpuinfo 而如何看几颗物理 cpu 呢,需要查看关键字“physical id”, 由于此虚拟机只有一个 cpu 所以并未显示关于“physical id”的信息。
上面讲的 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力。vmstat 命令打印的结果共分为 6 部分:procs, memory, swap, io, system, cpu. 请重点关注一下 r b si so bi bo 几列。
r:表示运行和等待 cpu 时间片的进程数,如果长期大于服务器 cpu 的个数,则说明 cpu 不够用了;
b:表示等待资源的进程数,比如等待 I /O, 内存等,这列的值如果长时间大于 1,则需要关注一下了;
swpd:表示切换到交换分区中的内存数量;
free:当前空闲的内存数量;
buff:缓冲大小,(即将写入磁盘的);
cache:缓存大小,(从磁盘中读取的);
si:由交换区写入到内存的数据量;
so:由内存写入到交换区的数据量;
bi:从块设备读取数据的量(读磁盘);
bo:从块设备写入数据的量(写磁盘);
bi bo 上 5 千 就应该注意了
in:表示在某一时间间隔中观测到的每秒设备中断数;
cs:表示每秒产生的上下文切换次数;
us:显示了用户下所花费 cpu 时间的百分比;
sy:显示系统花费 cpu 时间百分比;
id:表示 cpu 处于空闲状态的时间百分比;
wa:表示 I / O 等待所占用 cpu 时间百分比;
st:表示被偷走的 cpu 所占百分比(一般都为 0,不用关注);
以上所介绍的各个参数中,常常会关注 r 列,b 列,和 wa 列,三列代表的含义在上边说得已经很清楚。IO 部分的 bi 以及 bo 也是要经常参考的对象。如果磁盘 io 压力很大时,这两列的数值会比较高。另外当 si, so 两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
我们使用 vmstat 查看系统状态的时候,通常都是使用这样的形式来看的:
[root@localhost ~]# vmstat 1 5
or
[root@localhost ~]# vmstat 1
前面表示,每隔一秒钟打印一次状态,共打印 5 次,而后面的表示每隔 1 秒打印一次状态,一直打印,除非我们按 Ctrl + c 结束
这个命令用于动态监控进程所占系统资源,每隔 3 秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘 IO 等)最高的进程放到最前面。top 命令打印出了很多信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu 使用情况、内存使用情况以及交换分区使用情况。其实上面这些内容可以通过其他命令来查看,所以用 top 重点查看的还是下面的进程使用系统资源详细状况。这部分东西反映的东西还是比较多的,不过需要关注的也就是几项:%CPU, %MEM, COMMAND,RES 这一项为进程所占内存大小,而 %MEM 为使用内存百分比。在 top 状态下,按“shift + m”, 可以按照内存使用大小排序。按数字‘1’可以列出各颗 cpu 的使用状态。
另外,经常用的一个命令 top -bn1 它表示非动态打印系统资源使用情况,可以用在 shell 脚本中:
和 top 命令唯一的区别就是,它一次性全部把所有信息输出出来而非动态显示。
sar 命令很强大,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果系统没有安装这个命令,请使用 yum install -y sysstat 命令安装。初次使用 sar 命令会报错,那是因为 sar 工具还没有生成相应的数据库文件(时时监控就不会了,因为不用去查询那个库文件)。它的数据库文件在“/var/log/sa/”目录下,默认保存一个月。
IFACE 这列表示设备名称,rxpck/s 表示每秒进入收取的包的数量,txpck/s 表示每秒发送出去的包的数量,rxbyt/s 表示每秒收取的数据量(单位 Byte),txbyt/ s 表示每秒发送的数据量。后面几列不需要关注。如果有一天所管理的服务器丢包非常严重,那么就应该看一看这个网卡流量是否异常了,如果 rxpck/s 那一列的数值大于 4000,或者 rxbyt/ s 那列大于 5,000,000 则很有可能是被攻击了,正常的服务器网卡流量不会高于这么多,除非是自己在拷贝数据。
另外也可以查看某一天的网卡流量历史,使用 - f 选项,后面跟文件名,如果系统格式 Redhat 或者 CentOS 那么 sar 的库文件一定是在 /var/log/sa/ 目录下的。
sar -n DEV -f /var/log/sa/sa24
sar -q
这个命令有助于我们查看服务器在过去的某个时间的负载状况。
sar 虽然可以查看网卡流量,但不够直视,还有一个更好用的工具就是 nload,系统没有默认安装,安装方法:yum install -y epel-release;yum install -y nload
nload