排查网络故障思路总结

今日看了一篇文章, 感受写的不错, 主要是讲的服务间调用超时的故障排查经历.linux

由于这中间涉及不少系统命令的一些使用, 延伸出一些知识点, 如下为简单的记录:bash

1. 问题现象

每次一发版致使服务A调用B服务超时, B没有任何请求记录日志, 初次定位到为网络问题cookie

2. 分析服务A网络

使用 netstat -anp 查看网络状况链接正常网络

netstat -anp命令简单说明:
-a,显示全部
-n,不用别名显示,只用数字显示
-p,显示进程号和进程名

LISTEN 表示正在监听
ESTABLISHED 表示已链接

复制代码

上面是当前具体的状况, 若是查看历史统计状况可使用 netstat -sless

能够重点关注统计数字展现异常socket

3. 分析服务B

上面分析的服务A. 看着很正常, 分析服务B看一下。tcp

服务B使用 dmesg 查看发现这条信息性能

possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
复制代码

以前咱们文章分析过, 这个报警明显syn_flood攻击.ui

使用 netstat -s查看 在TpcExt 一样发现了异常数据spa

TcpExt:
	...
	1607 times the listen queue of a socket overflowed
	...
复制代码

最终文中判定缘由为服务B tcp_backlog 溢出, 机器backlog设置太小

SYN queue队列长度配置 
/proc/sys/net/ipv4/tcp_max_syn_backlog

Accept queue(ESTABLISHED)队列长度配置
/proc/sys/net/core/somaxconn

tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半链接上限;
somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成链接上限。
复制代码

在linux2.2后 SYN_RECEIVED队列的大小由proc/sys/net/ipv4/tcp_max_syn_backlog系统参数指定

ESTABLISHED队列由backlog和/proc/sys/net/core/somaxconn中较小的指定。

dmesg 命令用法

dmesg | tail

这里展现的是最近 10 条系统消息日志,若是系统消息没有就不会展现。
主要是看因为性能问题致使的错误。
例如包含了杀死 OOM 问题的进程,丢弃 TCP 请求的问题。
复制代码

dmesg用来显示内核环缓冲区(kernel-ring buffer)内容,内核将各类消息存放在这里。在系统引导时,内核将与硬件和模块初始化相关的信息填到这个缓冲区中。内核环缓冲区中的消息对于诊断系统问题 一般很是有用。在运行dmesg时,它显示大量信息。一般经过less或grep使用管道查看dmesg的输出,这样能够更容易找到待查信息

原文地址: my.oschina.net/alchemystar…