10.1-10.9 日常运维w,vmstat,top,sar,nload, io, free, ps, 网络状态
w
w命令用于查看当前系统负载。
主要检查的指标是load average,这里有三个数字,分别是1分钟,5分钟,和15分钟内的系统平均负载。一般着重看第一个数字,如果值不超过物理cpu的数量,那么就说明当前服务器没有压力。如果超过了cpu数量,那就说明需要注意一下服务器的负载。
[root@centos-01 ~]# w
10:39:36 up 18 min, 2 users, load average: 0.00, 0.03, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
lxd tty1 10:22 8:00 0.38s 0.49s login -- lxd
root pts/0 192.168.27.1 10:22 0.00s 0.22s 0.05s w
可以通过命令cat /etc/cpuinfo
查看系统的cpu数量。
下表显示,系统有一个物理cpu,但是共有4个核。
这里的processor计数从0开始,也就是说第一个显示为0,第二个显示为1。
[root@centos-01 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i7-3612QM CPU @ 2.10GHz
stepping : 8
microcode : 0x10
cpu MHz : 2095.250
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
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 ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dtherm fsgsbase smep xsaveopt
bogomips : 4190.50
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
vmstat
vmstat命令可以报告系统各个模块的负载情况,让我们知道系统的资源使用情况以及系统瓶颈在哪里。
vmstat指的是virtual memory statistic,虚拟内存统计。
[root@centos-01 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1961292 1056 250400 0 0 26 1 50 46 0 1 98 0 0
首先我们要解释物理cpu,逻辑cpu,线程的区别。
物理cpu指的是电脑上安装了几个cpu硬件,对于pc来说都只有一个物理cpu。
然而现在都是多核cpu,Linux系统理解的cpu数量实际是物理cpu数量*每颗cpu的核数*每个核的线程数。如果电脑安装了1个4核cpu,每个核都有2个线程,linux则认为系统共有8颗cpu。这8颗cpu也可以被称为逻辑cpu。
procs
- r 表示running,正在运行,或者正在等待cpu运行时的进程数。这两种进程都可以认为是他们正在运行中,而不是在等待。如果r大于cpu数量,则说明cpu出现瓶颈。
- b表示blocked queue,那些在虚拟内存中等待磁盘IO资源的进程数。这个值太高的话说明磁盘慢。一般来说,r应该大于b,否则说明cpu性能不够。
memory
- swpd表示swapped,切换到交换分区中的内存数量,即虚拟内存的使用量。
- free表示空闲内存
- buff表示buffer的用量,即即将写入磁盘的数量
- cache表示cache的用量,即即将从磁盘读取的数量
swap
- si,swapped in from swap space,从交换分区写入到内存的数量
- so,swapped out to swap space,从内存写入到交换分区的数量
IO
- bi,block input from block device,从块设备写入的数据量
- bo,block output to block device,写入到块设备的数据量
system
- in,interrupted per second,每秒设备被打断的次数
- cs,context switch,每秒钟上下文切换次数。cs太高说明内存不够用
cpu
- us用户占用的cpu百分比
- sy系统占用的cpu百分比
- id表示cpu空闲的百分比
- wa,waiting for IO,表示cpu等待IO所占用的时间百分比
- st表示被偷走的cpu百分比
需要关注的主要是r,b,wa。bi和bo如果较大,说明磁盘的IO压力大。si和so如果较大,说明内存不够用。
通常vmstat的使用方式如下:
vmstat 1 5 //表示每间隔1秒输出一次,共输出5次。
top
top可以对线程按占用的系统资源进行排序。同时也可以yum安装htop获得同样的工具,但是更直观。
Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.3 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 2834208 total, 1941292 free, 629028 used, 263888 buff/cache
KiB Swap: 4120568 total, 4120568 free, 0 used. 2010628 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1288 mysql 20 0 1302880 458308 5884 S 1.0 16.2 0:53.46 mysqld
315 root 20 0 0 0 0 S 0.7 0.0 0:03.34 xfsaild/sda3
550 root 20 0 303080 6284 4832 S 0.7 0.2 0:29.39 vmtoolsd
3713 root 20 0 122500 2164 1456 S 0.7 0.1 0:00.61 htop
9 root 20 0 0 0 0 S 0.3 0.0 0:06.03 rcu_sched
和vmstat一样,我们需要关注的值有load average,tasks,%CPU,%MEM。RES表示进程占用的内存数量,resident memory size。
shift+m表示按内存使用量排序,shift+p表示按cpu使用量排序。按数字1可以列出每个cpu的占用量,按q退出。
sar
sar命令很强大,几乎可以监控系统所有的资源。被戏称为瑞士军刀。
可以使用yum安装sysstat获得。
查看网卡流量
sar -n DEV
[root@centos-01 ~]# sar -n DEV
Linux 3.10.0-514.el7.x86_64 (centos-01) 2017年11月08日 _x86_64_ (4 CPU)
09时40分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
09时50分02秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09时50分02秒 ens33 838.09 103.63 1209.76 6.58 0.00 0.00 0.00
10时00分02秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10时00分02秒 ens33 0.32 0.05 0.02 0.00 0.00 0.00 0.00
10时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10时10分01秒 ens33 0.33 0.03 0.02 0.00 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: ens33 279.75 34.59 403.51 2.20 0.00 0.00 0.00
这个命令会打印当天的网卡信息,每隔十分钟统计一次。
我们需要关注的是rxpck/s和rxkB/s,rxpck/s如果是几千是正常的,但如果大于4000,说明服务器很可能被攻击了。如果rxkB/s大于5000000也同样说明可能被攻击了,正常的服务器网卡不会有这么高的数值。
sar -n DEV 1 5 这条命令可以实时的查看网卡流量,格式与vmstat类似。
sar -n DEV -f /var/log/sa/sa07
sar的log存在/var/log/sa/路径下,用这条命令可以查看过去某天的网卡流量信息。
sar -q 查看历史负载
nload
yum install -y epel-release //先安装扩展源
yum install -y nload //因为nload依赖于epel-release,所以要分别安装
安装好后,输入命令nload即可调用。
使用左右方向键可以切换不同网卡的信息。
同样,我们还可以安装iostat以及iotop查看系统资源信息。
free
free命令可以查看当前内存和虚拟内存的使用情况。
可选-h,-m,-g,表示数字的显示方式,自动或者按M和G。
total=used+free+buff/cache
available=free+buff/cache剩余部分
[root@centos-01 ~]# free -h
total used free shared buff/cache available
Mem: 2.7G 611M 1.9G 8.9M 260M 1.9G
Swap: 3.9G 0B 3.9G
ps
[root@centos-01 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.2 128160 6764 ? Ss 13:42 0:11 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 13:42 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 13:42 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 13:42 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 13:42 0:01 [migration/0]
root 8 0.0 0.0 0 0 ? S 13:42 0:00 [rcu_bh]
root 9 0.1 0.0 0 0 ? S 13:42 0:12 [rcu_sched]
root 10 0.0 0.0 0 0 ? S 13:42 0:00 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 13:42 0:00 [watchdog/1]
ps aux, a和x指的是显示所有进程,u表示显示user。
PID表示进程的ID,关进程时可以用kill PID,如果关不掉可以尝试kill -9 PID,这样有点暴力,可能会导致数据丢失,所以一般尽量不要用。
RSS和RES一样,RSS表示resident set size,是使用的非虚拟内存的物理内存的量。
STAT是进程的状态:
- D 不能中断的进程,通常为IO (正在等待IO资源的进程,类似于vmstat中的b)
- R 正在运行的进程
- S已经中断的进程,同样情况下系统的大部分进程都是这个状态
- T已经停止或者暂停的进程
- X已经死掉的进程
- Z僵尸进程
- <高优先级进程
- N低优先级进程
- s 多线程进程
- + 前台的进程,例如此时ps aux就是前台的进程
- l多线程进程
netstat
netstat -lnp //打印当前系统启动了哪些端口
l,listening中的端口
p,program
n,使用ip地址显示而不是主机名
netstat -an //打印网络连接状况
a,all
n,使用ip地址显示而不是主机名
[root@centos-01 ~]# 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:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1752/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 972/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 960/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1600/master
tcp6 0 0 :::3306 :::* LISTEN 1288/mysqld
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 972/sshd
tcp6 0 0 ::1:631 :::* LISTEN 960/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1600/master
udp 0 0 127.0.0.1:323 0.0.0.0:* 551/chronyd
udp 0 0 0.0.0.0:5353 0.0.0.0:* 595/avahi-daemon: r
udp 0 0 0.0.0.0:53137 0.0.0.0:* 595/avahi-daemon: r
udp 0 0 192.168.122.1:53 0.0.0.0:* 1752/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1752/dnsmasq
udp6 0 0 ::1:323 :::* 551/chronyd
raw6 0 0 :::58 :::* 7 636/NetworkManager
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 13319 1/systemd /run/lvm/lvmetad.socket
unix 2 [ ACC ] STREAM LISTENING 9494 1/systemd /run/systemd/journal/stdout
unix 2 [ ACC ] STREAM LISTENING 15658 565/gssproxy /run/gssproxy.sock
unix 2 [ ACC ] STREAM LISTENING 21720 1600/master private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 21723 1600/master private/rewrite
unix 2 [ ACC ] STREAM LISTENING 21726 1600/master private/bounce
unix 2 [ ACC ] STREAM LISTENING 21729 1600/master private/defer
unix 2 [ ACC ] STREAM LISTENING 21732 1600/master private/trace