首页/系统/Linux 内核与性能调优速查/发送缓冲写阻塞定位
本包目录(357 条)
sysctl 内核参数72 条CPU 与调度60 条内存与 OOM58 条磁盘与 IO32 条
网络栈调优98 条
性能分析工具37 条

发送缓冲写阻塞定位

应用 write/send 偶发卡住不返回, 常见原因是发送缓冲已满且对端读取慢; 用 ss -m 观察 socket 排队量与缓冲上限。

观察 socket 内存

观察 socket 内存
ss -m dst :8080
# skmem 括号内 r/t 为收发排队字节, rb/tb 为对应缓冲上限
阻塞式 socket缓冲满则挂起, 直到有空间
非阻塞 socket返回 EAGAIN, 由应用重试或排队
排查顺序: 先看对端接收速度与网络 RTT(ss -ti 的 cwnd/rtt), 再考虑应用侧发送节奏与缓冲设置。

易错点

  • 直接调大发送缓冲, 掩盖对端处理慢的问题并增加内存占用
  • 把偶发 EAGAIN 当成连接故障, 忽略重试逻辑本身是否有缺陷

数据来源与参考

  • man 7 socket
  • man ss
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌