1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

add Linux性能分析工具合集

This commit is contained in:
shuang.kou 2020-06-17 19:42:17 +08:00
parent d223864a5c
commit 8fc445cec4
14 changed files with 635 additions and 1 deletions

View File

@ -174,6 +174,7 @@ Github用户如果访问速度缓慢的话可以转移到[码云](https://git
* [后端程序员必备的 Linux 基础知识](docs/operating-system/linux.md)
* [Shell 编程入门](docs/operating-system/Shell.md)
* [完全使用GNU_Linux学习](docs/operating-system/完全使用GNU_Linux学习.md)
* [Linux 性能分析工具合集](docs/operating-system/Linux性能分析工具合集.md)
## 数据结构与算法

View File

@ -280,7 +280,6 @@ Collections.sort(arrayList):
// person对象没有实现Comparable接口所以必须实现这样才不会出错才可以使treemap中的数据按顺序排列
// 前面一个例子的String类已经默认实现了Comparable接口详细可以查看String类的API文档另外其他
// 像Integer类等都已经实现了Comparable接口所以不需要另外实现了
public class Person implements Comparable<Person> {
private String name;
private int age;

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 KiB

View File

@ -0,0 +1,634 @@
# Linux性能分析工具合集
> 本文由读者投稿,原文地址:[https://ysshao.cn/Linux/Linux_performance/](https://ysshao.cn/Linux/Linux_performance/) 。
## 1. 背景
有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情。
## 2. 说明
本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题。
## 3. 分析问题的方法论
套用5W2H方法可以提出性能分析的几个问题
- What-现象是什么样的
- When-什么时候发生
- Why-为什么会发生
- Where-哪个地方发生的问题
- How much-耗费了多少资源
- How to do-怎么解决问题
## 4.性能分析工具合集
<img src="Linux_performance/linux_xn.png" alt="img" style="zoom:60%;" />
### CPU
针对应用程序我们通常关注的是内核CPU调度器功能和性能。
线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:
a. on-CPU执行中执行中的时间通常又分为用户态时间user和系统态时间sys。
b. off-CPU等待下一轮上CPU或者等待I/O、锁、换页等等其状态可以细分为可执行、匿名换页、睡 眠、锁、空闲等状态。
#### **分析工具**
| 工具 | 描述 |
| -------- | ------------------------------ |
| uptime/w | 查看服务器运行时间、平均负载 |
| top | 监控每个进程的CPU用量分解 |
| vmstat | 系统的CPU平均负载情况 |
| mpstat | 查看多核CPU信息 |
| sar -u | 查看CPU过去或未来时点CPU利用率 |
| pidstat | 查看每个进程的用量分解 |
#### uptime
uptime 命令可以用来查看服务器已经运行了多久当前登录的用户有多少以及服务器在过去的1分钟、5分钟、15分钟的系统平均负载值
<img src="Linux_performance\image-20200604180851790.png" alt="image-20200604180851790" style="zoom:95%;" />
第一项是当前时间up 表示系统正在运行6:47是系统启动的总时间最后是系统的负载load信息
w 同上,增加了具体登陆了那些用户及登陆时间。
#### top
常用来监控[Linux](http://lib.csdn.net/base/linux)的系统状况比如cpu、内存的使用显示系统上正在运行的进程。
<img src="Linux_performance\image-20200604181133355.png" alt="image-20200604181133355" style="zoom:76%;" />
1. **系统运行时间和平均负载:**
top命令的顶部显示与uptime命令相似的输出。
这些字段显示:
- 当前时间
- 系统已运行的时间
- 当前登录用户的数量
- 相应最近5、10和15分钟内的平均负载。
2. **任务**
第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外还有正在运行、睡眠、停止、僵尸进程的数量僵尸是一种进程的状态。这些进程概括信息可以用t切换显示。
3. **CPU状态**
下一行显示的是CPU状态。 这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:
- us, user 运行(未调整优先级的) 用户进程的CPU时间
- sysystem: 运行内核进程的CPU时间
- niniced运行已调整优先级的用户进程的CPU时间
- waIO wait: 用于等待IO完成的CPU时间
- hi处理硬件中断的CPU时间
- si: 处理软件中断的CPU时间
- st这个虚拟机被hypervisor偷去的CPU时间译注如果当前处于一个hypervisor下的vm实际上hypervisor也是要消耗一部分CPU处理时间的
4. **内存使用**
接下来两行显示内存使用率有点像free命令。第一行是物理内存使用第二行是虚拟内存使用(交换空间)。
物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。
> 这里要说明的是不能用windows的内存概念理解这些数据如果按windows的方式此台服务器“危矣”8G的内存总量只剩下530M的可用内存。Linux的内存管理有其特殊性复杂点需要一本书来说明这里只是简单说点和我们传统概念windows的不同。
>
> 第四行中使用中的内存总量used指的是现在系统内核控制的内存数空闲内存总量free是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中还包括过去使用过的现在可以被重复利用的内存内核并不把这些可被重新使用的内存交还到free中去因此在[linux](http://lib.csdn.net/base/linux)上free内存会越来越少但不用为此担心。
>
> 如果出于习惯去计算可用内存数,这里有个近似的计算公式:
>
> **第四行的free + 第四行的buffers + 第五行的cached。**
>
> 对于内存监控在top里我们要时刻监控第五行swap交换分区的used如果这个数值在不断的变化说明内核在不断进行内存和swap的数据交换这是真正的内存不够用了。
5. **字段/列**
| 进程的属性 | 属性含义 |
| ---------- | ------------------------------------------------------------ |
| PID | 进程ID进程的唯一标识符 |
| USER | 进程所有者的实际用户名。 |
| PR | 进程的调度优先级。这个字段的一些值是rt。这意味这这些进程运行在实时态。 |
| NI | 进程的nice值优先级。越小的值意味着越高的优先级。 |
| VIRT | 进程使用的虚拟内存。 |
| RES | 驻留内存大小。驻留内存是任务使用的非交换物理内存大小。 |
| SHR | SHR是进程使用的共享内存。 |
| S | 这个是进程的状态。它有以下不同的值:<br>D不可中断的睡眠态、R运行态、S睡眠态、T被跟踪或已停止、Z 僵尸态 |
| %CPU | 自从上一次更新时到现在任务所使用的CPU时间百分比。 |
| %MEM | 进程使用的可用物理内存百分比。 |
| TIME+ | 任务启动后到现在所使用的全部CPU时间精确到百分之一秒。 |
| COMMAND | 运行进程所使用的命令。 |
还有许多在默认情况下不会显示的输出它们可以显示进程的页错误、有效组和组ID和其他更多的信息。
常用交互命令:
B一些重要信息会以加粗字体显示(高亮)。这个命令可以切换粗体显示。
b:
DS: 你将被提示输入一个值以秒为单位它会以设置的值作为刷新间隔。如果你这里输入了1top将会每秒刷新。 top默认为3秒刷新
ltm: 切换负载、任务、内存信息的显示,这会相应地切换顶部的平均负载、任务/CPU状态和内存信息的概况显示。
z : 切换彩色显示
x 或者 y
切换高亮信息x将排序字段高亮显示纵列y将运行进程高亮显示横行。依赖于你的显示设置你可能需要让输出彩色来看到这些高亮。
u: 特定用户的进程
n#: 任务的数量
k: 结束任务
**命令行选项**
> top //每隔3秒显式所有进程的资源占用情况
>
> top -u oracle -c //按照用户显示进程、并显示完整命令
>
> top -d 2 //每隔2秒显式所有进程的资源占用情况
>
> top -c //每隔3秒显式进程的资源占用情况并显示进程的命令行参数(默认只有进程名)
>
> top -p 12345 -p 6789//每隔3秒显示pid是12345和pid是6789的两个进程的资源占用情况
>
> top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况并显式该进程启动的命令行参数
>
> top -n 设置显示多少次后就退出
**补充**
top命令是Linux上进行系统监控的首选命令但有时候却达不到我们的要求比如当前这台服务器top监控有很大的局限性。这台服务器运行着websphere集群有两个节点服务就是【top视图 01】中的老大、老二两个java进程top命令的监控最小单位是进程所以看不到我关心的java线程数和客户连接数而这两个指标是java的web服务非常重要的指标通常我用ps和netstate两个命令来补充top的不足。
#### vmstat
vmstat命令是最常见的Linux/Unix监控工具可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率内存使用虚拟内存交换情况,IO读写情况。
一般vmstat工具的使用是通过两个数字参数来完成的第一个参数是采样的时间间隔数单位是秒第二个参数是采样的次数如:
<img src="Linux_performance\image-20200604203027136.png" alt="image-20200604203027136" style="zoom:75%;" />
每个参数的含义:
**Procs进程**
| r: | 运行队列中进程数量这个值也可以判断是否需要增加CPU。长期大于1 |
| ---- | ------------------------------------------------------------ |
| b | 等待IO的进程数量。 |
**Memory内存**
| swpd | 使用虚拟内存大小如果swpd的值不为0但是SISO的值长期为0这种情况不会影响系统性能。 |
| ----- | ------------------------------------------------------------ |
| free | 空闲物理内存大小。 |
| buff | 用作缓冲的内存大小。 |
| cache | 用作缓存的内存大小如果cache的值大的时候说明cache处的文件数多如果频繁访问到的文件都能被cache处那么磁盘的读IO bi会非常小。 |
**Swap**
| si | 每秒从交换区写到内存的大小,由磁盘调入内存。 |
| ---- | -------------------------------------------- |
| so | 每秒写入交换区的内存大小,由内存调入磁盘。 |
注意内存够用的时候这2个值都是0如果这2个值长期大于0时系统性能会受到影响磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存free很少的或接近于0时就认为内存不够用了不能光看这一点还要结合si和so如果free很少但是si和so也很少大多时候是0那么不用担心系统性能这时不会受到影响的。因为linux总是先把内存用光.
**IO**
| bi | 每秒读取的块数 |
| ---- | -------------- |
| bo | 每秒写入的块数 |
注意随机磁盘读写的时候这2个值越大如超出1024k)能看到CPU在IO等待的值也会越大。
**system系统**
| in | 每秒中断数,包括时钟中断。 |
| ---- | -------------------------- |
| cs | 每秒上下文切换数。 |
注意上面2个值越大会看到由内核消耗的CPU时间会越大。
**CPU以百分比表示**
| us | 用户进程执行时间百分比(user time) us的值比较高时说明用户进程消耗的CPU时间多但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。 |
| ---- | ------------------------------------------------------------ |
| sy: | 内核系统进程执行时间百分比(system time) sy的值高时说明系统内核消耗的CPU资源多这并不是良性表现我们应该检查原因。 |
| wa | IO等待时间百分比 wa的值高时说明IO等待比较严重这可能由于磁盘大量作随机访问造成也有可能磁盘出现瓶颈块操作。 |
| id | 空闲时间百分比 |
#### mpstat
mpstat是一个实时监控工具主要报告与CPU相关统计信息,在多核心cpu系统中不仅可以查看cpu平均信息还可以查看指定cpu信息。
> mpstat -P ALL //查看全部CPU的负载情况。
>
> mpstat 2 5 //可指定间隔时间和次数。
| CPU: 处理器编号。关键字all表示统计信息计算为所有处理器之间的平均值。 |
| ------------------------------------------------------------ |
| usr: 显示在用户级应用程序执行时发生的CPU利用率百分比。 |
| nice: 显示以优先级较高的用户级别执行时发生的CPU利用率百分比。 |
| sys: 显示在系统级内核执行时发生的CPU利用率百分比。请注意这不包括维护硬件和软件的时间中断。 |
| iowait: 显示系统具有未完成磁盘I / O请求的CPU或CPU空闲的时间百分比。 |
| irq: 显示CPU或CPU用于服务硬件中断的时间百分比。 |
| %soft: 显示CPU或CPU用于服务软件中断的时间百分比。 |
| %steal: 显示虚拟CPU或CPU在管理程序为另一个虚拟处理器提供服务时非自愿等待的时间百分比。 |
| %guest: 显示CPU或CPU运行虚拟处理器所花费的时间百分比。 |
#### sar
系统活动情况报告可以从多方面对系统的活动进行报告包括文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等
CPU相关
sar -p (查看全天)
sar -u 1 10 1每隔一秒10写入10次
CPU输出项-详细说明
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别用于nice操作所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
#### pidstat
用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。
pidstat 和 pidstat -u -p ALL 是等效的。
pidstat 默认显示了所有进程的cpu使用率。
详细说明
PID进程ID
%usr进程在用户空间占用cpu的百分比
%system进程在内核空间占用cpu的百分比
%guest进程在虚拟机占用cpu的百分比
%CPU进程占用cpu的百分比
CPU处理进程的cpu编号
Command当前进程对应的命令
### 内存
内存是为提高效率而生,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题。同样对于内存有些概念需要清楚:
- 主存
- 虚拟内存
- 常驻内存
- 地址空间
- OOM
- 页缓存
- 缺页
- 换页
- 交换空间
- 交换
- 用户分配器libc、glibc、libmalloc和mtmalloc
- LINUX内核级SLUB分配器
#### 分析工具
| 工具 | 描述 |
| ------- | ------------------------------ |
| free | 查看内存的使用情况 |
| top | 监控每个进程的内存使用情况 |
| vmstat | 虚拟内存统计信息 |
| sar -r | 查看内存 |
| sar | 查看CPU过去或未来时点CPU利用率 |
| pidstat | 查看每个进程的内存使用情况 |
#### free
free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。
Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还可以被应用程序使用的物理内存大小。
常用命令:
> free
>
> free -g 以GB显示
>
> free -m 以MB显示
>
> free -h 自动转换展示
>
> free -h -s 3 有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数
所以从应用程序的角度来说,**available = free + buffer + cache**
可用内存=系统free memory+buffers+cached。
#### top
请参考上面top的详解
#### vmstat
请参考上面vmstat的详解
#### sar
sar -r #查看内存使用情况
详解:
kbmemfree 空闲的物理内存大小
kbmemused 使用中的物理内存大小
%memused 物理内存使用率
kbbuffers 内核中作为缓冲区使用的物理内存大小kbbuffers和kbcached:这两个值就是free命令中的buffer 和cache.
kbcached 缓存的文件大小
kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存 +Swap分区
commt 这个值是kbcommit与内存总量物理内存+swap分区的一个百分比的值
#### pidstat
pidstat -r 查看内存使用情况 pidstat将显示各活动进程的内存使用统计
PID进程标识符
Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
VSZ虚拟地址大小虚拟内存的使用KB
RSS常驻集合大小非交换区五里内存使用KB
Commandtask命令名
### 磁盘IO
磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作比如转轴、寻轨等。访问硬盘和访问内存之间的速度差别是以数量级来计算的就像1天和1分钟的差别一样。要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。
在理解磁盘IO之前同样我们需要理解一些概念例如
- 文件系统
- VFS
- 文件系统缓存
- 页缓存page cache
- 缓冲区高速缓存buffer cache
- 目录缓存
- inode
- inode缓存
- noop调用策略
#### 分析工具
| 工具 | 描述 |
| ------- | ---------------------------- |
| iostat | 磁盘详细统计信息 |
| iotop | 按进程查看磁盘IO统计信息 |
| pidstat | 查看每个进程的磁盘IO使用情况 |
#### iostat
iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况同时也会汇报出CPU使用情况
<img src="Linux_performance\iostat.png" alt="image-20200604203027136" style="zoom:55%;" />
CPU属性
%userCPU处在用户模式下的时间百分比。
%niceCPU处在带NICE值的用户模式下的时间百分比。
%systemCPU处在系统模式下的时间百分比。
%iowaitCPU等待输入输出完成时间的百分比。
%steal管理程序维护另一个虚拟处理器时虚拟CPU的无意识等待时间百分比。
%idleCPU空闲时间百分比。
备注:
如果%iowait的值过高表示硬盘存在I/O瓶颈
如果%idle值高表示CPU较空闲
如果%idle值高但系统响应慢时可能是CPU等待分配内存应加大内存容量。
如果%idle值持续低于10表明CPU处理能力相对较低系统中最需要解决的资源是CPU。
Device属性
tps该设备每秒的传输次数
kB_read/s每秒从设备drive expressed读取的数据量
kB_wrtn/s每秒向设备drive expressed写入的数据量
kB_read 读取的总数据量;
kB_wrtn写入的总数量数据量
常用命令:
iostat 2 3 每隔2秒刷新显示且显示3次
iostat -m 以M为单位显示所有信息
查看设备使用率(%util、响应时间await
iostat -d -x -k 1 1
#### iotop
在一般运维工作中经常会遇到这么一个场景服务器的IO负载很高iostat中的util但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题。
如果你想检查那个进程实际在做 I/O那么运行 `iotop` 命令加上 `-o` 或者 `--only` 参数。
iotop --only
#### pidstat
显示各个进程的IO使用情况
pidstat -d
报告IO统计显示以下信息
- PID进程id
- kB_rd/s每秒从磁盘读取的KB
- kB_wr/s每秒写入磁盘KB
- kB_ccwr/s任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
- COMMAND:task的命令名
### 网络
#### 分析工具
| ping | 测试网络的连通性 |
| -------- | ---------------------------- |
| netstat | 检验本机各端口的网络连接情况 |
| hostname | 查看主机和域名 |
#### ping
常用命令参数:
-d 使用Socket的SO_DEBUG功能。
-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数指定发送的数据字节数预设值是56加上8字节的ICMP头一共是64ICMP数据字节。
-t 存活数值设置存活数值TTL的大小。
> ping -b 192.168.120.1 --ping网关
>
> ping -c 10 192.168.120.206 --ping指定次数
>
> ping -c 10 -i 0.5 192.168.120.206 --时间间隔和次数限制的ping
#### netstat
netstat命令是一个监控TCP/IP网络的非常有用的工具它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
netstat [选项]
```
-a或--all显示所有连线中的Socket
-a (all) 显示所有选项默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间执行该netstat命令。
```
常用命令:
列出所有端口情况
```
netstat -a # 列出所有端口
netstat -at # 列出所有TCP端口
netstat -au # 列出所有UDP端口
```
列出所有处于监听状态的 Sockets
```
netstat -l # 只显示监听端口
netstat -lt # 显示监听TCP端口
netstat -lu # 显示监听UDP端口
netstat -lx # 显示监听UNIX端口
```
显示每个协议的统计信息
```
netstat -s # 显示所有端口的统计信息
netstat -st # 显示所有TCP的统计信息
netstat -su # 显示所有UDP的统计信息
```
显示 PID 和进程名称
```
netstat -p
```
显示网络统计信息
```
netstat -s
```
统计机器中网络连接各个状态个数
```
netstat` `-an | ``awk` `'/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]} '
```
**补充netstat网络状态详解**
一个正常的TCP连接都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手
<img src="Linux_performance\tcpconn.png" alt="在这里插入图片描述" style="zoom:40%;" />
**TCP的连接释放**
<img src="Linux_performance\tcpclose.png" alt="在这里插入图片描述" style="zoom:80%;" />
```
LISTEN侦听来自远方的TCP端口的连接请求
SYN-SENT再发送连接请求后等待匹配的连接请求如果有大量这样的状态包检查是否中招了
SYN-RECEIVED再收到和发送一个连接请求后等待对方对连接请求的确认如有大量此状态估计被flood攻击了
ESTABLISHED代表一个打开的连接
FIN-WAIT-1等待远程TCP连接中断请求或先前的连接中断请求的确认
FIN-WAIT-2从远程TCP等待连接中断请求
CLOSE-WAIT等待从本地用户发来的连接中断请求
CLOSING等待远程TCP对连接中断的确认
LAST-ACK等待原来的发向远程TCP的连接中断请求的确认不是什么好东西此项出现检查是否被攻击
TIME-WAIT等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED没有任何连接状态
```
------
本文参考的文章: https://rdc.hundsun.com/portal/article/731.html?ref=myread