0413 第十三次课:日常运维-系统监控

久未见 提交于 2019-12-06 06:11:13

日常运维(上)

系统监控

一、w、vmstat、top、sar命令

  1. w命令查看系统负载
  • w命令可以查看系统的运行情况

    详细解释:

    信息 说明
    21:51:33 表示当前时间
    up 209 days 表示系统运行时间为209天
    1 users 表示当前登录用户个数,可以通过下面 USER行 查看当前的用户
    TTY 登录的方式 pts/0 表示网络登录 如果为tty1-6 则是终端登录
    LOGIN@ 表示用户登录时间
    IDLE 表示用户空闲时间
    FROM 用户登录的ip
    JCPU 该终端相关进程任务所耗费的时间
    PCPU 表示WHAT或任务执行后耗费的CPU时间
    WHAT 表示当前执行的任务
  • 最常用的信息

    load average:后面3个数字分别代表过去1,5,10分钟内CPU的负载情况。这个数值表示cpu的使用情况,一般来说只要不超过cpu的核数就是正常的

  • 查看cpu的核数

    cat /proc/cpuinfo 其中processor表示cpu的核数。从0开始计算,0就是表示核数为1。

    或者使用lscpu命令查看


  1. vmstat命令

    vmstat命令可以查看进程、内存、I/O等系统整体运行情况

  • 用法:

    vmstat 1 5(1表示间隔时间为1秒,5表示运行次数)


详细说明

  • procs(进程):

    r:运行队列中的进程数量

    b:堵塞的进程,网络、硬盘等原因导致的

  • memory(内存)

    • swpd:使用虚拟内存大小,如果数字大于0说明内存不够

    • free:空闲物理内存大小

    • buff:作用缓存大小

    • cache:缓存大小

    • SWAP(交换区)

    • si:每秒从交换区写到内存的大小

    • so:每秒写入交换区的内存大小

  • IO(磁盘)

    • bi:每秒读取的大小

    • bo:每秒写入的大小

  • CPU

    • us:用户占用的cpu的百分比,如果长时间占用超过50%说明cpu不够了

    • sy:系统本身占用的cpu百分比

    • id:空闲的cpu百分比

    • us+sy+id=100%

    • wa:等待cpu的百分比


  1. top命令

    top命令可以动态的查看系统资源使用情况类似于windows下的任务管理器,默认是三秒刷新一次。

  • 用法

    top -c:显示进程的详细信息

    top -bn1:静态显示

  • 常用操作

    按q:退出显示

    按数字1:切换显示cpu,如下:后面一张图是按下1后显示的第一块CPU的使用信息。

    按M:按内存使用情况排序

    按P:按cpu使用情况排序。默认是安装cpu使用大小排序的

  • 统计信息区

    第一行:

    和w命令显示的第一行信息一样

    第二行:

    total :进程总数

    running:正在运行的进程数

    sleeping :睡眠的进程数

    stopped :停止的进程数

    zombie :僵尸进程数

    第三行:

    主要参数

    us 用户空间占用CPU百分比

    sy 内核空间占用CPU百分比

    id 空闲CPU百分比

    第四行:

    total:内存总量

    free:剩余的内存

    used:使用的内存

    buff/cache: 缓存

    第五行:

    total: 交换空间总量

    free: 剩余的交换空间

    used: 使用的交换空间量

  • 进程信息区:

    PID:进行id

    USER:进程所对应的用户

    PR:优先级

    RES:进程使用的、未被换出的物理内存大小,单位kb。

    %CPU :进程所使用cpu占比

    %MEM :进程使用内存占比

    TIME+: 进程使用的CPU时间总计,单位秒

    COMMAND:命令行


  1. sar命令

    sar是一个很全面的监控命令,可以监控cpu、磁盘i/o、网卡流量等。主要用来查看网卡流量和历史的负载信息。

    如果没有sar命令,可以进行安装:

    yum install -y sysstat

    安装sar命令后,sar会每隔十分钟在/var/log/sa目录下生成系统的日志文件。

    日志文件类型分为sa和sar开头两种,其中sa*是二进制文件,需要使用sar -f查看,sar*是文本文件直接查看即可。


  • sar命令查看网卡流量:

    sar -n DEV 1 10

    IFACE: 网卡名

    rxpck:接收到的数据包,单位秒

    txpck: 发出的数据包,单位秒

    rxKB: 接受的数据量,单位秒

    txKB:发出的数据量,单位秒

    需要注意的是如果接收的数据包和数据量超过10000,说明有被攻击的可能。

  • 查看历史网卡流量

    如果要查看28号的信息:

    sar -n DEV -f /var/log/sa/sa28

    sa28表示28号这一天的信息,查看20号就sa20即可。最多保留一个月,就是最多可以查一个月前的信息。

  • 查看系统负载

    sar -q

  • 查看历史负载:

    如查看10号的

    sar -q -f /var/log/sa10

二、nload、监控io、free、ps

  1. nload命令

    nload命令用来监控网络流量,默认是没有安装的需要安装使用。

    安装:

    yum install epel-release

    yum install nload

    用法:

    nload

    第一行显示网卡名、ip、当前网卡(可以按左右键切换网卡)。按q退出

    nload 默认分为上下两块:

    Incoming: 接收网卡的流量

    Outgoing:出去的流量

    Curr: 当前流量

    Avg: 平均流量

    Min: 最小流量

    Max: 最大流量

    Ttl: 总流量


  2. 监控io

    磁盘io监控有两个命令:iostat -x iotop

  • iostat -x 查看磁盘io负载

    iostat和sar属于同一个包,安装了sar就可以使用iostat

    主要关注 %util,这个值越高说明磁盘I/O负载越高。一般大于70%说明I/O的压力就很大了,需要进行排查是磁盘的问题还是服务的问题。

  • iotop

    iotop监控磁盘I/O使用情况,类似于top,可以监测到那一个程序在占用I/O

    安装:

    yum -y install iotop

  1. free命令

    free命令是用来查看内存和swap的使用情况,默认的单位是kb

    可以使用-m或-g来指定单位,也可以使用-h来查看

  • 详解:

    Mem:物理内存信息

    toptal:物理内存总和

    used:已使用的内存大小

    free: 空闲内存大小

    shared: 共享内存

    buff/cache: 缓存大小。

  • buffer与cacher 的区别

    cacher:

    (数据)磁盘——>内存(cache)——>cpu

    CPU要计算时,需要把数据从磁盘中读出来,临时放到内存中,这部分内存就是cache。

    buffer

    (数据)cpu——>内存( buffer)——>磁盘

    数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer。

    可用内存

    available(可用内存): buff/cache+free的总和,也就是可用内存。如果想看可用内存,关注这个即可。

    计算公式

    total=used + free + buff/cache

  1. ps命令

    ps命令是用来查看系统进程

  • ps使用两种方式

    ps -aux 、ps -elf

    ps aux 会把系统中所有的进程给列出来,静态的显示出来

    ps -elf 显示出的效果和ps aux基本类似,只不过输出格式不同

  • 显示说明,以ps -aux为例

    显示信息 说明
    USER 进程运行的用
    PID 进程pid。1、杀进程:kill pid。2、查看进程启动目录:ls -l /proc/PID
    %CPU 进程所使用cpu占比
    %MEM 进程所使用内存占比
    VSZ 虚拟内存
    RSS 物理内存
    TTY 运行在哪个终端
    STAT 进程状态
    TIME 进程运行时间
    START 进程启动时间
    COMMAND 命令行
  • STAT进程运行状态:

    D : 不能中断的进程 (会影响CPU资源)

    R :run状态的进程(正在运行的进程)

    S :sleep状态的进程

    T :暂停的进程

    Z :僵尸进程

    字符< : 高优先级进程

    N :低优先级进程

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

    s :主进程

    l :多线程进程

    字符+ :前台进程

三、监控网络状态、抓包

  1. 查看网络状态使用netstat命令
  • 查看监听端口

    netstat -lnp

  • 查看所有的连接状态

    netstat -an

  • 只查看tcp连接

    netstat -ltunp

  • 查看网络状态小技巧

    查看所有的状态的数字

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

    主要关注ESTABLISHED这个值,它是网站的并发连接数,就是同一时间有多少个客户端在连接你。如果这个值很大说明系统很繁忙,通常这个值在一千以内都是可以接受的。

  • netstat类似的命令

    ss -an

    这命令和netstat显示的差不多,但是它不显示进程的名字

  1. linux下抓包

    抓包工具:tcpdump

    这个命令如果不能使用则需要安装:yum install -y tcpdump

  • tcpdump常用用法:

    tcpdump -nn -i eth0

    第一个n表示显示ip,如果不加则显示主机名。

    第二个n表示显示端口,不加则显示端口服务名。

    -i表示指定网卡

    第一段:时间

    第二段:IP 源ip+端口 > 目标ip+端口

    第三段:数据包信息

  • DDos攻击

    udp flood 利用大量UDP小包攻击服务器,遇到这种情况只能接入防攻击设备。

  • 指定端口

    tcpdump -nn -i eth0 port 22

  • 排除端口

tcpdump -nn -i eth0 not port 22

  • 排除端口并指定ip

tcpdump -nn -i eth0 not port 22 and host ip地址

  • 指定数据包,并存到文件中

    tcpdump -nn -i eth0 port 22 -c 10 -w 2.cap

    -c:指定统计多少流量包

    -w:指定生成到2.cap文件中

    • .cap不能直接查看,可以使用file命令查看文件信息:

    • 查看

      tcpdump -r 2.cap

      -r :表示读取

  • tshark命令

    tshark是一个类似于tcpdump的抓包工具,它有一个实用的功能:查看指定网卡的80端口的web访问情况。它可以查看外部访问的一个信息。

    使用需要安装:yum install -y wireshark

四、网络相关

  1. 查看网卡ip命令:ifconfig

    ifconfig命令在centos6中是默认安装的,centos7需要进行安装:

    yum install -y net-tools

    如果网卡是down掉的,默认是不显示的,如果要查看可以加上-a

  • 关闭/启动网卡

    有的时候修改了网卡参数需要关闭重启

    ifdown 网卡名 :关闭网卡

    ifup 网卡名: 启动网卡

    如果是远程操作,网卡关闭就无法连接操作了。这种情况可以使用以下方法:

    `ifdown 网卡名 && ifup 网卡名`
    
  • 设置虚拟网卡

    cp /etc/sysconfig/network-scripts/原网卡 虚拟网卡

    把现有的网卡复制一份,重新命名,并修改name, device, ip这三个参数。

    ifdown 网卡名 && ifup 网卡名 使用这种方法重启即可。

  • 查看网卡连接状态

    mii-tool 网卡名

  • 修改hostname

    hostnamectl set-hostname 新主机名

    需要退出登录下生效。

  • 查看hostname

    hostname

  • DNS配置文件

    /etc/resolv.conf 如果临时修改DNS可以修改这个文件,但是重启后会被网卡配置文件的内容所覆盖。

  • hosts文件

    hosts文件windows和linux都有,用来指定域名解析ip。只能做本机使用

五、直播课

  1. tcp三次握手和四次挥手
  • 三次握手

三次握手是为了确认客户端跟服务器都能接受到对方的信息。

第一次握手,客户端给服务器发包。此时服务器确认自己可以接收客户端的包,客户端不确认服务器是否接收到了自己发的包。

第二次握手,服务器端回复客户端。 此时客户端确认自己发的包被服务器收到,也确认自己可以正常接收服务器包,客户端对此次通信没有疑问了。服务器可以确认自己能接收到客户端的包,但不能确认客户端能否接收自己发的包。

第三次握手,客户端回复服务器。 客户端已经没有疑问了,服务器也确认刚刚客户端收到了自己的包。两边都没有问题,开始通信。

举个例子:

比如在红军时代,A连和B连分在左右翼,约定在几时几分一同发起打击。

这个几时几分的信息就需要人工通过通讯员来走路传递。所以A连指挥官派出通讯员。这是第一次。

假设通讯员到达了B连,并且告知了B连指挥官几时几分,B连指挥官一定会让通讯员再回去通知A连指挥官,可怜的通讯员只能冒着危险返回A连,因为A连指挥官看不到通讯员返回的话,不知道几时几分这个信息到底传达到了B连没有。这是第二次。

现在B连指挥官开始担心通讯员是否回到了A连,如果没回到,B连指挥官会设身处地的想一想A连指挥官见不到返回的通讯员,肯定是不敢打的,所以B连指挥官最盼望的是再次看到通讯员出现在B连,所以A连指挥官会让通讯员再回B连一次。这是第三次。

  • 四次挥手

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,假设客户端主动关闭,服务器被动关闭。

第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,也就是客户端告诉服务器:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,客户端依然会重发这些数据),但是,此时客户端还可 以接受数据。 FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

第二次挥手:服务器收到FIN包后,发送一个ACK给对方并且带上自己的序列号seq,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。 此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传送,也就是告诉客户端,我的数据也发送完了,不会再给你发数据了。由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

  • 状态说明

    CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。

    LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

    SYN_RCVD :表示接收到了SYN报文。在正常情况下,这个状态是服务器端 的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。

    SYN_SENT :这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。

    ESTABLISHED :表示TCP连接已经成功建立。

    FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到。

    FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。

    TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

    CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。

    CLOSE_WAIT :表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。

    LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。


  1. ip命令使用

    ip addr add 192.168.10.10/24 dev eth0

    ip addr add 192.168.10.10/24 dev eth0

    ip addr show eth0

    ip addr del 192.168.10.10/24 dev eth0

  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

  • 显示网络统计数据

    ip -s link

    ip -s -s link ls eth0

  • 停止开启网卡

    ip link set eth0 down

    ip linke set eth0 up

    更改网卡名字

    ip link set ens37 name eth1

    永久保存:https://blog.csdn.net/jyusun/article/details/71513086

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!