第13章 linux系统管理技巧(日常运维管理技巧)

这一章的内容是核心,以后会用的几率也是很大的,只要掌握必备的基础知识,做初级系统管理员是不成问题的。

13.1监控系统的状态

第13章 linux系统管理技巧(日常运维管理技巧)_linux

作为一个运维工程师、系统管理员,如果对自己的系统不了解的话,那怎么排查问题呢?如果出现问题的话,肯定要查一下是什么问题,哪里的问题,系统的资源的耗费情况如何查看。

13.1.1使用w命令查看当前系统的负载

第13章 linux系统管理技巧(日常运维管理技巧)_linux_02

第一部分是系统时间,使用date命令也可以查看当前时间。

第二部分是系统运行时间

第三部分是登陆了几个用户,从下面可以看到,也可以看到登录了哪个终端。如果是网络登录的话,终端是ps/0,ps/1这些;如果是系统登录,会出现tty1,tty1- tty6是6个终端。from是可以看出从哪里来的。

load average是关键的一段,这是它的系统负载,平时用的最多的就是这一部分了。它后面跟三个数字,分别是1分钟、5分钟、15分钟内系统的平均负载值。第一个数字是单位时间内使用CPU的活动的进程有多少个,值越大说明服务器压力越大。这个数字可以是零点几,也可以是一百多,当前值是0,说明系统没有负载,就没有活动的进程,这说明服务器处于空闲的状态。这对于Linux操作系统来讲就比较浪费,它在空耗。那什么值是理想状态呢?看你有几颗CPU,这个指的是逻辑CPU,而不是物理CPU。CPU有很多类型,Intel的,AMD的,都会有几颗CPU,每颗上又会有很多逻辑CPU。查看CPU的命令如下:

cat /proc/cpuinfo,需要查看的数字是processor。如果是0,就代表有1颗;是1代表是2颗;如果有39,就代表有40颗。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_03

第13章 linux系统管理技巧(日常运维管理技巧)_linux_04

这里说的是逻辑CPU,而不是物理CPU。系统上的数字是0,代表有一个CPU,用w命令查到的第一个数字是1是最好的,不闲也没什么压力。processor的最大数字是7,代表最多有8颗CPU,只要w命令查到的数字不大于8,就是可以的。LOGIN@是登陆的时间,IDLE是空闲了多长时间,PCPU是使用CPU的时间,WHAT是适用的命令,后面的可以不用管它。

还有一个命令是:uptime,它和w命令的结果一样。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_05

注:/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。

13.1.2用vmstat命令查看监控系统的状态

我们用w命令学会了查看负载情况,如果出现了负载值偏高的情况,如查询的数字大于CPU核数了,说明CPU不够用了。此时就需要思考CPU不够用的原因,进程在干什么,都有哪些任务在使用CPU,你可能想去查看系统的瓶颈在哪里。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_06

可以查到CPU核数,内存,虚拟内存交换分区,io就是磁盘,系统的进程等等相关的东西。经常使用vmstat 1命令,每隔一秒输出一次状态,感觉差不多可以Ctrl C结束。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_07

当然也可以vmstat 1 5,每隔一秒输出一次状态,输出5次结束。

我们只需要关心如下几列:

proc显示进程的相关信息:

r,是run的简写,表示系统中有多少进程是属于run的状态。如果只有一个CPU,那某一个时间点只可能有一个进程在使用CPU,其他进程都在排队。但它们那是循环的,每个进程都有机会使用CPU,都可以使用一会儿。不管是在使用还是在排队,都是处于r的状态。如果该数值长期大于服务器CPU的个数,则说明CPU资源不够用了。

b,是block的缩写,表示等待资源的进程数。b就是说进程被CPU以外的资源(硬盘或者网络)给阻断了,处于一个等待状态,卡死了,b被堵死了。比如说网速慢,进程想要给你发一个数据包,假如网速很快,只需要1秒就发完了。但是现在速度慢,可能就花了10秒钟,就是因为网速太慢,这个时候只能等网速了,这就是有多少进程在等待了。

memory显示内存的相关信息

swpd,表示切换到交换分区中的内存数量,单位为KB。以前讲分区时,有个swap交换分区,当内存不够时,系统可以把内存中的一部分数据临时放到swap空间里面去。如果这个数字不变,那还好;如果这个数字在持续不断的变化,那说明内存和交换分区在持续不断的交换数据,这就说明内存不够了。

free,buff,cache我们讲内存时,再讲这几个单词的含义。

swap显示内存的交换情况

si、so和swapd相关,如果swapd频繁变化,那他们也会相应发生变化。

si:表示有多少数据(块)是由swap交换区进入内存中的,单位为KB。i表示in,进入内存的。o表示out,so表示有多少是从内存中出来的。

io显示磁盘的情况

bi,bo是和磁盘有关系的。bi表示从块设备读取数据的量(读磁盘),单位为KB。bo表示从块设备写入数据的量(写磁盘),单位为KB。这个数据量很大,说明磁盘在频繁的读写。io相比较磁盘来说,是很慢的。如果有那么多的数据读写,肯定会造成并列增加,因为有很多进程在等待磁盘,这个是必然的。

CPU:显示CPU的使用状态

us:表示用户级别的,比如说一个操作系统,肯定不可能只运行一个系统,还有跑一些服务。比如跑了一个网站,跑了一个MySQL,网站也好,MySQL也好,肯定会占一些资源,它就会体现us这一方面了,user占用的情况。us的数字是不会超过100的,因为一共就100%。us数字表示用户下的资源占用CPU的百分比,us长期大于50就说明系统资源不够了。

sy:显示系统本身花费CPU的时间百分比。

id:表示空闲的百分比us+sy+id=100

wa:wait等待,表示I/O等待所占用CPU的时间百分比,这一列很大,说明CPU不够用了。

通过vmstat命令可以判定出系统的瓶颈,如CPU不够,内存不够,还是磁盘io太大。

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

可以用top查看具体的进程。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_08

第一行和w命令查到的是一样的,总共有多少任务,有多少运行的任务,有多少正在sleeping的任务。僵尸进程,主进程被意外终止,子进程就没人管了,就比较尴尬,没人管,只能自生自灭。

风扇转的欢,CPU很烫,说明CPU使用率很高。us长期在60%以上是对CPU没有好处的。

下面是真正需要关心的东西,默认情况下,它会按CPU百分比从高到低排序,%MEM是内存,RES是物理内存大小,单位是KB千字节。

按大小字母M,会出现按内存使用大小排序,可以看到进程使用内存的具体大小。按大小字母P,换回CPU使用大小排序。按1的话,下面会列出

第13章 linux系统管理技巧(日常运维管理技巧)_linux_09

所有的CPU使用情况。按字母q会推出top命令。

使用top -c命令可以查看具体的进程命令,全局的路径。

使用top -bn1命令,可以静态的一次性的把所有的信息全部显示出来。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_10

第13章 linux系统管理技巧(日常运维管理技巧)_linux_11

第13章 linux系统管理技巧(日常运维管理技巧)_linux_12

这种用法适合在写脚本的时候用。

可以关注一下PID,比如说要杀死一个命令,可以使用PID去杀。kill PID命令就可以杀死一个进程。

USER是哪个用户运行的,PR、NI是关于优先级的,不需要过多关注。

注:使用top命令重点查看的还是下面的进程使用系统资源的详细状况。

13.1.4用sar命令监控系统状态

第13章 linux系统管理技巧(日常运维管理技巧)_linux_13

sar是一个非常全面的分析系统状态的命令,主要用来查看网卡的流量。它同样可以查看你的CPU、内存、磁盘的状态,它被称为linux系统中的瑞士×××,也就是它的命令非常复杂和丰富。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。

如果没有这个命令,可以通过

yum install -y sysstat来安装。

安装完这个命令,首次使用这个命令会出现如下错误,那是因为sar工具还没有生成相应的数据库文件(无需时时监控,因为不用去查询那个库文件)。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_14

如果sar不加参数的话,它会调用系统里面保留的历史文件,

第13章 linux系统管理技巧(日常运维管理技巧)_linux_15

这个目录就是它生成的历史文件所在的目录,什么叫历史文件呢?因为sar有一个特性,每10分钟会把系统的状态过滤一遍,抓一边保存在文件里,这个文件就存在上面的目录里。

这个命令要想用,需要加上合适的选项和参数,如果要查看网卡的流量,需要使用如下命令:

第13章 linux系统管理技巧(日常运维管理技巧)_linux_16

这个用法和vmstat的用法类似,就是每隔1秒钟显示1次,总共显示10次结束。

IFACE表示网卡的名字。

rxpck/s和txpck/s表示每秒钟的包的数量,单位是个。rx是receive的简写,代表收取的,tx代表发送的。

rxkB/s这一列表示每秒收取的数据量(单位是KB)

txkB/s这一列表示每秒发送的数据量(后面几列不需要关注,阿铭老师工作这么多年,后面几列都是不超过0的,也就是都是0)

一个网站如果遭到攻击,它会发送很多的数据包给你的网站,意味着你要接受很多的数据包。量很大的话,意味着你的网卡承担不了,最终导致网络堵塞,你的网站不能打开。

那多少包合适呢?

有时候也要关注网卡是否跑满,比如你的公司买了一个机柜,分配了一些带宽(比如说100M),100M不大,如果换算成常规理解的就是12.5M/s,也不是很大。如果有几个人同时下载的话,很快就占满了。如果rxpck/s的数据包有几千是正常的,如果有几万的话,就不正常了。有几万,几十万的话,就是被攻击了。如果被攻击了,可以看rxpck/s的数据包有多少,这个不太确定,需要用抓包工具。

使用如下命令可以查看某一天的网卡流量:

sar -n DEV -f /var/log/sa/sarn,n代表具体的日期

第13章 linux系统管理技巧(日常运维管理技巧)_linux_17

数据在这个目录下最多保留一个月

sar -q是查看服务器在过去的某个时间的负载情况

第13章 linux系统管理技巧(日常运维管理技巧)_linux_18

sar -b是查看磁盘的

第13章 linux系统管理技巧(日常运维管理技巧)_linux_19

下面的命令是看它的读和写

第13章 linux系统管理技巧(日常运维管理技巧)_linux_20

13.1.5用nload命令查看网卡流量

sar命令可以查看网卡流量,但是不够直观,使用nload命令更好。nload命令默认没有安装,需要使用如下命令安装:

yum install -y epel-release;yum install -y nload

安装完运行,就会出现动态的显示网卡:

第13章 linux系统管理技巧(日常运维管理技巧)_linux_21

最上面一行是网卡名字以及IP地址,按向右箭头可以查看其他网卡的网络流量。输出结果分为两部分,Incoming为进入网卡的流量,Outgoing为网卡出去的流量,我们关注的当然是Curr那行的数据,其单位也可以动态自动调整,非常人性化。按q退出该界面。买的带宽是出去的带宽,如果有攻击,进来的数字就会很大。

sar的补充内容:

第13章 linux系统管理技巧(日常运维管理技巧)_linux_22

这个目录等到明天才会生成,sar28是可以通过cat来查看的,而sa28不能。

13.1.6监控io性能(这个是关于磁盘的,磁盘的状态的两个命令)

第13章 linux系统管理技巧(日常运维管理技巧)_linux_23

在日常运维过程中,除了CPU、内存外,磁盘的io也是非常重要的指标。有时候CPU、内存明明有剩余,但系统就是负载很高,我们用vmstat命令查看会发现b列或wa列比较大,那就说明系统磁盘有瓶颈。

我们在安装sysstat包时,就会安装iostat命令,它和sar属于同一个包。

iostat的用法:

第13章 linux系统管理技巧(日常运维管理技巧)_linux_24

也可以

第13章 linux系统管理技巧(日常运维管理技巧)_linux_25

要讲的是iostat -x命令,这里有一个非常重要的指标。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_26

%util首先是一个百分比,这一列表示io等待,总之就是磁盘使用有多少时间是占用你CPU的。CPU有一部分时间是给进程处理、计算的,也有一部分是等待io的,等待磁盘读写的。如果这个数字是50%以上,就说明磁盘太差了,它非常忙碌。如果硬盘有问题,即使CPU再快,再厉害,还是存在很大的瓶颈。如果磁盘严重不行,只能更换磁盘。

如果发现磁盘io很忙,很频繁,如果想知道是哪一个进程在频繁的读写,就可以使用Iotop命令。但发现没有安装,使用yum install -y iotop安装。

它和top很像,是动态的,按排行来排。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_27

我们看的是IO百分比

13.1.7用free命令查看内存使用情况

第13章 linux系统管理技巧(日常运维管理技巧)_linux_28

第13章 linux系统管理技巧(日常运维管理技巧)_linux_29

free命令可以查看当前系统的总内存大小以及使用内存的情况。CentOS 7系统的free命令显示结果比CentOS 6更简洁一些,但大体一致。

总共有三行,第一行是说明,第二行是内存的使用情况,第三行是交换分区的情况。

total:内存总大小

used:真正使用的实际内存大小

free:剩余物理内存大小(没有被分配,纯剩余)

shared:共享内存大小,这个不用关注

buff/cache:分配格buff/cache的内存总共有多大。

简单区分一下buff(缓冲)和cache(缓存),数据的流向不一样,所叫的名字也不一样。buff/cache都是一部分内存,内存的作用就是缓解CPU和IO(如,磁盘)的的速度差距的。可以这样理解:数据经过CPU计算,即将要写入磁盘,这是用的内存为fuff;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache。

avaliable:系统可使用内存有多大,它包含了free。linux系统为了让应用跑得更快,系统会预先预留出一部分(buff/cache)给某些应用使用,虽然这部分内存并没有真正使用,但也已经分配出去了。然而,当另外一个服务要使用更多内存时,是可以把这一部分预先分配的内存拿来用的。所以,

available=free+buff/cache

total=used+free+buff/cache

第13章 linux系统管理技巧(日常运维管理技巧)_linux_30

buffer和cache如此重要,系统会预先预留出一部分给buffer和cache。

使用free命令需要关注的是available这一项。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_31

13.1.8使用ps查看系统进程

第13章 linux系统管理技巧(日常运维管理技巧)_linux_32

第13章 linux系统管理技巧(日常运维管理技巧)_linux_33

第13章 linux系统管理技巧(日常运维管理技巧)_linux_34

ps -elf和ps aux结果差不多

第13章 linux系统管理技巧(日常运维管理技巧)_linux_35

第13章 linux系统管理技巧(日常运维管理技巧)_linux_36

第13章 linux系统管理技巧(日常运维管理技巧)_linux_37

vmstat根本占用不了CPU多少时间,运行一下就sleep了。+说的是前台进程,说的是终端上的进程。

Z表示僵尸进程,这种进程不多,也会有。如果多的话,就想办法把它杀死。

<表示高优先级进程,优先级比较高,CPU先紧着给它用。

N表示低优先级进程,有Z相对,意味着它 不着急,晚一点用也没关系。

|多线程进程,线程和进程是有区别的,线程有一个大的进程组成的,一个进程里面有多个线程。概念回去查一查,进程和进程之间内存相互之间是不共享的,但线程之间使用了同一个进程的内存的区域。比如给进程分配了一个进程块,这个进程本来对这个内存是有使用权限的,但它下面的线程不管有多少,它们共享这一块内存,这就是线程的特点。多线程进程是说,进程有多个线程。

13.1.9用netstat命令查看网络状态

第13章 linux系统管理技巧(日常运维管理技巧)_linux_38

linux作为服务器的操作系统,服务器上会有很多服务,服务往往是和客户端相互通信的,这就意味着它要有监听端口,要有对外的通信端口。这个命令查看的就是TCP/IP通信的状态。安装一个MySQL,提供一个数据库服务,就要有一个监听端口,那么何为监听端口?正常情况下一台机器是没有任何的端口监听的,这就意味着它没有办法和其他的机器通信。你要想让其他人访问你的网站,它就需要监听一个端口,它把这个端口放开,打开一个孔。就像网卡上搞了一个小孔出来,然后远程的设备想办法和这个设备相连,数据就可以通过这个孔进入到网卡里,进入到服务器里,相互的进行通信。

端口查看命令:

第13章 linux系统管理技巧(日常运维管理技巧)_linux_39

第13章 linux系统管理技巧(日常运维管理技巧)_linux_40

l代表的是listen

sshd有两个,一个是tcp,一个是tcp6,tcp6就是Ipv6(tcp和udp的资料自行查阅,这个不作为重点)

master 25端口,发邮件的端口

第二个命令:

第13章 linux系统管理技巧(日常运维管理技巧)_linux_41

这个命令会查看tcp/ip状态

第13章 linux系统管理技巧(日常运维管理技巧)_linux_42

第13章 linux系统管理技巧(日常运维管理技巧)_linux_43

扩展知识:tcp/ip的三次握手,四次挥手,这个往往在面试的时候被问到

第13章 linux系统管理技巧(日常运维管理技巧)_linux_44

查看tcp/ip,需要关注一个值就是ESTABLISHED,如果这个值很大,说明你的系统很忙。并发连接数,就是同一时间有多少客户端在连接你,我们可以那这个数字来说明并发连接数有多少。上面说明有45个客户端和服务端进行通信,正在连接。这个是真正的通信,1000以内服务器都是能接受的。

第13章 linux系统管理技巧(日常运维管理技巧)_linux_45

ss -an 命令也能显示tcp/ip的状态

第13章 linux系统管理技巧(日常运维管理技巧)_linux_46

第13章 linux系统管理技巧(日常运维管理技巧)_linux_47

它有一个缺点,它不会显示进程的名字,vmstst -lntp命令可以

第13章 linux系统管理技巧(日常运维管理技巧)_linux_48

13.1.10linux下的抓包工具

第13章 linux系统管理技巧(日常运维管理技巧)_linux_49

第13章 linux系统管理技巧(日常运维管理技巧)_linux_50