10.1 使用w查看系统负载
具体用法如下:
[root@bogon ~]# w 09:11:25 up 17 min, 1 user, load average: 0.00, 0.04, 0.10 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.193.1 08:56 5.00s 0.04s 0.00s w
第1行从左至右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载。从第2行开始的所有行则是告诉我们:当前登录的用户名极其登录地址等。最因该关注第1行中的load average:后面的3个数值。
第一个数值表示1分钟内系统的平均负载值,第2个数值表示5分钟内系统的平均负载值,第3个数值表示15分钟内系统的平均负载值。着重看第1个值,它表示单位时间段内使用CPU的活动进程数(在这里其实就是1分钟内),值越大就说明服务器压力越大。一般情况下,这个值只要不超过服务器的CPU数量就没有关系。如果服务器CPU数量为8,那么值小于8就说明当前服务器没有压力;否则就要关注一下了。查看服务器有几个CPU的方法如下所示:
[root@bogon ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 78 model name : Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz stepping : 3 microcode : 0x9e cpu MHz : 2400.149 cache size : 3072 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 22 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 syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu 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 3dnowprefetch epb fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp bogomips : 4800.29 clflush size : 64 cache_alignment : 64 address sizes : 42 bits physical, 48 bits virtual power management:
上例中,/proc/cpuinfo这个文件记录了CPU的详细信息。目前市面上的服务器有很多是2颗多核CPU,在Linux看来,它就是2*n个CPU(这里的n为单颗物理CPU上有几核)。例如n是4,则查看这个文件时会显示8段类似的信息,而最后一段信息的processor:后面会显示7。所以查看当前系统有几个CPU,我们可以使用命令grep -c 'processor' /proc/cpuinfo。然而查看有几颗物理CPU时,则需要查看关键字physical id。
vmstat命令
具体用法如下:
[root@bogon ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 585312 2084 210944 0 0 31 3 61 82 0 0 99 1 0
命令w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。但无法判断具体是哪里(CPU,内存,磁盘等)有压力,所以这就用到了vmstat。vmstat命令打印的结果共分为6部分:procs,memory,swap,io,system和cpu。重点关注一下r,b,si,so,bi,bo这几列信息。
procs显示进程的相关信息。
r(run):表示运行或等待CPU时间片的进程数。大家不要误认为等待CPU时间片意味着这个进程没有运行,实际上某一时刻1个CPU只能有一个进程占用,其它进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态。该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了。
b(block):表示等待资源的进程数,这个资源指的是I/O,内存等。举个例子,当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个b状态。该数值如果长时间大于1,则需要关注一下了。
memory显示内存的相关信息。
swpd:表示切换到交换分区中的内存数量,单位为KB。
free:表示当前空闲的内存数量,单位为KB。
cache:表示(从磁盘中读取的)缓存大小,单位为KB。
buff:表示(即将写入磁盘的)缓冲大小,单位为KB。
swap显示内存的交换情况
si:表示由交换区写入内存的数据量,单位为KB。
so:表示由内存写入交换区的数据量,单位为KB。
io显示磁盘的使用情况。
bi:表示从块设备读取数据的量(读磁盘),单位为KB。
bo:表示从块设备写入数据的量(读磁盘),单位为KB。
system显示采集间隔内发生的中断次数。
in:表示在某一时间间隔内观测到的每秒设备的中断次数。
cs:表示每秒产生的上下文切换次数。
cpu显示CPU的使用状态
us:显示用户下所花费CPU的时间百分比。
sy:显示系统花费CPU的时间百分比。
id:表示CPU处于空闲状态的时间百分比。
wa:表示I/O等待所占用CPU的时间百分比。
st:表示被偷走的CPU所占百分比(一般都为0,不用关注)。
以上介绍的各个参数中,经常会关注r,b和wa这3列。io压力很大,这两列的数值会比较高。当这两列的数值的比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这对系统性能影响极大。
- 10.3 top命令 :动态查看系统进程的使用资源情况,每隔3秒更新一次
top -c :显示详细的进程信息
top -bn1:静态显示所有进程
q退出,数字1显示所有核cpu,大写字母M按内存使用顺序排序, - 大写字母P按cpu使用情况排序
[root@bogon ~]# top -bn1 |head top - 15:10:48 up 6:16, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 117 total, 1 running, 116 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.2 us, 0.0 sy, 0.0 ni, 81.2 id, 12.5 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 997956 total, 583800 free, 200372 used, 213784 buff/cache KiB Swap: 4194300 total, 4194300 free, 0 used. 604600 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 125496 4036 2592 S 0.0 0.4 0:01.61 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.26 ksoftirqd/0