最近发现公司的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
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. shell脚本实现拷贝大文件显示百分比的代码分享
  2. Java Hour 13 集合基础
  3. thinkphp 模板调用数据
  4. CallableAndFuture
  5. iOS开发中关于nslog的几种流行做法小结
  6. poj 1269 Intersecting Lines
  7. Android布局优化之include、merge、ViewStub的使用
  8. UVa 1363 (数论 数列求和) Joseph's Problem
  9. 如何将Android默认的Camra程序导入到eclipse中
  10. Linux入门基础 #10:命令行文本处理工具
  11. redux中间件的原理——从懵逼到恍然大悟
  12. 安卓自定义日期控件(仿QQ,IOS7)续
  13. 微信小程序(基本知识点)
  14. jQuery-3.事件篇---事件对象的使用
  15. png8、16、24、32位的区别
  16. [项目实践] python文件路径引用的规则,记一次使用sys.path[0]的问题,及如何区分 ../与 ./的使用场景
  17. 我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
  18. ThinkPHP3自动加载公共函数文件
  19. 12_python_生成器
  20. 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装

热门文章

  1. 在Debug中使用断点调试程序
  2. 给.sh文件添加可执行权限
  3. 【转】 Pro Android学习笔记(六十):Preferences(4):MultiSelect List Preference
  4. PG degraded实验
  5. popup的简单应用举例
  6. KickStart安装CentOS,同时安装和配置hadoop
  7. ubuntu上runsv/runit小记
  8. Python + winpcap抓包和发包
  9. eos命令
  10. nginx manager