当前位置: 首页 > news >正文

磁盘io查看命令iostat与网络连接查看命令netstat

1. iostat的使用场景

首先iostat命令隶属于sysstat软件包。iostat专门用来查看主机上每个磁盘设备的io情况,包括像每秒的读写数据情况,磁盘平均io时间,设备io繁忙情况等等。

1.1 iostat的普通输出解释

首先是主机的架构,主机名,时间日期,cpu的架构和核数。

第二行是cpu的使用分配

字段中文含义单位经验阈值
%user用户态 CPU%
%nicenice 调度的用户态 CPU%
%system内核态 CPU%
%iowaitCPU 空闲且等 I/O%>20 % 关注
%steal虚拟化“偷”走的 CPU%>5 % 关注
%idle真正空闲%

第三行是关于磁盘io的简单情况介绍

字段含义单位
Device设备(或分区)名称,如 sda、nvme0n1
tps每秒向该设备发起的 I/O 请求次数(合并后)次/秒
kB_read/s每秒从设备读取的数据量KB/秒
kB_wrtn/s每秒向设备写入的数据量KB/秒
kB_dscd/s每秒向设备 丢弃/trim 的数据量KB/秒
kB_read从开机到当前累计读取总量KB
kB_wrtn从开机到当前累计写入总量KB
kB_dscd从开机到当前累计丢弃总量KB

1.2 iostat的扩展输出解释

查看扩展输出时输入命令 iostat -x,主要用来查看磁盘io的核心指标。

首先指出的是,iostat的数据全部来源于内核数据/proc/diskstats文件

字段中文含义单位正常阈值/建议排查要点
r/s每秒 读 I/O 请求 次数次/s读密集型业务高值正常
w/s每秒 写 I/O 请求 次数次/s写密集型业务高值正常
rkB/s每秒  数据量KB/s观察业务峰谷
wkB/s每秒  数据量KB/s同上
rrqm/s(rqm为request merge简称)每秒 合并读请求 次数次/s越大越好合并率高 → 减少寻道
wrqm/s每秒 合并写请求 次数次/s越大越好同上
r_await读请求平均等待时间(排队+服务)ms<10 ms(SSD)<20 ms(HDD)高值 → 磁盘瓶颈
w_await写请求平均等待时间(排队+服务)ms同上同上
aqu-sz平均队列长度<1 轻载,>5 重载排队严重需扩容/优化
rareq-sz读请求 平均块大小KB>64 KB 顺序 I/O小块随机需优化
wareq-sz写请求 平均块大小KB同上同上
svctm已废弃! 设备服务时间ms忽略内核不再提供准确值
%util设备忙碌百分比%<70 % 安全,>80 % 瓶颈100 % ≠ 饱和需结合队列

平均队列长度(aqu-sz)就是 “采样周期内,设备队列中 等待 + 正在处理 的 I/O 请求数量的平均值”。它直接告诉你 磁盘有多“堵车”

平均请求块大小req-sz(Average Request Size)
= 在 一次采样周期内所有读/写 I/O 请求的数据量总和 ÷ 请求次数总和
结果通常用 “扇区数”“KB” 表示,直观反映 每次 I/O 请求的平均数据块大小

平均等待时间await(average wait)

=在一次采样周期内,所有读写io请求的平均处理时间(包括排队等待和io时间)

磁盘繁忙程度util

=在一次采样周期内,有磁盘io的时间/采样周期时间,表示了磁盘的繁忙程度。

iostat 的 “采样时间” 并不是写死在代码里的常量,而是由你 在命令行显式指定 的:

  • 不指定任何时间参数

    iostat

    → 只输出 一次 从系统启动到现在的 累计平均值,没有周期性采样 。

  • 指定 interval

    iostat [可选参数] <interval> [count]
    • <interval> 单位为 ,表示两次采样之间的间隔;

    • [count] 表示一共采多少次;缺省 count 时无限循环

事例如下:

iostat -dk 2 5   # 每 2 秒采样一次,共采 5 次
iostat -x 1      # 每 1 秒采样一次,无限循环直到 Ctrl-C

2.  netstat的使用

netstat 的核心功能一句话概括:
“把操作系统里所有网络相关的状态、端口、路由、接口和进程信息一次性打印出来”

2.1 netstat输出字段的意义

列名一句话说明
Proto协议:TCP 还是 UDP。
Recv-Q本地接收队列里 还没被应用读走 的字节数。
Send-Q本地发送队列里 还没被对端确认 的字节数。
Local Address本机 IP:端口。
Foreign Address远端 IP:端口(监听端口显示为 0.0.0.0:* 或 :::*)。
State连接状态,TCP 常见:LISTEN(监听)、ESTABLISHED(已连接)、TIME_WAIT(等待关闭)等。

还有常用的参数如下表

参数记忆口诀作用
-tTCP只看 TCP
-uUDP只看 UDP
-nNumeric不解析域名/端口,直接显示数字
-lListen只看监听的端口
-pPID显示进程号/进程名
-aAll既看监听也看已建立连接
-rRoute打印路由表(等同 ip route
-iInterface显示网口统计(流量/丢包)
-sStatistics打印各协议(TCP/UDP/ICMP)累计统计
-cContinuous每秒刷新一次(实时 top 效果)

2.2 netstat的几个使用场景

1️⃣ 看谁在监听什么端口(排查端口冲突)
netstat -tunlp        # Linux
netstat -ano | findstr LISTENING   # Windows
  • -t 只列 TCP;-u 只列 UDP;-n 用数字地址;-l 只列监听;-p 带进程 PID。

为什么pid后面显示为-

你在使用 netstat -tunlp 时看到某些连接的 PID 显示为 -,这通常是因为当前用户没有足够的权限去查看该 socket 的进程信息。

原因详解:

  • netstat -p 需要读取 /proc/net/tcp/proc/net/udp 等内核接口,并进一步通过 inode 去 /proc/[pid]/fd/ 中查找对应的 socket。

  • 如果该 socket 是由另一个用户(尤其是 root)创建的,而你当前不是 root 用户,就无法访问其进程信息,PID 就会显示为 -

  • 这并不代表端口没有被占用,只是你无权查看是谁占用的。

2️⃣ 查端口被哪个进程占用
lsof -i:3306 || netstat -tunlp | grep 3306

lsof,没有就 netstat 过滤出 PID,再 kill -9 即可

lsofList Open Files)是 Linux 下非常强大的排查工具,它不仅可以查看哪些文件被哪些进程打开,还能用来查看端口被哪个进程占用,功能比 netstat 更直观、信息更全。

3️⃣ 统计当前各 TCP 状态数量(排查半开连接、SYN Flood)
netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(i in S) print i,S[i]}'

4️⃣ 实时刷新(像 top 一样)

netstat -c 1

5️⃣ 看路由表(快速确认网关)

netstat -rn           # Linux
netstat -r            # Windows

字段解释

  1. Destination
    目标网络或主机地址;0.0.0.0 表示“默认路由”。

  2. Gateway
    下一跳地址;0.0.0.0(或*)代表“直连网络”,无需网关,直接发到本地子网。

  3. Genmask / Netmask
    与 Destination 配合构成网络前缀。0.0.0.0 对应默认路由;255.255.255.0 对应 /24

  4. Flags(常用字母)

    • U Route is up

    • G 使用网关(Gateway 字段非 0)

    • H 目标是一个主机(host route),而非网络

    • D 由 ICMP 重定向或守护进程动态安装

    • M 被路由守护进程修改或重定向

    • ! 拒绝路由(reject/blackhole)

  5. MSS
    此路由上 TCP 连接的默认 最大报文段长度;通常为空或 0,表示使用路径 MTU 发现。

  6. Window
    早期用于 TCP 窗口大小 的静态值;现代内核已忽略,多为 0。

  7. irtt (initial RTT)
    初始往返时间估计值(毫秒),仅影响旧版路由度量;通常 0。

  8. Iface
    报文要从哪个接口发出去,如 eth0wlan0en0utun3 等。

6️⃣ 看接口流量统计(丢包、错误)

netstat -i            # Linux

字段全称含义
Iface / NameInterface接口名字,如 eth0wlan0en0utun3
MTUMaximum Transmission Unit该接口一次能发多少字节的 IP 载荷(不含二层头)。常见 1500(以太网)、9000(巨帧)。
RX-OK / Ipkts / PacketsReceived OK成功接收且无错误的帧数。
RX-ERR / IerrsReceived Errors接收时检测到的错误帧数(CRC、对齐、长度等)。
RX-DRP / IdropReceived Drops帧无错,但被内核主动丢弃(通常因缓冲区满)。
RX-OVR / OerrsRX Overruns硬件/驱动来不及把帧从网卡搬进内存而丢包。
TX-OK / OpktsTransmitted OK成功发送的帧数。
TX-ERR / OerrsTransmit Errors发送时产生的错误。
TX-DRPTransmit Drops发送路径被丢弃(队列满、策略丢包)。
TX-OVRTX Overruns内核来不及把帧送到网卡,硬件队列溢出。
Flg / FlagsInterface Flags接口状态位,见下方“Flag 字母表”。

8️⃣ 查看协议级统计(定位 TCP 重传、丢包)
netstat -s

输出如下:

tovwang@VM-123-217-tencentos ~]$ netstat -s
Ip:Forwarding: 22170479 total packets received1 with invalid addresses0 forwarded0 incoming packets discarded2170478 incoming packets delivered2188216 requests sent out96 dropped because of missing routeOutTransmits: 2188216
Icmp:418166 ICMP messages received0 input ICMP message failedICMP input histogram:echo requests: 418162echo replies: 4419676 ICMP messages sent0 ICMP messages failedOutRateLimitHost: 20ICMP output histogram:destination unreachable: 1509echo requests: 5echo replies: 418162
IcmpMsg:InType0: 4InType8: 418162OutType0: 418162OutType3: 1509OutType8: 5
Tcp:221352 active connection openings6 passive connection openings0 failed connection attempts5748 connection resets received5 connections established1629477 segments received1655469 segments sent out627 segments retransmitted0 bad segments received5997 resets sent
Udp:115046 packets received1529 packets to unknown port received0 packet receive errors116681 packets sent0 receive buffer errors0 send buffer errors
UdpLite:
TcpExt:2267 TCP sockets finished time wait in fast timer15393 delayed acks sentQuick ack mode was activated 282 times31854 packet headers predicted622920 acknowledgments not containing data payload received195993 predicted acknowledgmentsTCPSackRecovery: 157Detected reordering 106 times using SACK4 congestion windows fully recovered without slow startTCPDSACKUndo: 241 congestion windows recovered without slow start after partial ackTCPLostRetransmit: 33TCPSackFailures: 1169 fast retransmits6 retransmits in slow startTCPTimeouts: 66TCPLossProbes: 509TCPLossProbeRecovery: 200TCPSackRecoveryFail: 8TCPBacklogCoalesce: 8TCPDSACKOldSent: 282TCPDSACKRecv: 114TCPDSACKOfoRecv: 237 connections reset due to unexpected data5747 connections reset due to early user close1 connections aborted due to timeoutTCPDSACKIgnoredNoUndo: 11TCPSackMerged: 4TCPSackShiftFallback: 342TCPRcvCoalesce: 226743TCPOFOQueue: 182TCPOrigDataSent: 834124TCPDelivered: 1055180TcpTimeoutRehash: 65TcpDuplicateDataRehash: 19TCPDSACKRecvSegs: 117
IpExt:InMcastPkts: 6179InOctets: 211864985OutOctets: 380262294InMcastOctets: 222444InNoECTPkts: 2196962
MPTcpExt:

netstat -s 会把 IP、ICMP、TCP、UDP 四大协议(以及 IPv6 对应版本)的 内核累计统计 全部打印出来,主要分成 “计数器”“错误/异常” 两大类,可直接用来判断 丢包、重传、队列溢出 等故障。下面给出 每个协议最常被关注的指标对应含义

① IP 层(网络层)
关键词含义
total packets received系统启动以来收到的 IP 包总数
forwarded被本机转发的包数(>0 说明本机在做路由器)
incoming packets discarded因无路由/内存不足等被丢弃的包
incoming packets delivered真正交到上层协议的包
dropped because of missing route路由缺失导致丢包

② ICMP 层
关键词含义
ICMP messages received/sent收/发 ICMP 报文总数
ICMP input histogram分类计数:目的不可达、超时、重定向…
InCsumErrors校验和错误 → 可能线路故障或攻击

③ TCP 层(排查连接质量最常用)
关键词含义
Active opens / Passive opens主动/被动连接建立次数
segments retransmitted重传段数 —— 高值说明网络抖动或拥塞
retransmit timeouts超时重传次数
listen queue overflows监听队列溢出 → 应用 accept() 太慢
failed connection attempts三次握手失败次数
packets pruned from receive queue因队列满被丢弃的 TCP 数据

④ UDP 层
关键词含义
InDatagrams / OutDatagrams收/发 UDP 数据报总数
RcvbufErrors / SndbufErrors接收/发送缓存满导致丢包
NoPorts目的端口未开放 的 ICMP 端口不可达

实战示例:快速定位问题

# 1) 查重传是否过多
netstat -s | grep -E 'segments retransmitted|retransmit timeouts'# 2) 查监听队列是否溢出
netstat -s | grep 'listen queue overflow'# 3) 查 UDP 丢包
netstat -su | grep -E 'RcvbufErrors|SndbufErrors'
http://www.xdnf.cn/news/1211941.html

相关文章:

  • FFmpeg,如何插入SEI自定义数据
  • MidJourney精选图集与提示词生成器:AI创意灵感与高效提示词工具
  • 无监督MVSNet系列网络概述
  • 高效管理Hosts文件的终极工具
  • 【Qt开发】信号与槽(三)-> 自定义信号和槽
  • Python 程序设计讲义(46):组合数据类型——集合类型:集合间运算
  • 解决 Node.js 托管 React 静态资源的跨域问题
  • 力扣54:螺旋矩阵
  • 疯狂星期四文案网第24天运营日记
  • 永磁同步电机FOC控制----电流采样的实现
  • 【Lambda】flatMap使用案例
  • 字节跳动“扣子”(Coze)开源:AI智能体生态的技术革命
  • 从结构到交互:HTML5进阶开发全解析——语义化标签、Canvas绘图与表单设计实战
  • 微软OpenAI展开深入谈判
  • DIV 指令概述
  • 视觉语言模型在视觉任务上的研究综述
  • HTML第一次作业
  • JavaWeb 进阶:Vue.js 与 Spring Boot 全栈开发实战(Java 开发者视角)
  • 【数据结构初阶】--二叉树(四)
  • Prometheus-1--什么是Prometheus?
  • Docker网络技术深度研究与实战手册
  • C++类中动态内存分配注意手册
  • 基于springboot的零食商城的设计与实现/零食销售系统的设计与实现
  • 每日学习笔记记录(分享更新版-凌乱)
  • LeetCode 11 - 盛最多水的容器
  • Vue.js 指令系统完全指南:深入理解 v- 指令
  • python的进程、线程、锁
  • DNS污染与劫持
  • Wndows Docker Desktop-Unexpected WSL error错误
  • 项目历程—生命数组游戏(两版本)