zl程序教程

您现在的位置是:首页 >  系统

当前栏目

常用Linux性能检测命令

Linux性能命令 常用 检测
2023-09-27 14:26:26 时间

在这里插入图片描述

1、计数器

系统级别:

  • vmstat: 虚拟内存和物理内存的统计,系统级别
  • mpstat: 每个 CPU 的使用情况
  • iostat: 每个磁盘 I/O 的使用情况,由块设备接口报告
  • netstat: 网络接口的统计,TCP/IP 栈的统计,以及每个连接的一些统计信息
  • sar: 各种各样的统计,能归档历史数据

进程级别:

  • ps: 进程状态,显示进程的各种统计信息,包括内存和 CPU 的使用
  • top: 按一个统计数据排序,显示排名高的进程
  • pmap: 将进程的内存段和使用统计一起列出

一般来说,上述这些工具是从 /proc 文件系统里读取统计信息的

2、跟踪

跟踪收集每一个事件的数据以供分析。跟踪框架一般默认是不启用的,因为跟踪捕获数据会有 CPU 开销,另外还需要不小的存储空间来存放数据。

系统级别:

  • tcpdump: 网络包跟踪(libpcap lib)
  • blktrace: 块 I/O 跟踪
  • DTrace: 跟踪内核的内部活动和所有资源的使用情况,支持静态和动态的跟踪
  • SystemTap: 同上
  • perf: Linux 性能事件,跟踪静态和动态的指针

进程级别:

  • strace: 系统调用跟踪
  • gbd: 源码级别的调试器

tcpdump与Wireshark

tcpdump和wireshark配合使用效果很不错,tcpdump提供了方便的抓包存储命令,wireshark提供了优秀的解析展示,可以方便包解析后的查看。

用tcpdump抓包以后用Wireshark打开分析。

tcpdump

https://www.cnblogs.com/f-ck-need-u/p/7064286.html

写入文件:

-w filename 监听内容写入文件

监听端口设置:

port 80 监听80端口
tcp port 80 tcp80端口
udp port 80 udp80端口
src port 80 来源端口80
dst port 80 发往端口80

监听IP设置:

host 192.168.0.1监听与主机192.168.0.1通信内容
src 192.168.0.1 监听来源自192.168.0.1内容
dst 192.168.0.1 监听发往192.168.0.1内容

监听指定网络接口:

-i eth0 监听eth0接口
注:执行tcpdump -D可以查看支持的接口有哪些

# kolor @ kolordeMacBook-Pro in ~ [9:36:02]
$ tcpdump -D
1.en0 [Up, Running]
2.p2p0 [Up, Running]

常用案例:
1.监听访问baidu网站的443端口
命令:tcpdump host www.baidu.com and port 443
带写入文件时:

  • tcpdump host www.baidu.com and port 443 -w wike.cap

  • 使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log。
    tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

2.监听与192.168.0.1的udp协议通信情况
命令:tcpdump host 192.168.0.1 and udp
带写入文件:tcpdump host 192.168.0.1 and udp -w 1udp.cap

3.语法
类型的关键字

host(缺省类型): 指明一台主机,如:host 210.27.48.2
net: 指明一个网络地址,如:net 202.0.0.0
port: 指明端口号,如:port 23

确定方向的关键字

src: src 210.27.48.2, IP包源地址是210.27.48.2
dst: dst net 202.0.0.0, 目标网络地址是202.0.0.0
dst or src(缺省值)
dst and src

协议的关键字:缺省值是监听所有协议的信息包

tcp
udp
ip
arp等

其他关键字

gateway
broadcast
less
greater

常用表达式:多条件时可以用括号,但是要用转义

: ! 或 not (去掉双引号): &&and: ||or

【提取TCP具体标识字段 秘籍】

1、如果想查看哪些ICMP包中“目标不可达、主机不可达”的包,请使用这样的过滤表达式:
icmp[0:2]==0x0301

2、要提取TCP协议的SYN、ACK、FIN标识字段,语法是:
tcp[tcpflags] & tcp-syn
tcp[tcpflags] & tcp-ack
tcp[tcpflags] & tcp-fin

3、如果要抓取一个区间内的端口,可以使用portrange语法:
tcpdump -i eth0 -nn 'portrange 52-55' -c 1  -XX

4、监听tcpdump中的多个端口
tcpdump port 80 or port 3128
或者,
tcpdump port '(80 or 443)'

4.选项

-A:以ASCII编码打印每个报文(不包括链路层的头)
-a:将网络和广播地址转换成名称;
-c<数据包数目>:收到指定的数据包数目后,tcpdump就会停止;
🌟-D:tcpdump会列出所有可以选择的抓包对象
-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
-e:在每列倾倒资料上显示连接层级的文件头;
-f:用数字显示网际网络地址;
-F<表达文件>:指定内含表达方式的文件;
-i<网络界面>:使用指定的网络截面送出数据包;
-l:使用标准输出列的缓冲区;
-n:指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字;
-nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-N:不列出域名;
-O:不将数据包编码最佳化;
-p:不让网络界面进入混杂模式;
-q :快速输出,仅列出少数的传输协议信息;
-r<数据包文件>:从指定的文件读取数据包数据;
-s<数据包大小>:设置每个数据包的大小;  #-s0 : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容
-S:用绝对而非相对数值列出TCP关联数;
-t:在每列倾倒资料上不显示时间戳记;
-tt: 在每列倾倒资料上显示未经格式化的时间戳记;
-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
-v:详细显示指令执行过程;
-vv:更详细显示指令执行过程;
-x:用十六进制字码列出数据包资料;
-XX:则tcpdump会从以太网部分就开始显示网络包内容,而不是仅从网络层协议开始显示。
-w<数据包文件>:把数据包数据写入指定的文件。

5.示例

监视指定网络接口的数据包
tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0

用tcpdump嗅探80端口的访问看看谁最高。
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4"."}' | sort | uniq -c | sort -nr | head -5

抓取所有经过eth0,目的或源地址是192.168.1.1的网络数据
tcpdump -i eth0 host 192.168.1.1   

抓取主机 192.168.1.1 和 主机 192.168.1.2192.168.1.3的通信
tcpdump host 192.168.1.1 and (192.168.1.2 or 192.168.1.3)

抓取主机 192.168.2.1 除了和主机 192.168.1.1之外所有主机通信的数据包:
tcpdump -n host 192.168.2.1 and !192.168.1.1

抓取主机192.168.1.1发送的所有数据
tcpdump -i eth0 src host 192.168.1.1

抓取主机192.168.1.1接收的所有数据
tcpdump -i eth0 dst host 192.168.1.1

抓取主机192.168.1.1所有在TCP 80端口的数据包
tcpdump -i eth0 host 192.168.1.1 and tcp port 80

抓取主机10.37.63.380端口接收到的数据包
tcpdump -i eth0 host 10.37.63.3 and dst port 80

抓取所有经过eth0,网络是192.168上的数据包
tcpdump -i eth0 net 192.168
tcpdump -i eth0 net 192.168.1.0/24

协议过滤
tcpdump -i eth0 arp
tcpdump -i eth0 ip

抓取所有经过 en0,目的地址是 192.168.1.254192.168.1.200 端口是 80 的 TCP 数据
tcpdump -i en0 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

抓取所有经过en0,目标MAC地址是14:7d:da:bc:xx:xx 的 ICMP 数据
tcpdump -i en0 '((icmp) and ((ether dst host 14:7d:da:bc:xx:xx)))'

抓取所有经过en0,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
tcpdump -i en0 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

只抓SYN包
tcpdump -i en0 'tcp[tcpflags] = tcp-syn'

只捕获TCP SYN包:
# tcpdump -i <interface> "tcp[tcpflags] & (tcp-syn) != 0"
只捕获TCP ACK包:
# tcpdump -i <interface> "tcp[tcpflags] & (tcp-ack) != 0"
只捕获TCP FIN包:
# tcpdump -i <interface> "tcp[tcpflags] & (tcp-fin) != 0"
只捕获TCP SYN或ACK包:
# tcpdump -r <interface> "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

-S:用绝对而非相对数值列出TCP关联数;
tcpdump -S -i en0 host www.baidu.com

https://www.cnblogs.com/pyng/p/9698723.html

tcpdump输出内容分析 16进制
https://blog.csdn.net/Qevery678/article/details/89182872

-S:用绝对而非相对数值列出TCP关联数;
tcpdump -S -i en0 host www.baidu.com

分析抓取到的报文

第一列是时间戳:时、分、秒、微秒

第二列是网际网路协议的名称

第三列是报文发送方的十进制网际网路协议地址,以及紧跟其后的端口号。

第四列是\>流向符,数据包从左边发往右边

第五列是报文接收方的十进制网际网路协议地址,以及紧跟其后的端口号

第六列是冒号

第七列是Flags标识,可能的取值是`[S.][.][P.][F.]`, Flags的标记,此处为[P.],代表PST和ACK(.代表ACK确认)

tcpdump的Flags代表了这个数据包的用途,这些标记是TCP首部的内容

[S]:SYN同步标识<br>[.]<code>.</code>表示ACK确认标识<br>[S.]:SYN同步标识,以及确认[S]的ACK<br>[P.]:PSH,push推送,数据传输<br>[R.]:RST,连接重置<br>[F.]:FIN结束连接<br>[DF]:Don't Fragment(不允许分片),当DF=0时,表示允许分片,一般<code>-v</code>时才有这个标识<br>[FP.]:标记FIN、PUSH、ACK组合,这样做是为了提升网络效率,减少数据来回确认等

第八列往后,seq 463752178:463752321, ack 1861813478, win 4096, length 143: HTTP: GET / HTTP/1.1

- seq为序列号
- ack为确认码
- win为滑动窗口大小
- length为承载的数据(payload)长度length,如果没有数据则为0

wireshark

1.No:代表数据包标号。

2.Time:在软件启动的多长时间内抓到。

3.Source:来源ip。

4.Destination: 目的ip。

5.Protocol:协议。

6.Length:数据包长度。

7.info:数据包信息。

Frame:物理层的数据帧概况;
EthernetⅡ:数据链路层以太网帧头部信息;
Internet Protocol Version 4:互联网层IP包头部;
Transmission Control Protocol:传输层的数据段头部信息
Hypertext Transfer Protocol:应用层的信息,这里的是HTTP;

数据概况解读:

  • https://blog.csdn.net/weixin_34117211/article/details/93020529
  • https://blog.51cto.com/13444271/2125346

SYN——》SYN,ACK——〉ACK

方法
1、过滤源ip、目的ip。在wireshark的过滤规则框Filter中输入过滤条件。
查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8;
查找源地址为ip.src==1.1.1.1;
 ip.src_host==
2、端口过滤。
过滤80端口,在Filter中输入,tcp.port==,这条规则是把源端口和目的端口为80的都过滤出来。
使用tcp.dstport==80只过滤目的端口为80的,tcp.srcport==80只过滤源端口为80的包;
 
3、协议过滤比较简单,直接在Filter框中直接输入协议名即可,如过滤HTTP的协议;
 
4、http模式过滤。
过滤get包,http.request.method=="GET"
过滤post包,http.request.method=="POST";

HTTP协议
http.host == "http://baidu.net"

DNS协议
dns.qry.name=="www.baidu.com"

5、连接符and的使用。
过滤两种条件时,使用and连接,如过滤ip为192.168.101.8并且为http协议的,ip.src==192.168.101.8 and http。

简述TCP包头的内容

  • 序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  • 确认号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
  • 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
    URG:紧急指针有效
    ACK:确认序号有效
    PSH:接收方应该尽快将这个报文交给应用层。
    RST:重置连接。
    SYN:发起一个新连接。
    FIN:释放一个连接。

三次握手
  概念:指在发送数据的准备阶段,服务器和客户端之间需要三次交互
  第一次握手:建立连接时,客户端向服务器发送一个SYN包,并进入SYN_SENT状态,等待服务器确认
  第二次握手:当服务器收到客户端的请求后,此时要给客户端给一个确认信息ACK,同时发送SYN包,此时服务器进入 SYN_RECV状态
 第三次握手:客户端收到服务器发的ACK+SYN包后,向服务器发送ACK,发送完毕之后,客户端和服务器进入 ESTABLISHED(TCP连接成功)状态,完成三次握手

四次挥手
​  概念:所谓四次挥手就是说关闭TCP连接的过程,当断开一个TCP连接时,需要客户端和服务器共发送四个包确认
​  第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传输,客户端进入FIN_WAIT_1状态
​  第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序 号),服务器进入CLOSE_WAIT状态
​  第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态
​  第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手

3、CPU分析工具

top命令

TOP命令的用法详细详解:

  • 按“P”键:可根据CPU使用时间的多少来排序。
  • 按“M”键:可根据内存使用量的多少来排序,如图12-3所示。
  • 按“T”键:可根据执行时间的多少来排序。
  • 多U多核CPU监控:按键盘数字“1”,可监控每个逻辑CPU的状况:
  • 高亮显示当前运行进程:敲击键盘“b”(打开/关闭加亮效果)
  • 进程字段排序:敲击键盘“x”(打开/关闭排序列的加亮效果)
    在这里插入图片描述
    通过”shift + >”或”shift + <”可以向右或左改变排序列

监视特定用户
因为top命令显示的数据有很多,所以要找出与特定用户有关的进程很不方便,此时您可在top画面中按下“shift+u”键,然后输入用户名称,系统即会过滤出与指定用户有关的进程信息。

删除指定进程
如果您具有管理员或所有者的身份,则可将某个进程由top中删除,这通常是因为该进程占用太多的系统资源。以下是删除指定进程所需执行的步骤:

  1. 步骤1 执行top命令,然后在数据画面中按“k”键。
  2. 步骤2 画面中会出现“PID to kill:”信息,接着输入该进程的PID。
  3. 步骤3 输入PID后按键,会出现“Kill PID xxxxx with signal [15]:”提示信息(此处的xxxxx是指PID编号),此时需输入signal号码,如果直接按键,则以默认的15进行处理。
  4. 步骤4 如果无法顺利删除,则输入9来强制删除该进程。

在这里插入图片描述

  • 第一行后面的三个值是系统在之前 1、5、15 的平均负载,也可以看出系统负载是上升、平稳、下降的趋势,当这个值超过 CPU 可执行单元的数目,则表示 CPU 的性能已经饱和成为瓶颈了。

  • 第二行统计了系统的任务状态信息。running 很自然不必多说,包括正在 CPU 上运行的和将要被调度运行的;sleeping 通常是等待事件(比如 IO 操作)完成的任务,细分可以包括 interruptible 和 uninterruptible 的类型;stopped 是一些被暂停的任务,通常发送 SIGSTOP 或者对一个前台任务操作 Ctrl-Z 可以将其暂停;zombie 僵尸任务

    僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源

  • 第三行 cpu状态信息:
    5.9% us:用户空间占用CPU的百分比。
    3.4% sy:内核空间占用CPU的百分比。—— IO操作相关
    0.0% ni:改变过优先级的进程占用CPU的百分比
    90.4% id:空闲CPU百分比
    0.0% wa:IO等待占用CPU的百分比。 —— 该值过高,反应IO操作效率低
    0.0% hi:硬中断(Hardware IRQ)占用CPU的百分比。 —— 该值过高,外设可能出现问题,cat /proc/interrupts
    0.2% si:软中断(Software Interrupts)占用CPU的百分比

  • 第四行和第五行是物理内存和虚拟内存(交换分区)的信息:
    total = free + used + buff/cache,现在buffers和cached Mem信息总和到一起了,但是buffers和cached

内存状态,具体信息如下:
32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)
18537836k free — 空闲内存总量(18GB)
169884k buffers — 缓存的内存量 (169M)

swap交换分区信息,具体信息说明如下:
32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB)

各进程(任务)的状态监控,项目列信息说明如下:
PID:进程id
USER:进程所有者
PR:进程优先级
NI:nice值。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:共享内存大小,单位kb
S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:进程名称(命令名/命令行)

buffer与cache

buffers 和 cached 都是缓存,两者有什么区别呢?
为了提高磁盘存取效率,Linux 做了一些精心的设计,除了对 dentry 进行缓存(用于VFS,加速文件路径名到 inode 的转换),还采取了两种主要 Cache 方式:Buffer Cache 和Page Cache。前者针对磁盘块的读写,后者针对文件 inode 的读写。这些 Cache 有效缩短了 I/O 系统调用(比如 read,write,getdents)的时间。

Buffer cache 是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
简单说来,page cache 用来缓存文件数据,buffer cache 用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到 page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到 buffer cache。

vmstat

vmstat: https://blog.csdn.net/quiet_girl/article/details/50666906
命令参数

-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000102410000001048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。

字段说明:

Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小

Swap:
si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

系统:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
id + us + sy = 100
wa: 等待IO时间

那这个性能大于多少代表不好呢?

r 表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈

iostat

iotop 可以直观的显示各个进程、线程的磁盘读取实时速率

iostat: https://blog.csdn.net/quiet_girl/article/details/50668790

  1. iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
  2. avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
  3. await 表示每次IO请求等待时间,包括等待时间和处理时间
  4. svctm 表示每次IO请求处理的时间(ms),如果 svctm 与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,否则磁盘队列等待时间较长,磁盘响应较差;
  5. %util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
$ iostat
Linux 3.10.0-957.el7.x86_64 (ip131)     05/26/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.00    0.25    0.00    0.00   99.68

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.23        32.90         4.46     201941      27407
dm-0              1.18        27.54         4.13     169074      25359
dm-1              0.01         0.40         0.00       2460          0

	avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。
	Device: 各磁盘设备的IO统计信息。各列含义如下:
	tps: 每秒进程下发的IO读、写请求数量
	KB_read/s: 每秒从驱动器读入的数据量,单位为K。
	KB_wrtn/s: 每秒从驱动器写入的数据量,单位为K。
	KB_read: 读入数据总量,单位为K。
	KB_wrtn: 写入数据总量,单位为K。
1) -x:输出更详细的io设备统计信息
​ 2) -d:单独输出Device结果,不包括cpu结果
​ 3) -k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
​ 4) -c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
​ 5) interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出

$ iostat -xd 2 1
Linux 3.10.0-957.el7.x86_64 (ip131)     05/26/2020      _x86_64_        (2 CPU)

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.01    0.86    0.59    41.81     5.11    64.45     0.00    0.79    0.86    0.69   0.51   0.07
dm-0              0.00     0.00    0.77    0.61    34.76     4.67    57.10     0.00    0.85    0.93    0.76   0.53   0.07
dm-1              0.00     0.00    0.02    0.00     0.53     0.00    54.67     0.00    0.13    0.13    0.00   0.04   0.00

	%util: IO队列非空的时间比率
	rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
	wrqm/s: 每秒对该设备的写请求被合并次数
	r/s: 每秒完成的读次数
	w/s: 每秒完成的写次数
	rkB/s: 每秒读数据量(kB为单位)
	wkB/s: 每秒写数据量(kB为单位)
	avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
	avgqu-sz: 平均等待处理的IO请求队列长度
	await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
	svctm: 平均每次IO请求的处理时间(毫秒为单位)

ss命令

ss命令
统计服务器并发连接数
netstat -ant | grep EST | wc -l
ss -o state established | wc -l
总结:ss效率完胜netstat


ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接

ss列出处在FIN-WAIT-1状态的http、https连接
ss -o state fin-wait-1 '( sport = :http or sport = :https )'

ss常用的state状态:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing


ss使用IP地址筛选:
ss src ADDRESS_PATTERN
src:表示来源
ADDRESS_PATTERN:表示地址规则
如下:ss src 120.33.31.1 # 列出来之20.33.31.1的连接
# 列出来至120.33.31.1,80端口的连接
ss src 120.33.31.1:http
ss src 120.33.31.1:80

ss使用端口筛选:
ss dport OP PORT
OP:是运算符
PORT:表示端口
dport:表示过滤目标端口、相反的有sport

OP运算符如下:
<= or le : 小于等于 >= or ge : 大于等于
== or eq : 等于
!= or ne : 不等于端口
< or lt : 小于这个端口 > or gt : 大于端口

OP实例:
ss sport = :http 也可以是 ss sport = :80
ss dport = :http
ss dport \> :1024
ss sport \> :1024
ss sport \< :32000
ss sport eq :22
ss dport != :22
ss state connected sport = :http
ss \( sport = :http or sport = :https \)
ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.


为什么ss比netstat快:
netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多



其他

mpstat: https://blog.csdn.net/quiet_girl/article/details/50697412

sar: https://blog.csdn.net/quiet_girl/article/details/50687140

  • https://blog.csdn.net/xusensen/article/details/54606401
    ⭐️https://www.cnblogs.com/howhy/p/6396437.html

    • 网络统计:sar -n DEV
    • 内存统计:sar -r

dstat: https://wangchujiang.com/linux-command/c/dstat.html

nc命令