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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:
  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,如需转载请自行联系原作者
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
网络协议 Linux
linux tcpdump 使用小结(二)
linux tcpdump 使用小结(二)
26 1
|
4月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
|
2月前
|
监控 Linux
性能分析之 Linux 系统中 ps&top 中 CPU 百分比不一致?
【8月更文挑战第18天】性能分析之 Linux 系统中 ps&top 中 CPU 百分比不一致?
46 4
|
2月前
|
监控 Linux
在Linux中,如何使用vmstat和iostat命令?
在Linux中,如何使用vmstat和iostat命令?
|
3月前
|
运维 监控 网络协议
Linux抓包命令tcpdump使用技巧大全
【7月更文挑战第10天】
89 5
Linux抓包命令tcpdump使用技巧大全
|
3月前
|
Linux
linux tcpdump 使用小结(一)
linux tcpdump 使用小结(一)
47 10
|
2月前
|
Linux
在Linux中,ps aux 中的 VSZ 代表什么意思?RSS 代表什么意思?
在Linux中,ps aux 中的 VSZ 代表什么意思?RSS 代表什么意思?
|
2月前
|
Prometheus 监控 Cloud Native
在Linux中,如何使用iostat、sar、netstat等工具进行硬件资源监控?
在Linux中,如何使用iostat、sar、netstat等工具进行硬件资源监控?
|
5月前
|
缓存 Linux
linux性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)
这些工具可以帮助你监视系统的内存使用情况、识别内存泄漏、找到高内存消耗的进程等。根据具体的问题和需求,你可以选择使用其中一个或多个工具来进行内存性能分析。注意,内存分析通常需要综合考虑多个指标和工具的输出,以便更好地理解系统的行为并采取相应的优化措施。
119 6
|
5月前
|
Linux
Linux系统ps命令
这些是一些常见的 `ps`命令选项和用法,用于查看系统中运行的进程及其相关信息。您可以根据需要选择合适的选项以满足您的任务要求。
481 0
下一篇
无影云桌面