1. 使用w查看系统负载
用法如下:
# w
18:20:14 up 2 days, 7:57, 1 user, load average: 0.01, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.4.84 10:14 6.00s 0.11s 0.03s w
解释:linux管理员最常用的命令就是这个w了,该命令显示的信息很丰富。第一行从左至右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载。
第二行开始的所有行则是告诉我们:当前登录的用户名及其登录地址等。
注意:在这里面最应该关注的应该是第一行中的load average:后面三个数值。
第一个数值表示一分钟内系统的平均负载值。
第二个数值表示五分钟内系统的平均负载值。
第三个数值表示十五分钟内系统的平均负载值。
备注:我们着重看第一个值,它表示单位时间段内使用cpu的活动进程数(在这里其实就是一分钟内)值越大就说明服务器压力越大。一般情况下,这个值只要不超过服务器的cpu数量就没有关系,如果服务器的cpu数量为8,那么值小于就说明当前服务器没有压力,否则就要关注下。
查看服务器有几个CPU(逻辑CPU)
这里的processor计数从0开始,也就是说第一个显示为0,第二个显示为1。
# cat /proc/cpuinfo
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i3-3240 CPU @ 3.40GHz
stepping : 9
microcode : 0x17
cpu MHz : 3392.132
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 : 13
wp : yes
查看当前系统有几个cpu
# grep -c 'processor' /proc/cpuinfo
1
2. vmstat命令
vmstat命令的含义为显示虚拟内存状态(“Viryual Memor Statics”),它可以报告关于进程、内存、I/O等系统整体运行状态。让我们知道系统的使用瓶颈在哪里。
具体用法如下:
# 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 697556 876 175492 0 0 1 0 53 69 0 0 100 0 0
# vmstat 1 表示每隔一秒输出一次状态且一直输出,按Ctrl+c结束
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 697664 876 175524 0 0 1 0 53 69 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 107 120 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 79 89 0 1 99 0 0
0 0 0 697648 876 175524 0 0 0 0 76 97 0 1 99 0 0
0 0 0 697648 876 175524 0 0 0 0 67 78 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 72 86 0 0 100 0 0
^C
# 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
2 0 0 697664 876 175524 0 0 1 0 53 69 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 80 92 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 88 106 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 86 95 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 70 82 0 0 100 0 0
解释相关进程的作用,重点关注r、b、si、so、bi、bo这几列信息:
procs显示进程的相关信息
r (run):表示运行或等待CPU时间片的进程数。说明:不要误以为等待CPU时间片意味着这个进程没有进行,实际上某一时刻一个CPU只能有一个进程,其他进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态。该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了。
b (block):表示等待资源的进程数,这个资源指的是I/O、内存等。举个例子:当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待,这样这个进程就是这个b状态。该数值如果长时间大于1,则需要关注一下。
memory显示内存的相关信息
swpd:表示切换到交换分区中的内存数量,单位为KB。
free:表示当前空闲的内存数量,单位为KB。
buff:表示(即将写入磁盘的)缓冲大小,单位为KB。
cache:表示(从磁盘中读取的)缓存大小,单位为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,不用关注)
3. top命令
top命令用于动态监控进程所占的系统资源,每隔3秒变一次。它的特点是把占用系统资源(cpu、内存、硬盘I/O等)最高的进程放到最前面。
用法如下:
# top
top - 19:37:58 up 2 days, 9:14, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999940 total, 696980 free, 126268 used, 176692 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 692664 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21 root 20 0 0 0 0 S 0.7 0.0 3:13.30 kworker/0:1
3833 root 20 0 157588 2120 1512 R 0.7 0.2 0:00.77 top
496 root 20 0 303272 6760 4780 S 0.3 0.7 5:36.48 vmtoolsd
1 root 20 0 128104 6700 3948 S 0.0 0.7 0:02.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.27 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:53.45 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:02.18 watchdog/0
12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:00.07 khungtaskd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
26 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
备注:需要关注的值有load average,tasks,%CPU,%MEM。
RES表示进程占用的内存数量。
shift+m表示按内存使用量排序。
shift+p表示按cpu使用量排序。
按数字1可以列出每个cpu的占用量。
top -c显示详细的进程信息。
top -bn1静态显示所有进程。
q退出。
q+PID杀死程。
4. sar命令
sar命令很强大,被戏称为瑞士×××。它可以监控系统几乎所有资源的状态,比如平均负载、网上流量、磁盘状态,内存使用等。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。
#yum install -y sysstat sar命令安装
查看网卡流量历史 sar -n DEV
# sar -n DEV
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20时00分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时10分01秒 ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
解释:
IFACE这一列表示设备名称.
rxpck/s这一列表示每秒进入收取的包的数量有多少。
txpck/s这一列表示每秒发送出云的包的数量有多少。
rxkB/s这一列表示每秒收取的数据量(单位为KB)。
txkB/S这一列表示每秒发送的数据量。
注意:
如果有一天服务器丢包非常严重,那么你就该应该查一下网卡流量是否异常了,如果rxpck/s那一列的数值大于4000,或者rxkB/s那一列的数值大于50000000,很有可能是被攻击了,正常的服务器网卡流量不会这么高,除非是你自己在复制数据。
实时查看网卡流量
# sar -n DEV 1 5
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20时12分50秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时12分51秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时12分51秒 ens33 11.22 0.00 0.82 0.00 0.00 0.00 0.00
20时12分51秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时12分52秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时12分52秒 ens33 12.37 1.03 0.82 0.41 0.00 0.00 0.00
20时12分52秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时12分53秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时12分53秒 ens33 12.24 1.02 0.91 0.41 0.00 0.00 0.00
20时12分53秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时12分54秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时12分54秒 ens33 8.08 1.01 0.56 0.40 0.00 0.00 0.00
20时12分54秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时12分55秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时12分55秒 ens33 7.14 1.02 0.45 0.41 0.00 0.00 0.00
平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: ens33 10.20 0.82 0.71 0.33 0.00 0.00 0.00
使用-f选项查看某一天的网卡流量历史,后面跟文件名。(在Red Hat或者CentOS发行版中,sar的库文件一定在/var/log/sa/目录下
示例如下:
# sar -n DEV -f /var/log/sa/sa20
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20时00分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20时10分01秒 ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
查看历史负载 sar -q
示例如下:
# sar -q
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20时00分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
20时10分01秒 1 105 0.00 0.01 0.05 0
平均时间: 1 105 0.00 0.01 0.05 0
备注:这个命令有助于我们查看服务器在过去某个时间的负载状况。
5. nload命令
sar虽然可以查看网卡流量,但是不够直观,还有一个更好用的工具,那就是nload。
安装nload:
#yum install -y epel-release 先安装扩展源
#yum install -y nload 因为nload依赖于epel-release。
#nload 查看网卡流量:
Device ens33 [192.168.114.1] (1/2):
=========================================================================================================================
Incoming:
Curr: 10.76 kBit/s
Avg: 9.31 kBit/s
Min: 4.62 kBit/s
Max: 13.25 kBit/s
Ttl: 142.85 MByte
Outgoing:
Curr: 8.55 kBit/s
Avg: 8.42 kBit/s
Min: 3.90 kBit/s
Max: 9.18 kBit/s
Ttl: 1.69 MByte
说明:
Incoming为进入网卡的流量。
Outgoing为网卡出去的流量。
主要关注Curr那行的数据,其单位也可以动态自动调整。
按q退出该界面。