如何判断是否丢掉用户请求(转载)

简介: 原文地址:http://blog.sina.com.cn/s/blog_5374d6e30101lex3.html         有一个同事找我,他怀疑服务器的http连接过多,造成一些请求丢失,从而丢失了日志,但不知道怎么看,让帮忙确认一下。

原文地址: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则不会输出对应的行。

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原文地址:http://blog.chinaunix.net/uid-18963137-id-3427213.html

 

三次握手相关的几个数据 

 

 

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

    查看网络的连接状态常用的文件是/proc/net/snmp及/proc/net/netstat文件,当你打开这两个文件时,你会出现格式比较乱,因为它里面包含的数据比较多,我们一般用以下两个命令来查看相应的网络状态,其命令为:netstat -s和nstat -az

    这两个文件中包含的信息较多,这里只简单的写出了几个与三次握手相关的几个参数,并简单地分析了它的含义:

TcpAttemptFails:(连接尝试失败数)

1. 试图和一个不存在的套接口建立连接时,连接失败,而TcpAttemptFails同时会加1

2. 被动连接(SYN_SEND)等待第三次握手的ack应答信号超时或者为其它的错误应答时,连接将会失败,且同时TcpAttemptFails的值将加1

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

TcpExtListenDrops(监听队列连接丢弃数) 和TcpListenOverflows(监听队列连接溢出数)

1. 首先是查看现有的连接数是否大于设置的backlog,如果大于就丢弃,并相应的参数值加1。其中backlog是由程序和系统参数net.core.somaxconn共同设置,当backlog的值大于系统设置的net.core.somaxconn时则取net.core.somaxconn的值,否则取程序设置的backlog值。这种出错的方式也被记录在TcpListenOverflows中(其只记录了连接个数不足而产生溢出错误的次数!)。

2. 接收到连接的应答信号时,但它的源地址和目标不同,或者为空时,这个连接将被丢弃。而TcpListenDrops 值也会加1

3. 当连接没有问题时,系统将会分配必要的资源,而此时没有足够的资源时则会错,此时的连接也会被丢弃,同时TcpListenDrops 值也会加1

4. 最后在新建绑定端口的时候如果出现资源的不足时TcpListenDrops 值也会加1

SyncookiesFailed

net.ipv4.tcp_syncookies = 1开启时, SyncookiesFailed是通过tcp_v4_hnd_req调用子函数cookie_v4_check做一系列的合法性校验主要工作是在半连接队列中看是否存在当前的socket连接,如果存在则说明这个是错误的应答,其值加1

 

 

 

相关文章
|
Java 数据库 Maven
根据请求中接收到的主动协商头字段,目标资源没有用户代理可以接受的当前表示
今天使用ssm框架搭建了一个项目,测试一个插入的接口结果返回406,但是数据库插入成功了,报错406是因为返回的结果接口无法解析。
864 0
|
7月前
|
移动开发 小程序 JavaScript
mPaas 问题之参数收不到如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
|
7月前
|
前端开发 UED
面试官:【后端一次性返回10万条数据怎么处理/后端发送大数据量的数据如何处理】
面试官:【后端一次性返回10万条数据怎么处理/后端发送大数据量的数据如何处理】
142 0
|
Cloud Native Go
如何处理面试拒绝:失败并不是终点
如何处理面试拒绝:失败并不是终点
87 0
|
定位技术
后端一次性返回几百万条数据怎样处理
后端一次性返回几百万条数据怎样处理
|
消息中间件 存储 网络协议
大厂都是如何处理重复消息的?
消息消费失败,很多框架会自动执行重试,而重试就产生了重复消息。 MQTT协议给出三种传递消息时能够提供的
283 0
|
JSON NoSQL 安全
优雅地处理重复请求(并发请求)
优雅地处理重复请求(并发请求)
优雅地处理重复请求(并发请求)
如何判断请求是否发送成功以及获取请求中的数据
如何判断请求是否发送成功以及获取请求中的数据
748 0
如何判断请求是否发送成功以及获取请求中的数据
|
XML 数据格式
模拟外线O口呼入时,看不到来电显示号码怎么处理?
模拟外线呼入时,看不到来电号码 1)将话机直接连接电话线,检查线路是否开通来电显示功能。若话机没有显示正确的号码,请与运营商联系。若号码正确,注意观察号码显示是在第一声振铃前还是在振铃一两声后。 2)进入“外线设置 > 模拟外线 > 高级”页面,查看来电检测是否开启(默认开启); 3)若开启,修改“系统配置 > 模拟外线 > 来电检测模式”,分别用振铃后、振铃前测试,直到与线路匹配。
|
小程序 数据库
小程序循环发起请求方案
小程序循环发起请求方案
295 0