日常运维(上)
系统监控
-
使用w查看系统负载
-
vmstat命令
-
top命令
-
sar命令
-
nload命令
-
监控io性能
-
free命令
-
ps命令
-
查看网络状态
-
linux下抓包
-
扩展
一、w、vmstat、top、sar命令
- 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命令查看
-
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的百分比
-
-
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:命令行
-
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
-
nload命令
nload命令用来监控网络流量,默认是没有安装的需要安装使用。
安装:
yum install epel-release
yum install nload
用法:
nload
第一行显示网卡名、ip、当前网卡(可以按左右键切换网卡)。按q退出
nload 默认分为上下两块:
Incoming: 接收网卡的流量
Outgoing:出去的流量
Curr: 当前流量
Avg: 平均流量
Min: 最小流量
Max: 最大流量
Ttl: 总流量
-
监控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
-
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
-
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 :多线程进程
字符+ :前台进程
三、监控网络状态、抓包
- 查看网络状态使用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显示的差不多,但是它不显示进程的名字
-
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
四、网络相关
-
查看网卡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。只能做本机使用
五、直播课
- 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 可用状态了。
-
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
-
路由相关设置
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
来源:oschina
链接:https://my.oschina.net/u/3755326/blog/3036755