加载中…
个人资料
李小红
李小红
  • 博客等级:
  • 博客积分:0
  • 博客访问:146,616
  • 关注人气:100
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

如何判断是否丢掉用户请求

(2013-05-08 17:36:51)
标签:

listenoverflows

listendrops

分类: 技术

有一个同事找我,他怀疑服务器的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则不会输出对应的行。


0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有