第十章 日常运维-系统管理

一、 使用w查看系统负载
二、 vmstat命令
三、 top命令
四、 sar命令
五、 nload命令
六、 监控io性能
七、 free命令
八、 ps命令
九、 netstat查看网络状态
十、 linux下抓包
十一、Linux网络相关
十二、扩展
tcp三次握手四次挥手(重点) http://www.doc88.com/p-9913773324388.html 
tshark几个用法:http://www.aminglinux.com/bbs/thread99511.html

一、 使用w查看系统负载

1.1 w查看当前系统的负载

该命令显示的信息第一行从左面开始显示的信息依次为:时间,系统运行时间(即登录时间),登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。最应该关注的应该是第一行中的 ‘load average:’ 后面的三个数值。

load average代表:
1,5,15分钟内系统的负载值是多少(和cpu有关)。

第一个数值表示1分钟内系统的平均负载值(1分钟内最能体现系统的负载情况);第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。这个负载值的意义是,单位时间内使用cpu的活动进程有多少个(平均值,可以是小数)。当然这个值越大就说明你的服务器压力越大。一般情况下这个值只要不超过服务器的cpu数量(逻辑核数)就没有关系,如果服务器cpu数量为8,那么这个值若小于8,就说明当前服务器没有压力(最优负载值),否则就要关注一下了。

1.2 w/uptime 查看系统负载

uptime查看到内容与w的第一段内容相同

1.3 cat /proc/cpuinfo 查看cpu核数(逻辑cpu

‘/proc/cpuinfo’ 这个文件记录了cpu的详细信息。目前市面上的服务器通常都是2颗4核cpu,在linux看来,它就是8个cpu。(processor值为0代表一颗cpu。),所以查看当前系统有几个cpu,我们可以使用这个命令: cat /proc/cpuinfo|grep 'processor'。而如何看几颗物理cpu呢,需要查看关键字 “physical id”, 由于虚拟机只有一个cpu所以并未显示关于 “physical id” 的信息。

二、 vmstat命令

2.1 当系统负载偏高时,使用vmstat命令查看

 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力。vmstat命令打印的结果共分为6部分:procs, memory, swap, io, system, cpu. 请重点关注一下r b wa si so bi bo us几列。

1)procs 显示进程相关信息

  • r :run,表示有多少进程处于run状态,等待的也是run。如果长期大于服务器cpu的个数,则说明cpu不够用了;
  • b :block,表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;

2)memory 内存相关信息

  • swpd :表示切换到交换分区中的内存数量 ;(当该数据不断变化时说明内存不足,内存不足时,会把部分硬盘空间拿出来做内存使用)
  • free :当前空闲的内存数量;
  • buff :缓冲大小,(即将写入磁盘的);
  • cache :缓存大小,(从磁盘中读取的);

3)swap 内存交换情况

  • si :=storage in,由交换区写入到内存的数据量;
  • so :=storage out,由内存写入到交换区的数据量;

4)io 磁盘使用情况

  • bi:=block in,表示从块设备读取数据写入内存的数据量(即:读磁盘),单位为KB;
  • bo:=block out,表示从内存读取写入到块设备的数据量(即:写磁盘),单位为KB;

5)system 显示采集间隔内发生的中断次数

  • in :表示在某一时间间隔中观测到的每秒设备中断数;
  • cs :表示每秒产生的上下文切换次数;

6)CPU 显示cpu的使用状态(us+sy+id=100%,约等于,近似值)

  • us :user,显示了用户下所花费 cpu 时间的百分比;(当该值长时间>50时说明CPU数量不足)
  • sy :system,显示系统花费cpu时间百分比;
  • id :idle,表示cpu处于空闲状态的时间百分比;
  • wa :wait,表示I/O等待所占用cpu时间百分比;(该数值大说明CPU不足)
  • st :表示被偷走的cpu所占百分比(被偷走:做了虚拟化,子机可能会偷走部分cpu。一般都为0,不用关注);

注:经常会关注r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。

2.2用法

[root@localhost ~]# vmstat 1 5

或者:

[root@localhost ~]# vmstat 1

前面表示,每隔一秒钟打印一次状态,共打印5次,而后面的表示每隔1秒打印一次状态,一直打印,除非我们按 Ctrl + c 结束。

三、 top命令

3.1 top命令:显示进程所占系统资源(查看具体哪个进程导致系统问题)

这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。用top重点查看的还是下面的进程使用系统资源详细状况。这部分东西反映的东西还是比较多的,不过需要关注的也就是几项:%CPU, %MEM, COMMAND us的值(代表用户cpu使用率)。这些项目所代表的意义,RES 这一项为进程所占内存大小,单位是k字节;而 %MEM 为使用内存百分比。在 top 状态下,按 M, 可以按照内存使用大小排序;按P,以使用cpu情况排序;按数字 ‘1’ 可以列出各颗cpu的使用状态。

第二行最后一个进程状态zombie:僵尸进程,表示主进程被关闭或意外终止,子进程只好自生自灭,即没有主进程的子进程。

3.2 top -c 可以查看具体进程路径

3.3 命令 top -bn1 它表示非动态打印系统资源使用情况,可以用在shell脚本中(和 top 命令唯一的区别就是,它一次性全部把所有信息输出出来而非动态显示。)

3.4 扩展

3.4.1 ps aux 查看进程

看 stat那列,是Z的就是僵尸进程;

3.4.2 kill  pid 杀死进程

kill -9  pid 强制杀死进程,一定可以杀死。 误杀了 就恢复不了了。

四、 sar命令

sar 命令很强大,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。

4.1 安装 yum install -y sysstat

初次使用sar命令会报错(不加选项的情况下),那是因为sar工具还没有生成相应的数据库文件(时时监控就不会了,因为不用去查询那个库文件)现在sar升级后安装会直接生成两个文件,例sa22、sar22。它的数据库文件在 “/var/log/sa/” (特性:sar每10分钟会把系统的状态过滤一遍,保存在这个目录下文件中)目录下,默认保存一个月。

sa22和sar22的区别:sa22内容是抓取的系统状态,是一个二进制文件,不能直接cat,需要sar -f filename。

1)查看网卡流量 sar -n DEV

rxpck数值几千的值大概是正常的,上万的话可能被攻击了

2)查看历史负载 sar -q

3)查看磁盘负载 sar -b

4)另外也可以查看某一天的网卡流量历史(磁盘负载历史),使用-f选项,后面跟文件名

五、 nload命令

5.1 nload 可以动态显示网卡平均速度
安装noload前要安装epel-release

5.2 用法 

#nload

有多个网卡时,按方向键可以查看其它网卡的网速,q退出

六、 监控io性能

6.1 io命令也是在sysstat包里

6.2 iostat/iostat 1;iostat一次性显示磁盘读写速度;iostat 1动态显示

6.2 iostat -x查看磁盘使用

重要指标%util,代表一秒内IO操作所占的比例,如果读写bu数值不大,但是%util大的话说明硬盘可能有故障。

6.3 iotop命令查看是哪个进程产生io,导致磁盘忙

安装命令:yum install -t iotop

iotop动态实时显示io百分比,百分比大的在上面

七、 free命令

7.1 查看内存使用状况

7.2 total=used+free+cache/buff

真正剩余物理内存:avaiable=free+cache/buff

7.3 free默认单位是kb,可以加-m 或者-g选项分别以M或G为单位打印内存使用状况

八、 ps命令

8.1 ps命令用来查看系统进程,ps -aux 和ps -elf用法类似,查看所有运行的进程(静态列出当前进程状态)

8.2 可以# ps -elf|grep ‘进程名’  →过滤某个指定的进程,并显示状态

8.3 -C选项,查看指定的进程是否存在

8.4 参数意义

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill’进程的pid 有时并不能杀掉,则需要加一个-9选项了, #kill -9 进程pid

STAT :表示进程的状态,进程状态分为以下几种

D 不能中断的进程(通常为IO)

R 正在运行中的进程

S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态(sleep状态的进程)

T 已经停止或者暂停的进程,如果我们正在运行一个命令,按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

X 已经死掉的进程(这个好像从来不会出现)

Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

< 高优先级进程

N 低优先级进程

L 在内存中被锁了内存分页

s 主进程

l 多线程进程

+ 代表在前台运行的进程

注:主进程和线性进程的区别:

①主进程包含了线性进程,线性进程是主进程的子进程;

②同一个主进程下的线性进程共享相同的内存块,而进程间内存块相互隔离

九、查看网络状态

9.1 netstat命令查看网络状态

9.2 netstat -lnp 查看监听端口(没监听端口,就不能与外部通信)

9.3 netstat -an查系统的网络连接状态

9.4 netstat -lntp 只查看tcp的状态,不包含socket文件。socket文件:用于同一台服务器上两个进程间通信(lnup查看tcp和udp)

9.5 ss -an和 netstat -an用法相似但是比netstat更快(ss -an不显示进程名)

9.6 小技巧:查看所有状态的个数

# netstat -an|awk '/^tcp/{++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'

十、 linux下抓包

10.1 tcpdump抓包工具

安装:yum install -y tcpdump
10.2 tcpdump -nn 命令:第一个n表示用数字显示ip地址(不加会显示主机名);用来看数据的流向

10.2.1 tcpdump -nn -i ens33(网卡名)  指定网卡

10.2.2 tcpdump -nn port * 指定端口

tcpdump -nn notport 22 and host 192.168.0.100:表示不抓取端口22的包,并只要host为192.168.0.100的

10.2.3 抓取指定数量的数据包并且存到指定文件目录下;不能直接去解析。。

tcpdump -nn -i -ens33 -c 10 -w dong.cap

这个文件不能直接cat,用tcpdump -r来读取抓来的包:tcpdump -r dong.cap

10.3 扩展

yum install -y wireshark

tshark命令可查看指定网卡80端口web的访问情况;类似于web的访问日志

十一、Linux网络相关

11.1 ifconfig 查看网卡IP

安装:yum install -y net-tools

ifconfig -a 可以看到网卡down或者没ip时的信息

11.2 ifup可以启动网卡,ifdown可以关闭网卡远程操作不可恢复。

可以使用#ifdown ens33&&ifup ens33关闭后重启

11.3 设定虚拟网卡(给一个网卡设定多个IP

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-ens33   ifcfg-ens33\:1
# vi !$
修改NAME/DEVICE/IPADDR三项,保存。重启网卡就会发现多了一个虚拟网卡

11.4 查看网卡是否连接mii-tool命令;无法使用的话就用ethtool命令

使用ethool时看最后一行

11.5 修改主机名hostnamectl set-hostname ***

hostname查看主机名,改完以后当前终端主机名不会立刻变成修改后的主机名,需要重启或者进入子shell里(输入bash)

11.6 DNS配置文件/etc/resolv.conf

修改DNS信息:①在网卡配置信息里修改,/etc/sysconfig/network-scripts/ifcfg-ens33

②vim /etc/resolv.conf

11.7 /etc/hosts文件

修改host可以让同样的网站访问不同地址,只在本机生效

注:/etc/hosts 的格式很简单,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要注意:

1)一个IP后面可以跟多个域名,可以是几十个甚至上百个;

2)每行只能有一个IP,也就是说一个域名不能对应多个IP;

3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。

一个IP可以对应多个域名;一个域名也可以对应多个IP;但是,hosts文件中,ping域名时,哪条记录在前面哪条生效(从上到下执行,一旦匹配到一个域名或IP时,后面的就不生效了)

十二、扩展
12.1 tcp三次握手四次挥手(重点) http://www.doc88.com/p-9913773324388.html
12.2 三次握手 和四次挥手 参考文档:Python/socket编程/2.TCP-IP各层详解
12.3 tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html
12.4 ip命令使用

12.4.1. 设置和删除IP

ip addr add 192.168.10.10/24 dev eth0

ip addr show eth0

ip addr del 192.168.10.10/24 dev eth0

12.4.2. 路由相关设置

ip route show

ip route add default via 192.168.10.1

ip route add 192.168.5.0/24 dev eth0

ip route del 192.168.10.1

另外用route命令来管理路由:

(a)、网络路由

# route add -net 192.168.1.0/24 gw 172.16.1.106

(b)、主机路由

# route add -host 192.168.1.110 gw 172.16.1.106

(c)、默认路由

# route add default gw 172.16.1.106

# route add -net 0.0.0.0 gw 172.16.1.106

(d)、删除路由

# route del -host 192.168.1.110

# route del -net 192.168.1.0/24
12.4.3. 显示网络统计数据
ip -s link
ip -s -s link ls eth0
12.4.5 停止开启网卡
ip link set eth0 down
ip linke set eth0 up
12.4.6更改网卡名字
ip link set ens37 name eth1

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/82026814
今日推荐