最近发现公司的app在高峰期超时严重.用wifi网络一直超时,但qq等却正常.换成手机卡网络正常.

起初以为是DNS解析问题.

后来抓包,发现DNS解析正常,可以得到正确的A记录.

但tcp retransmission严重.

因为app内使用了友盟等第三方库,他们的DNS,tcp握手均正常.

而我们的app却tcp retransmission严重.

后来找到一篇文章,照着修改了服务器配置...超时少了.

下面是转发文章内容

内网有一台APP服务器,接口是通过Nginx发布的。手机通过无线登陆APP,有时候提示连接超时。

无线路由器和APP服务器,是通过内网交换机连接的。应该不会超时啊,可能是路由器问题。

然后换了好几个路由器,小米mini,华硕RT-AC87U,TP-LINK WVR1750G

咨询厂商,测试了一下,当时超时的时候,访问百度视频什么的是正常的。路由器没有问题,可能是服务器问题。因为服务器是pc机主机,配置比较差,后来换成DELL R620,还是同样的问题。

因为公司周围有30几个无线,2.4G传输速度是450M,可能是无线干扰问题。

最后买了一个Nighthawk X6 R8000,2.4G传输速度是600M,发现还是有超时。

网上搜索资料nginx超时问题,优化了一些参数,发现还是有超时。

手机安装(Ping & DNS)软件,版本是2.3,用TCP Ping持续测试dts.xx.com,

大约1~2分钟,提示connection timed out,超时会持续一分钟。出现超时的时候,手机登陆APP,就会提示连接超时。

然后超时的时候,在服务器抓包

[root@localhost ~]#tcpdump -i eth0 -s0 -w a.cap

发现无线路由器向服务器发送了SYN请求包,但是没有得到服务器回应。

出现TCP Retransmission(TCP 包重传)

因为服务器开启了tcp_tw_recycle(为了支持高并发)

tcp请求回收,如果开了这个,那在默认60s内同一个ip包过来是会被回收的

网络过来的数据包的时间肯定是小于这个请求时间的,那么服务器就会认为他是无效的连接,就会拒绝连接,所以才会出现TCP包重传。

所以才会出现上面的现象,超时持续一分钟。

后来我把tcp_tw_recycle关了

vi /etc/sysctl.conf

设置为0,表示关闭

net.ipv4.tcp_tw_reuse = 0

net.ipv4.tcp_tw_recycle = 0

加载配置

[root@localhost ~]#sysctl -p

最后再次用TCP Ping测试,测试20分钟,没有出现连接超时。

APP刷新数据,也没有出现超时。

哎,解决这个问题,之前都是靠瞎猜的。分析问题没有层层刨析,搞了这么长时间,才搞定。

路由器只提供数据转发功能,只要转发了,它的任务就完成了。

应该是服务器问题,然后抓包,为什么服务器没有回应?

为什么出现TCP Retransmission(TCP 包重传)?

这样问题就越来越接近真相了,就好解决了,就好像福尔摩斯一样。

后来发现系统日志出现

Jun 19 11:13:45 127.0.0.1TCP: time wait bucket table overflow

那就只能增加net.ipv4.tcp_max_tw_buckets的值

net.ipv4.tcp_max_tw_buckets = 100000

加载配置

[root@localhost ~]#sysctl -p

再次观察,就没有了。

http://www.51itong.net/nginx-app-12760.html
---------------------
作者:james_1010
来源:CSDN
原文:https://blog.csdn.net/james_1010/article/details/50387659
版权声明:本文为博主原创文章,转载请附上博文链接!

APP请求超时问题-ios超时-android超时的更多相关文章

  1. app测试中,ios和android的区别

    App测试中ios和Android的区别: 1. Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2. 多分辨率测试,Android端20多种,ios较少: 3. 手机操作系 ...

  2. System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    2017/8/15 20:55:21 [AgentPayQuery_205506102_1BBBB]系统异常:System.Data.Entity.Core.EntityException: The ...

  3. [bug]超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    引言 自己弄了一个小项目——日程管理系统,在初始化日期时,查询了数据库,每个日期就会查询一次数据库,就导致了这个问题. 问题 出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. Desc ...

  4. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  5. Livecoding.tv 现正举行iOS及Android App设计比赛

    近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...

  6. javascript开发 ios和android app的简单介绍

    先看几个名词解释: nodejs ionic,Cordova,phoneGap,anjularjs react-native,reactjs nodeJs 的介绍参见这里,写的很好http://www ...

  7. APP在iOS和Android的推送规则

    因为iOS和Android不同的规则,下边将iOS和Android能接收到通知的详细情 形进行说明(前提:APP已经在设备上安装并登录过):  iOS:                    APP未 ...

  8. Using Qt to build an Omi App for iOS (and Android)

    JUNE 6, 2014 / HHARTZ Working on projects where the technology is pre-determined, it's often difficu ...

  9. 利用React Native 从0到1 开发一款兼容IOS和android的APP(仿造京东)

    最近有一部电视剧叫做<微微一笑很傻逼>里面有个男猪脚,人们都叫他大神~我觉得吧~大神是相对的~所以~啥事都得谦虚! 好了 今天介绍的是如何从0到1利用React Native开发一款兼容I ...

随机推荐

  1. Oracle 12c 多租户配置和修改 CDB 和 PDB 参数

    1. 配置CDB 实例参数,影响CDB与所有 PDB为CDB配置例程参数相对于对于非CDB的数据库是变化不太.ALTER SYSTEM命令用于设置初始化参数,与使用ALTER DATABASE命令修改 ...

  2. 自定义type为file型input控件+该控件具有本地图片预览功能

    最近的一个项目需求是写一个type为filex型的input控件,这个控件: 第一,要自定义样式: 第二,要能直接在本地预览上传的图片: 第三,要能检测图片的尺寸是否符合要求. 故综合网上的资源写了下 ...

  3. [转] 更新Flash CS6发布设置的目标播放器版本

    目前Aodbe发布的最新版的Flash CS6,都不支持将Flash Player 11作为目标播放器版本发布.这个问题很容易解决,但涉及到的东西却比较多,我在这里将一一讲解.首先来个Setp by ...

  4. HDOJ1059(多重背包)

    1.解法一:多重背包 #include<iostream> #include<cstdio> using namespace std; #define MAX(a,b) (a& ...

  5. 使用svnadmin对VisualSVN进行项目迁移

    使用svnadmin对VisualSVN进行项目迁移 导出1> 启动命令行cmd2> 运行%VISUALSVN_SERVER%\bin\svnadmin dump PATH-TO-REPO ...

  6. ceph-deploy mon add 失败

    ceph-deploy mon add 失败 标签(空格分隔): ceph-deploy 运维 问题描述: 现有集群只有一个mon,需要通过ceph-deploy mon add添加两个mon.在ad ...

  7. Python-RabbitMQ消息队列实现rpc

    客户端通过发送命令来调用服务端的某些服务,服务端把结果再返回给客户端 这样使得RabbitMQ的消息发送端和接收端都能发送消息 返回结果的时候需要指定另一个队列 服务器端 # -*- coding:u ...

  8. HTTP 400 错误 编译器错误消息: CS0016

    问题:运行程序时提示http 400错误 解决方法: 去掉勾 尝试将网页发布到本地IIS上,发现出现以下错误: 编译器错误消息: CS0016 解决编译器错误消息: CS0016:方法如下: 一般都是 ...

  9. 解决PCL MLS : error LNK2019; error LNK2001 virtual MovingLeastSquares process performProcessing问题

    PCL 基于多项式拟合的法线估计.点云平滑和数据重采样 在使用Window VS2010为开发平台,学习PCL点云库的时候,学到曲面重建(Surface).在测试下面的程序的时候,遇到了问题. #in ...

  10. Pig FOREACH 嵌套循环

    Example: Nested Block Suppose we have relations A and B. Note that relation B contains an inner bag. ...