今日看了一篇文章, 感受写的不错, 主要是讲的服务间调用超时的故障排查经历.linux
由于这中间涉及不少系统命令的一些使用, 延伸出一些知识点, 如下为简单的记录:bash
每次一发版致使服务A调用B服务超时, B没有任何请求记录日志, 初次定位到为网络问题markdown
使用 netstat -anp 查看网络状况链接正常cookie
netstat -anp命令简单说明: -a,显示全部 -n,不用别名显示,只用数字显示 -p,显示进程号和进程名 LISTEN 表示正在监听 ESTABLISHED 表示已链接 复制代码
上面是当前具体的状况, 若是查看历史统计状况能够使用 netstat -s网络
能够重点关注统计数字展现异常less
上面分析的服务A. 看着很正常, 分析服务B看一下。socket
服务B使用 dmesg 查看发现这条信息tcp
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攻击.oop
使用 netstat -s查看 在TpcExt 一样发现了异常数据性能
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 | tail
这里展现的是最近 10 条系统消息日志,若是系统消息没有就不会展现。
主要是看因为性能问题致使的错误。
例如包含了杀死 OOM 问题的进程,丢弃 TCP 请求的问题。
复制代码
dmesg用来显示内核环缓冲区(kernel-ring buffer)内容,内核将各类消息存放在这里。在系统引导时,内核将与硬件和模块初始化相关的信息填到这个缓冲区中。内核环缓冲区中的消息对于诊断系统问题 一般很是有用。在运行dmesg时,它显示大量信息。一般经过less或grep使用管道查看dmesg的输出,这样能够更容易找到待查信息