在平时开发中,时常需要查看服务器的一些负载情况、网络状况等,下面对这些命令做一下简单的整理。

查看系统载荷

1)uptime(w类似)

jon@jon  ~/kola  uptime
17:52:04 up  9:13,  1 user,  load average: 4.13, 3.61, 2.97

关键是”load average”,它的意思是”系统的平均负荷”,里面有三个数字,我们可以从中判断系统负荷是大还是小。分别是1分钟、5分钟、15分钟内系统的平均负荷。
举个例子,如果CPU每分钟最多处理100个进程,那么系统负荷0.2,意味着CPU在这1分钟里只处理20个进程;系统负荷1.0,意味着CPU在这1分钟里正好处理100个进程;系统负荷1.7,意味着除了CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理。

系统载荷经验法则是这样的:
– 当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
– 当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
– 当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。

最后一个问题,”load average”一共返回三个平均值—-1分钟系统负荷、5分钟系统负荷,15分钟系统负荷,—-应该参考哪个值?
如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。
如果15分钟内,平均系统负荷大于1.0(调整CPU核心数之后),表明问题持续存在,不是暂时现象。所以,你应该主要观察”15分钟系统负荷”,将它作为电脑正常运行的指标。

2)top

top - 18:05:29 up  9:26,  1 user,  load average: 2.83, 3.62, 3.31
Tasks: 285 total,   2 running, 282 sleeping,   0 stopped,   1 zombie
%Cpu0  :  8.3 us, 11.5 sy,  0.0 ni, 74.5 id,  0.0 wa,  0.0 hi,  5.7 si,  0.0 st
%Cpu1  :  5.1 us, 12.3 sy,  0.0 ni, 81.9 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu2  :  5.5 us, 12.3 sy,  0.0 ni, 76.7 id,  4.1 wa,  0.0 hi,  1.4 si,  0.0 st
%Cpu3  :  6.1 us, 23.7 sy,  0.0 ni, 70.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  11740.3 total,    195.3 free,   9174.8 used,   2370.2 buff/cache
MiB Swap:    903.0 total,    843.0 free,     60.0 used.   1537.6 avail Mem 
  scroll coordinates: y = 1/285 (tasks), x = 1/12 (fields)
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                        
 6885 jon       20   0 7101732   1.5g   1.4g S  77.7  13.4 500:36.75 VirtualBoxVM                   
24992 jon       20   0  759748 194336  90284 S   9.6   1.6   9:59.23 chrome      

Cpu(s)行展示了当前CPU的状态,us表示用户进程占用CPU比例,sy表示内核进程占用CPU比例,id表示空闲CPU百分比,wa表示IO等待所占用的CPU时间的百分比。wa占用超过30%则表示IO压力很大。
Mem行展示了当前内存的状态,total是总的内存大小,userd是已使用的,free是剩余的,buffers是目录缓存。
Swap行同Mem行,cached表示缓存,用户已打开的文件。如果Swap的used很高,则表示系统内存不足。

使用top命令查看负载,在top下按“1”查看CPU核心数量,shift+”c”按cpu使用率大小排序,shif+”p”按内存使用率高低排序;

3) vmstat

jon@jon  ~/kola  vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0 106752 421268 317188 1815336    0    1    45    52  259  140 11 21 66  2  0
 0  0 106752 421196 317272 1815172    0    0     5   198 3491 11945  6 24 68  2  0

后面跟的参数5,表示每5秒输出一次统计信息。

4)iostat
除了查看CPU和内存负载之外,也需要查看io的负载情况,使用如下命令:

jon@jon  ~/kola  iostat -x 1 10              
Linux 4.18.0-15-generic (jon)   2019年07月29日     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12.01    0.03   20.74    1.90    0.00   65.32

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00   23.56    0.00   0.00     2.36     0.00  23.93   0.00
loop1            0.01    0.00      0.02      0.00     0.00     0.00   0.00   0.00    3.11    0.00   0.00     1.60     0.00   2.93   0.00
loop2            0.00    0.00      0.01      0.00     0.00     0.00   0.00   0.00   25.80    0.00 

命令详解,-x表示显示所有参数信息,1表示每隔1秒监控一次,10表示共监控10次。
其中rsec/s表示读入,wsec/s表示每秒写入,这两个参数某一个特别高的时候就表示磁盘IO有很大压力,util表示IO使用率,如果接近100%,说明IO满负荷运转。

查看网络负载

1)netstat
netstat命令用来打印Linux中网络系统的状态信息。

netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口  
netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口

查看tcp各种状态:

jon@jon  ~/kola  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
CLOSE_WAIT 1
ESTABLISHED 6
TIME_WAIT 1
SYN_SENT 5

参考

1、《理解Linux系统负荷》

发表评论

电子邮件地址不会被公开。 必填项已用*标注