linux日常维护(iostat,free,ps,netstat,tcp三次握手,tcpdump)

简介:
  1. 监控io性能

iostat在安装sysstat时就已经安装,和sar属于同一个包


[root@abc ~]# iostat -x

Linux 3.10.0-514.el7.x86_64 (abc.com) 2017年11月27日 _x86_64_(1 CPU)


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

           0.25    0.00    0.35    0.36    0.00   99.04


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   2.36   1.30   51.77   5.41    31.22     0.03   7.07  5.25  0.39    2.27    0.83

sdb  0.00   0.00   0.14   0.00   0.86   0.00    12.55     0.00    0.53  0.53  0.00   0.39   0.01

scd0 0.00   0.00  0.01    0.00   0.02   0.00     8.00     0.00    1.00  1.00  0.00   1.00   0.00

dm-0 0.00  0.00    0.03   0.00   0.21   0.00    15.20     0.00    0.58   0.58  0.00  0.52  0.00


sar -b也可以查看磁盘信息,但是iostat -x可以看到很重要的一个%util

  在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率.
  当这个值接近100%时,表示设备带宽已经占满.


iotop:是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。

Total DISK READ :0.00 B/s                                磁盘读速度

 Total DISK WRITE :       0.00 B/s                                   磁盘写入速度




2.free 查看内存的使用情况

[root@abc ~]# free

           total        used        free      shared    buff/cache     vailable

Mem:        1008392      112632      662172        6864      233588      733800

Swap:       2097148           0     2097148

 

[root@abc ~]# free -h              (加上-h 更清晰的显示内存大小)

              total        used        free      shared  buff/cache   available

Mem:           984M        109M        646M        6.7M        228M        716M

Swap:          2.0G          0B        2.0G

total            内存总大小

used             已经使用的内存大小

free             剩余内存大小

shared            当前已经废弃不用

buff             缓冲内存数

cache            缓存内存数

available         free内存+buffer/cache剩余部分, 真正的剩余内存


公式:total=used+free+buff/cache(系统预留出来空间给cache和buff)


磁盘(010101)--> 内存(cache) --> cpu         从磁盘先把数据读出来放到内存里,内存在交给cpu

cpu(010101)--> 内存(buffer) --> 磁盘        cpu运算速度是很快的,写入数据没那么快要在磁盘里有一个缓冲空间


3.ps  (report a snapshot of the current processes)  汇报当前进程的快照

命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

Ps 只为您提供当前进程的快照。要即时查看最活跃的进程,可使用 top。
Top 实时地提供进程信息。它还拥有交互式的状态,允许用户输入命令,如 n 后面跟有 5 或 10 等数字。其结果是指示 top 显示 5 或 10 个最活跃的进程。Top 持续运行,直到您按 "q" 退出 top 为止。 

[root@abc ~]# ps aux 

USER       PID  %CPU  %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND


USER     使用进程的用户名

PID     进程ID,kill命令加进程ID可以杀死一个进程。当系统被黑时,可以查看恶意进程,并杀死它

%CPU     进程CPU占用率

%MEM     进程内存占用率

VSZ     进程所使用的虚拟内存

RSS     进程所使用的实际内存

TTY     与进程关联的终端

STAT    进程的状态

R 运行    Runnable (on run queue)            正在运行或在运行队列中等待。
S 睡眠    Sleeping                休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲    Idle
Z 僵死    Zombie(a defunct process)        进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 不可中断    Uninterruptible sleep (ususally IO)    收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止    Terminate                进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页    has no resident pages        没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程                    高优先序的进程
N 低优先    级进程                    低优先序的进程
L 内存锁页    Lock                有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+ 位于后台的进程组  

START    进程启动时间和日期

TIME     进程使用的总cpu时间

COMMAND  正在执行的命令行命令


4.netstat   查看网络状态     tcp/ip通信状态。

netstat -lnp 查看监听端口   只要是与外部通信,都会有一个端口

Socket是进程间通信的一种机制。前提是同一台服务器。netstat也可以查看系统文件里有哪些socket文件在监听

etstat -an   查看所有连接   

一个小技巧:

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

ESTABLISHED  2               有多少客户段连接占用着你的服务器。这个是要着重关注的,几千来说是正常的

TIME_WAIT                     连接你的服务器但是没有占用你的服务器资源


tcp三次握手,四次挥手:

(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。

三次握手:(建立TCP连接)

  1. host1会将标志位SYN=1,并随机产生一个seq=j的数据包发给host2,并进入SYN_SENT状态,等待host2确认

  2. host2收到数据包后,由SYN=1确定是host1请求连接,host2把标志位SYN=1和ACK都设置为1,ack=j+1,并随机产生一个seq的值,并将数据包发送给host1以确认连接请求,进入SYN_RCVD状态。

  3. host1收到确定后,检查ACK是否为1.ack是否为j+1,,如果正确将标志位ACK设置为1.ack=K+1,并将数据包发给host2,host2检查cck是否为K+1,ACK是否为1.如果正确则完成建立,host1与host2进入ESTABLISHED状态,完成三次握手,开始传输数据

    1.png

SYN攻击:
     在三次握手过程中,host2发送SYN-ACK之后,收到host1的ACK之前的TCP连接称为半连接(half-open connect),此时host2处于SYN_RCVD状态,当收到ACK后,host2转入ESTABLISHED状态。SYN攻击就是host1在短时间内伪造大量不存在的IP地址,并向host2不断地发送SYN包,host2回复确认包,并等待host1的确认,由于源地址是不存在的,因此,host2需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
 #netstat -nap | grep SYN_RECV


四次挥手:(终止TPC连接) 在socket编程中,这一过程由客户端或服务端任一方执行close来触发

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭

1.host1发送一个FIN,用来关闭host1到host2的数据传送,host1进入FIN_WAIA_1状态

2.host2收到FIN后,发送一个ACK给host1,确认序号为收到序号+1,(与SYN相同,一个FIN占用一个序号),host2进入CLOSE_WAIT状态

3.host2发送一个FIN,用来关闭host2到host1的数据传送,host2进入LAST_ACK状态。

4.host1收到FIN后,进入TIME_WAIT状态,接着发从一个ACK给host2,确认序号为收到序号+1.host2进入CLOSED状态,完成四次挥手。

2.png

实际还会同时发起主动关闭的情况。

3.png


为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
   这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。


5.tcpdunmp抓包

linux下抓包

yum install -y tcpdump

tcpdunmp (dump the traffic on a network)

根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

tcpdump -nn -i +网卡名字

(第一个n表示ip用数字形式显示出来)

port        指定端口号 

not port     不是指定端口的端口号

-c         指定抓多少包

-w         抓到的包存到指定文件(不能cat,是从网卡里捕获的数据包信息。只能用tcpdump -r 查看)

大部分是tcp服务,当你看到udp要注意,说不定是DDos攻击,叫做udp flood(udp洪水攻击),只能接入防攻击的服务或者工具。


[root@abc ~]# yum install -y wireshark   安装一个tshark的工具

[root@abc ~]#  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" 


这条命令无法实验,类似于外部的访问日志,因为虚拟机没有外部链接,这条命令可以查看客户端访问我的ip,访问网站的名字已经访问的文件/链接名字


tshark的其他用法:http://ask.apelearn.com/question/995










本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2045804,如需转载请自行联系原作者
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
28天前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
44 0
|
3月前
|
网络协议 Linux
Linux命令(120)之tcpdump
Linux命令(120)之tcpdump
37 0
|
5月前
|
Linux
linux下用tcpdump抓包
linux下用tcpdump抓包
|
5月前
|
监控 网络协议 Linux
Linux命令(2)之netstat
Linux命令(2)之netstat
26 2
|
28天前
|
监控 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 显示网络 连接、路由表和网络接口信息 netstat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示网络 连接、路由表和网络接口信息 netstat命令 使用指南
54 1
|
16天前
|
存储 缓存 监控
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
|
4月前
|
数据采集 机器学习/深度学习 网络协议
Linux|操作系统|应该知道的网络抓包知识(主要是wireshark,tcpdump)
Linux|操作系统|应该知道的网络抓包知识(主要是wireshark,tcpdump)
72 0
|
4月前
|
监控 网络协议 Linux
linux(三十五)网络状态和端口监控 netstat
linux(三十五)网络状态和端口监控 netstat
35 1
|
4月前
|
Linux Windows
Linux - netstat命令与端口占用
Linux - netstat命令与端口占用
44 0
|
11月前
|
网络协议 Unix Linux
如何在Linux中显示网络连接、路由表、接口统计等信息?Netstat了解一下!
如何在Linux中显示网络连接、路由表、接口统计等信息?Netstat了解一下!
225 0