判断链路上数据包丢失情况
2017-08-01 14:46
295 查看
如何判断是否丢掉用户请求
转载地址:http://blog.sina.com.cn/s/blog_5374d6e30101lex3.html
有一个同事找我,他怀疑服务器的http连接过多,造成一些请求丢失,从而丢失了日志,但不知道怎么看,让帮忙确认一下。
下面是可能丢数据包的点:
1、交换机
上连和下连端口的流量跑满或链路有问题,有些数据包会被交换机丢掉,抓对应端口的丢包计数值就可以获得这方面的数据。当然,不会每次都丢建立连接的syn数据包,另外,客户端也重传数据包,所以这一块不一定会导致请求数据的丢失,但可以作为参考。
2、负载均衡设备
这个跟上面的交换机类似,但除了有出错的数据包方面的数据,还有出错的连接方面的数据。抓取方法呢,完全设备相关,不在这里说了。
3、操作系统处理不过来,丢弃数据
这里有两部分,一是网卡见操作系统处理不过来,丢数据包,可以读取下面的文件:
/proc/net/dev
每个网络接口一行统计数据,4列是接收出错的数据包数量,5列是接收不过来丢弃的数量。
第二部分是传统非NAPI接口实现的网卡驱动,每个cpu有一个队列,当在队列中缓存的数据包数量超过netdev_max_backlog(sysctl -w net.core.netdev_max_backlog可以修改)限制时,网卡驱动程序会丢掉数据包,这个见下面的文件:
/proc/net/softnet_stat
每个cpu有一行统计数据,第二列是对应cpu丢弃的数据包数量。
4、应用程序处理不过来,操作系统丢弃
内核中记录了两个计数器:ListenOverflows,ListenDrops
ListenOverflows:对应socket的listen queue已满的情况下,需要新增一个连接时的情况,一般是应用程序处理不过来的情况;
ListenDrops:包含上面的情况,也就是说当出现ListenOverflows时,它也会增加1;除此之外,当内存不够无法为新的连接分配socket相关的数据结构时,也会增加1,当然还有别的异常情况下会增加1。
对应的数据在下面的文件中:
/proc/net/netstat
21列是ListenOverflows值,22列是ListenDrops值。
用下面命令,可以直接显示这两个数:
cat /proc/net/netstat | awk '/TcpExt/ { print $21,$22 }'
如果是netstat命令,则看“times the listen queue of a socket overflowed”, “SYNs to LISTEN sockets ignored”对应行前面的数字。如果没有对应的行,则表明对应的数值为0。如果是0,netstat则不会输出对应的行。
相关文章推荐
- TCP ------ keep-alive - 判断TCP链路的连接情况
- access$表异常丢失的判断和修复
- 判断某个网址的响应情况
- “丢失更新” 两种情况分析!
- POJ 1039 Pipe 判断直线与线段相交(规范相交, 非规范相交),没有共线情况
- 遇到的问题(一):智能家居中WIFI模块设备在接收底层家具设备串口数据时由于断帧而出现的指令丢失的情况处理
- 在进制未知的情况下,通过一个等式来判断其进制
- 网络数据包收发流程(二):不配置NAPI的情况
- JS 端判断当前用户是否在某个SharePoint group (包含用户在AD组,然后将AD组加入到SP的组的情况)
- JavaScript 这类弱类型的语言,在判断相等方面很麻烦,明明不是一个东西,却相等了。这里通过示例展示 null、 undefined、 0、 false、 "" 的相等情况。 var arr
- Oracle主库归档丢失,备库日志有gap,在不重建备库的情况下,恢复备库
- android 判断网络状态情况
- oracle学习笔记之controlfile丢失的情况使数据库启动至open状态
- ASP.NET Session丢失问题解决方案总结及判断Session是否过期
- 五种情况会导致Session 丢失
- 如何判断TCP数据包是否发送成功
- 五种情况会导致Session 丢失
- 经典算法 | 给定n个矩形,判断这些矩形是否在不重合的情况下组成一个大矩形的算法
- windows Phone 7如何实现background的情况下不丢失数据
- BLE 配对后通信其中一方LTK丢失情况