第十章、日常运维(上)

10.1 使用w查看系统负载

10.2 vmstat命令

10.3 top命令

10.4 sar命令

10.5 nload命令

10.6 监控io性能

10.7 free命令

10.8 ps命令

10.9 查看网络状态

10.10 linux下抓包

10.11 Linux网络相关

          扩展:tcp三次握手四次挥手

10.1 使用w查看系统负载

监控系统状态

   #查看系统负载

第一行    当前系统时间    启动多长时间   登录几个用户    系统负载(一分钟系统负载数,五分钟系统负载数,十五分钟系统负载值)(负载正常值是8以内)    

##系统负载含义:单位时间段内使用cpu活动的进程有多少个(平均值)

第二行   用户   tty   从哪里来       登陆时间

cat  /proc/cpuinfo   查看cpu核数

#只看processor,如果是0,说明只有一颗逻辑cpu;如果是1,就有2颗逻辑cpu

uptime         #也能查看系统负载,不过只是w的第一行

[root@xinlinux-02 ~]# uptime

08:43:48 up 2 min,  2 users,  load average: 0.34, 0.40, 0.18

lscpu    #查看cpu具体信息

[root@xinlinux-02 ~]# lscpu

Architecture:          x86_64

CPU op-mode(s):        32-bit, 64-bit

Byte Order:            Little Endian

CPU(s):                1

On-line CPU(s) list:   0

Thread(s) per core:    1

Core(s) per socket:    1

座:                 1

NUMA 节点:         1

厂商 ID:           GenuineIntel

CPU 系列:          6

型号:              55

型号名称:        Intel(R) Celeron(R) CPU  N2940  @ 1.83GHz

cat   /etc/issue  #查看操作系统版本

[root@xinlinux-02 ~]# cat /etc/issue

\S

Kernel \r on an \m

uname -r      #查看内核信息

[root@xinlinux-02 ~]# uname -r

3.10.0-862.9.1.el7.x86_64

lspci -k      #显示驱动信息

cat /proc/meminfo    #查看内存信息

[root@xinlinux-02 ~]# cat /proc/meminfo

MemTotal:         997948 kB

MemFree:          743204 kB

MemAvailable:     729884 kB

Buffers:            2092 kB

Cached:           102964 kB

SwapCached:            0 kB

Active:            79444 kB

Inactive:          74292 kB

Active(anon):      49116 kB

Inactive(anon):     7380 kB

Active(file):      30328 kB

Inactive(file):    66912 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:       2097148 kB

SwapFree:        2097148 kB

10.2 vmstat命令(面试常考)

vmstat  1          #查看系统进程,一秒动态显示一次,按Ctrl+c结束

vmstat  1  5       #查看系统进程,一秒动态显示一次,显示5次自动结束

关键的几列:

r列表示有多少进程在run(运行)的状态;

b代表cpu以外的资源被其他进程占用;

swpd当内存不够时数值会发生变化;

si代表有多少kb的数据从swp进入到内存中;

bi代表从磁盘中出来到内存中去,

bo代表写入的数据量数值大小代表磁盘数据的 读写频率;

 us表示用户级别的一些资源占用的cpu百分比;

sy:系统本身进程服务占用资源百分比

id:cpu空闲资源百分比

 us +sy +id =100;

wa:类似b,表示进程等待cpu的百分比数,有多少进程在等待cpu,如果wa很大, 说明cpu不够用

buffer 与cache的区别常考

1、buffer是位于内存和硬盘之间,叫做缓冲;cache是位于CPU和主内存之间,叫做缓存

2、缓冲速率低于缓存

3、数据流向不同

磁盘(数据) --》 内存(起缓存作用cache) --》 cpu

cpu (数据) --》 内存(起缓冲作用buffer) --》 磁盘

10.3 top命令

top       #查看进程使用情况,动态的,三秒显示一次

主要看us(长期处于60%以上,对主机没好处)

第一行,(跟w命令查看的一样)当前系统时间    启动多长时间   登录几个用户    系统负载

第二行  进程总数状况    总数      r状态数     休眠状态数  停止状态数     僵尸进程数(主进程被意外终止了,只留下子进程在这里)

第三行   cpu百分比   st(表示被偷走的cpu百分比)

第四行  物理内存使用情况   总内存数   剩余内存数   使用内存数    buff/cache数

第五行   交换分区使用情况

id : idle ,表示cpu的空闲率,id越高,cpu非常空闲

wa:进程等待cpu的占用率

显示进程

默认情况下,按照cpu百分比排序(使用cpu多的排前面)

%CPU :使用cpu百分比

%MEM:使用内存百分比

RES:物理内存大小(单位为k字节)

COMMAND:进程所在的路径名

##按q退出,数字1显示所有核cpu使用情况(从第三行观看),大写字母M按内存使用排序(%MEM),大写字母P按cpu使用排序(%CPU)

top -c     #显示详细的进程信息,COMMAND:进程所在的绝对路径

top

top -bn1    # 静态显示所有进程  (适合在写脚本的时候用)

10.4 sar命令

##sar掌握网卡流量就行,其他的了解

主要用来查看网卡流量

yum   install -y  sysstat       #安装sar命令

sar每十分钟将系统状态抓一次,放入/var/log/sa/saxx 文件内 (xx表示抓取日期)

ps: /var/log/sa/ 目录内容最多保存一个月

sar -n DEV     #网卡流量

sar -n DEV  1  2     #每隔一秒显示一次,共显示2次

IFACE:网卡名称

rxpck/s:接收到的数据包(单位为个) (数据包几千个正常,数据包上万的话就不正常了)

txpck/s:发送的数据包(单位为个)

rxkB/s:接受的数据量(大小为kB)

txkB/s:发送的数据量(大小为kB)

sar  -q     #查看系统负载

sar  -b    #查看磁盘读写

sar -b 1  5

sar  -f   /var/log/sa/sa25     #查看历史sar文件 

[root@xinlinux-02 sa]# sar -f sa25

Linux 3.10.0-862.9.1.el7.x86_64 (xinlinux-02)     2018年08月25日     _x86_64_     (1 CPU)

21时35分52秒       LINUX RESTART

21时40分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle

21时50分01秒     all      3.16      0.00      2.21      0.52      0.00     94.11

22时00分01秒     all      0.09      0.00      0.21      0.00      0.00     99.70

22时10分01秒     all      0.09      0.00      0.19      0.07      0.00     99.65

22时20分01秒     all      0.06      0.00      0.14      0.00      0.00     99.79

22时30分01秒     all      0.07      0.00      0.14      0.01      0.00     99.79

22时40分01秒     all      0.07      0.00      0.16      0.00      0.00     99.77

平均时间:     all      0.59      0.00      0.51      0.10      0.00     98.81

#sa目录会生成两种文件saxx和sarxx,

saxx二进制的文件,不能cat,只能是用 sar -f  选项去加载查看

sarxx是可以直接cat(sarxx会在saxx文件产生后一天出现)

10.5 nload命令

监控网卡流量

yum  install -y  epel-release

yum  isntall  -y nload

nload    

#显示实时的动态的网卡流量

第一行   网卡名   IP地址    网卡数(按方向键可以切换其他网卡)

curr:当前值

avg:平均值

Min:最小值

Max:最大值

#一般情况买来的带宽的性能看的是出去的流量(Outgoing)

10.6 监控io性能

iostat命令也在sysstat包里面,与sar命令一样

iostat  -x   #磁盘使用情况,主要关注%util这一列

[root@xinlinux-02 sa]# iostat  -x

Linux 3.10.0-862.9.1.el7.x86_64 (xinlinux-02)     2018年08月27日     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.72    0.01    1.55    0.28    0.00   97.43

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

sda               0.00     0.06    1.76    0.66    58.84    27.91    71.71     0.02    7.83    9.24    4.07   4.55   1.10

sdb               0.00     0.00    0.08    0.00     2.13     0.00    55.72     0.00    4.66    4.66    0.00   2.79   0.02

scd0              0.00     0.00    0.01    0.00     0.34     0.00    90.26     0.00    3.70    3.70    0.00   3.17   0.00

%util:表示io,有多少时间占用cpu,等待io时间比

如果数值很大,说明io不好或是io很忙,读写数值也会很大;如果只是wkB /s大,说明硬盘可能存在着问题,有些故障

iostat -z  数字         #表示多久显示一次磁盘使用情况

yum install -y iotop

iotop      #查看磁盘io使用情况

10.7 free命令

free      #查看内存使用情况

[root@xinlinux-02 ~]# free

              total        used        free      shared  buff/cache   available

Mem:         997948      129016      579956        7784      288976      688736

Swap:       2097148           0     2097148

#第一行是说明   

第二行是内存使用情况  内存总大小(kB)   使用内存数   空闲内存数  

第三行是交换分区的使用情况

第一列是内存的总大小,单位是kb(可以使用free -h); 

第二列是使用了多少;

 第三列是剩余内存数量; buff/cache(缓冲和缓存)是预分配内存的量;

 avaliable是预分配和没有完的内存

total=used+free+buff/cache

avaliable包含free和buffer/cache剩余部分

free -m    #单位为M

[root@xinlinux-02 ~]# free -m

              total        used        free      shared  buff/cache   available

Mem:            974         125         566           7         282         673

Swap:          2047           0        2047

free  -h       #数值后面加上M

[root@xinlinux-02 ~]# free -h

              total        used        free      shared  buff/cache   available

Mem:           974M        125M        566M        7.6M        282M        673M

Swap:          2.0G          0B        2.0G

10.8 ps命令

ps       #查看系统进程静态

ps aux 和ps  -elf一样       #把系统所有进程全部列出来

kill  [pid]     #杀死进程

[root@xinlinux-02 ~]# sleep 1000 &

[1] 1243

[root@xinlinux-02 ~]# ps

   PID TTY          TIME CMD

  1184 pts/0    00:00:00 bash

  1243 pts/0    00:00:00 sleep

  1244 pts/0    00:00:00 ps

[root@xinlinux-02 ~]# kill -9 1243

[root@xinlinux-02 ~]# ps

   PID TTY          TIME CMD

  1184 pts/0    00:00:00 bash

  1245 pts/0    00:00:00 ps

[1]+  已杀死               sleep 1000

ls  -l   /proc/[pid]/          #查看进程的启动位置

[root@xinlinux-02 ~]# vim 4.txt &

[1] 1288

[root@xinlinux-02 ~]# ps -aux |grep "vim 4.txt"

root       1288  2.2  0.4 149172  4672 pts/0    T    15:00   0:00 vim 4.txt

root       1290  2.0  0.0 112720   988 pts/0    S+   15:00   0:00 grep --color=auto vim 4.txt

[1]+  已停止               vim 4.txt

[root@xinlinux-02 ~]# ls -l /proc/1288/

总用量 0

dr-xr-xr-x. 2 root root 0 8月  27 15:01 attr

-rw-r--r--. 1 root root 0 8月  27 15:01 autogroup

-r--------. 1 root root 0 8月  27 15:01 auxv

-r--r--r--. 1 root root 0 8月  27 15:01 cgroup

--w-------. 1 root root 0 8月  27 15:01 clear_refs

-r--r--r--. 1 root root 0 8月  27 15:00 cmdline

-rw-r--r--. 1 root root 0 8月  27 15:01 comm

-rw-r--r--. 1 root root 0 8月  27 15:01 coredump_filter

-r--r--r--. 1 root root 0 8月  27 15:01 cpuset

lrwxrwxrwx. 1 root root 0 8月  27 15:01 cwd -> /root

-r--------. 1 root root 0 8月  27 15:01 environ

lrwxrwxrwx. 1 root root 0 8月  27 15:01 exe -> /usr/bin/vim

stat部分说明

D:不能中断的进程

R:run状态的进程

S:sleep状态的进程

T:暂停的进程

Z:僵尸进程

<:高优先级进程

N:低优先级进程

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

s:主进程

l:多线程进程

+:前台进程

进程和线程区别(重要

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率

4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

10.9 查看网络状态

netstat   #查看tcp/ip通信网络状态

netstat   -anlp  |grep  80       #查看网络状态并将80端口显示,也能查端口号是否被占用

netstat -lnp     #查看监听端口

netstat -an      #查看系统的网络连接状况

netstat  -lntp   #只看tcp的,不包含socket

-t     #tcp

-u    #udp

##小技巧

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

##查看所有tcp握手、挥手状态的数量

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

LISTEN      4

ESTABLISHED      1

established      一千以内正常

ss  -an  类似 nestat  ,但是不会显示进程的名字

[root@xinlinux-02 ~]# ss -an

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port

nl    UNCONN     0      0         0:-1950350820            *

nl    UNCONN     0      0         0:0                      *

nl    UNCONN     0      0         0:-1950350820            *

10.10 linux下抓包

 • 抓包工具tcpdump    #查看数据的流向

yum install -y  tcpdump

• 用法:tcpdump -nn      #第一个n表示ip,第二个n表示端口号

tcpdump  -nn      #表示用数字显示ip地址的端口号;用来看数据的流向

-i   + 网卡设备

port + 端口号

-w   +文件     # 将抓的数据写到指定文件

• tcpdump -nn -i ens33    #抓包ens33网卡

#一般情况下都是tcp的包,如果是udp的包,有可能被攻击了

• tcpdump -nn port 80      #抓包80端口的

• tcpdump -nn -i ens33  port 80     #抓包ens33网卡的80端口

• tcpdump -nn not port 22 and host 192.168.0.100

#不要22端口的,和只要192.168.0.100ip的

• tcpdump -nn -c 10 -w  /tmp/1.cap

#指定-c10个数据包,-w包存到/tmp/1.cap

#/tmp/1.cap不能用cat查看,因为内容是通信的数据;可以通过tcpdump -r  /tmp/1.cap查看

[root@xinlinux-02 ~]# tcpdump -r /tmp/1.cap

reading from file /tmp/1.cap, link-type EN10MB (Ethernet)

15:27:53.567409 IP xinlinux-02.ssh > 192.168.233.1.50581: Flags [P.], seq 2142148352:2142148500, ack 1453950734, win 274, length 148

15:27:53.568077 IP 192.168.233.1.50581 > xinlinux-02.ssh: Flags [.], ack 148, win 251, length 0

15:28:01.195971 IP 192.168.233.1.50581 > xinlinux-02.ssh: Flags [P.], seq 1:53, ack 148, win 251, length 52

• yum install -y wireshark    #安装tshark命令

• tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

#查看指定网卡80端口web访问情况

10.11 Linux网络相关

ifconfig    #查看网卡ip(yum install net-tools)

 ifup ens33      #开启网卡ens33

ifdown ens33    #关闭网卡ens33

 ifdown ens33  && ifup ens33     #重启网卡

[root@xinlinux-02 ~]#  ifdown ens33  && ifup ens33

成功断开设备 'ens33'。

连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)

设定虚拟网卡ens33:1

1、cd  /etc/sysconfig/network-scripts/

2、cp  ifcfg-ens33  ifcfg-ens33-1

3、vim  ifcfg-ens33-1

修改下面三个

name=ens33:0

DEVICE=ens33:0

IPADDR=192.168.233.150

DNS1去掉,因为已经有了

4、ifdown ens33  && ifup ens33

mii-tool ens33     #查看网卡是否连接,如果不行的话用ethtool ens33

[root@xinlinux-02 network-scripts]# mii-tool ens33

ens33: negotiated 1000baseT-FD flow-control, link ok

ethtool ens33      #也可以查看网卡是否连接

[root@xinlinux-02 network-scripts]# ethtool ens33

Settings for ens33:

    Supported ports: [ TP ]

    Supported link modes:   10baseT/Half 10baseT/Full

                            100baseT/Half 100baseT/Full

                            1000baseT/Full

    Supported pause frame use: No

    Supports auto-negotiation: Yes

    Supported FEC modes: Not reported

    Advertised link modes:  10baseT/Half 10baseT/Full

                            100baseT/Half 100baseT/Full

                            1000baseT/Full

    Advertised pause frame use: No

    Advertised auto-negotiation: Yes

    Advertised FEC modes: Not reported

    Speed: 1000Mb/s

    Duplex: Full

    Port: Twisted Pair

    PHYAD: 0

    Transceiver: internal

    Auto-negotiation: on

    MDI-X: off (auto)

    Supports Wake-on: d

    Wake-on: d

    Current message level: 0x00000007 (7)

                   drv probe link

    Link detected: yes

修改主机名

vim  /etc/hostname

或者

hostnamectl set-hostname aminglinux   # 更改主机名CentOS6不支持该命令

修改DNS的两种方式:

1、 修改DNS配置文件/etc/resolv.conf

[root@xinlinux-02 ~]# vim /etc/resolv.conf

内容如下:

# Generated by NetworkManager

nameserver 119.29.29.29

2、修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-网卡名

/etc/hosts文件

[root@xinlinux-02 ~]# vim /etc/hosts

内容如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.133.150   www.qq123.com

 #左边ip,右边域名,支持一个ip多个域名

#ping www.qq123.com时,会转到192.168.133.150 (只在本机生效)

[root@xinlinux-02 ~]# ping www.qq123.com

PING www.qq123.com (192.168.133.150) 56(84) bytes of data.

64 bytes from www.qq123.com (192.168.133.150): icmp_seq=1 ttl=128 time=66.7 ms

拓展:tcp三次握手四次挥手重点面试常问) 

连接三次握手

  1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;

  2. TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

  3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。

  4. TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

  5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

断开四次挥手

  1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

  2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接收。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

  3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)

  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

  5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

猜你喜欢

转载自blog.csdn.net/Lucky_LGX/article/details/87906032
今日推荐