第十章:监控CentOS的系统状态

如何查看系统变量

  • 执行env可以查看系统的环境变量,如主机的名称、当前用户的SHELL类型、当前用户的家目录、当前系统所使用的语言等。
  • 执行set可以看到系统当前所有的变量,其中包括了:
    • 系统的所有预设变量,这其中既包括了env所显示的环境变量,也包含了其它许多预设变量。
    • 用户自定义的变量。

监控系统的状态

使用w命令查看当前系统整体上的负载

使用w命令可以查看当前系统整体上的负载:

# w
 20:33:11 up 309 days, 10:03,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    113.102.224.86   20:33    3.00s  0.00s  0.00s w

需要关注的是第一行的最后一个部分——load average,这里的3个数字分别表示了系统在1分钟/5分钟/15分钟内的平均负载值,值越大说明服务器压力就越大。

那么,如何看负载是不是太满了呢?其实这个值是与服务器的物理CPU做对比的,那么只要负载值不超过物理CPU数量即可;如当前服务器有两个CPU,那么就尽量不要让负载值超过2。

用vmstat命令查看系统具体负载

vmstat命令打印的结果共分为6部分:procs、memory、swap、io、system和cpu,其中又有许多的细分字段,这里我们重点关注r、b、si、so、bi、bo、wa字段。

# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 707116  15392 177284    0    0    81     5  110  267  0  0 99  1  0
 0  0      0 707100  15392 177284    0    0     0     0  121  274  1  0 99  0  0
 0  0      0 706712  15392 177284    0    0     0     0  107  254  0  1 99  0  0
 0  0      0 706696  15392 177284    0    0     0    40   94  235  0  0 100  0  0
 0  0      0 706712  15392 177284    0    0     0     0   93  231  0  0 100  0  0
  • r(run):表示正在运行或等待CPU时间片的进程数,该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了
  • b(block):表示等待资源(I/O、内存等)的进程数。举个例子,当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,因此这个任务只能慢慢等待磁盘了。该数值如果长时间大于1,则需要查一下具体是缺的哪项资源
  • si和so:分别表示由交换区写入内存的数据量以及由内存写入交换区的数据量;一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要借用磁盘上的交换区,由于这往往对系统性能影响极大,因此需要考虑是否增加系统内存。
  • bi和bo:分别表示从块设备读取数据的量和往块设备写入数据的量;如果这两个值很高,那么表示磁盘I/O压力很大
  • wa:表示I/O等待所占用CPU的时间百分比。wa值越高,说明I/O等待越严重。如果wa值超过20%,说明I/O等待严重。

另外,vmstat命令后可带两个数字,第一个数字表示每多少秒打印一次结果,第二个数字表示总共打印多少次结果;如果只有第一个数字,则会不停地打印结果,直到你终止该命令。

用top命令显示进程所占的系统资源

top命令的结果有很多信息,但我们主要用它来监控进程所占的系统资源。top命令的结果每隔3秒变1次,它的特点是把占用系统资源(CPU、内存、磁盘I/O等)最高的进程放到最前面。

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0   41060   3576   2396 S  0.0  0.4   0:00.89 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.00 ksoftirqd/0

这里面我们主要关注RES(所占内存大小)、%CPU、%MEM(占用内存的百分比)、COMMAND这4个字段。

另外,如果需要一次性打印系统资源的使用情况,可以使用top - bn1

监控网卡流量

使用sar命令查看网卡流量历史记录

使用sar命令前可能需要先进行安装:yum install -y sysstat

使用方法是:sar -n DEV,第一次使用时会报错,因为还没有生成相应的数据记录。打印出来的结果里有很多字段,我们关注rxpck/srxkB/s

  • rxpck/s表示网卡每秒收取的包的数量,如果数值大于4000则考虑是被攻击了。
  • rxkB/s表示网卡每秒收取的数据量(单位为KB)。

使用nload命令监控网卡实时流量

使用nload前需进行安装:yum install -y epel-release;yum install -y nload

使用起来也很简单,直接使用nload命令则可动态显示当前的网卡流入/流出的流量。

使用free命令查看内存使用状况

为了检查内存是否够用,除了vmstat外,我们还可以使用更直接有效的free命令:free -h

# free -h
              total        used        free      shared  buff/cache   available
Mem:           992M        141M        462M        516K        388M        714M
Swap:          1.0G          0B        1.0G
  • total:内存总量,相当于used+free+buff/cache=used+available。
  • used:已真正使用的内存量。
  • free:剩余(未被分配)的内存量。
  • shared:不关注。
  • buff/cache:缓解CPU和I/O速度差距所用的内存缓存区,由系统预留出来备用,但如果剩余内存都不够用了,那么这部分也是可以挪用出来供服务来使用的。
  • available:可用内存,相当于free+buff/cache。

使用ps命令查看系统进程

top命令类似,ps命令也是用来查看系统具体进程占用资源的情况;由于top命令本身是动态的,而ps命令是非动态的(相当于执行命令时的一个快照),因此ps命令的功能实际上更接近于top -bn1

使用netstat命令查看网络情况

netstat的功能非常强大,这里举两个实际使用场景:netstat -lnp(打印当前系统启动哪些端口)和netstat -an(打印网络连接状况)。

# netstat -an
Proto Recv-Q Send-Q Local Address           Foreign Address         State  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 172.18.63.215:36492     140.205.140.205:80      ESTABLISHED
netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1604/mysqld         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1636/httpd          
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      1639/vsftpd         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      674/sshd            
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1636/httpd

results matching ""

    No results matching ""