linux上TCP connection timeout的原因查找
linux上TCP connection timeout的原因查找
好久没有写文章了, 今天解决了一个网络连接超时的问题, 记录以备查看。
最近在线上nginx经常出现输出connection timeout的日志,如下格式:
2016/03/17 15:33:01 [error] 32356#0: *102974264722 no live upstreams while connecting to upstream, client: 123.151.42.*, server: localhost, request: "POST /* HTTP/1.1", upstream: "http://geo_for_gdtbid/gdtbid", host: "*.istreamsche.com"
很明显就是nginx在连接服务器时,出现了超时。一般连接超时是三次握手没有, 也就是nginx发送syn包, 服务器因为一些原因没有回复ack, 导致nginx连接超时输出日志。
server为什么没有响应ack呢, 我们知道整个链接过程不需要应用程序的参与, 应用程序只需要在连接建立后,accept请求就ok。 那么可以猜测可能是网络或系统的部分参数导致。
第一个原因,查看系统的最大打开文件数目, 此限制可能导致分配socket失败, 查看系统的允许最大文件数目, 远大于系统目前在用的socket数目。 继续网络的配置。
首先查看系统的backlog, backlog为系统的listen队列最大长度 = 接受syn队列长度 + 连接成功没有accept队列长度。
- cat /proc/sys/net/ipv4/tcp_max_syn_backlog
输出8192, 服务器每秒并发最大在12000左右,每个链接的生命周期平均在100ms以内, 线上不可能backlog queue不足。
继续查看: 使用命令直接查看服务器端口的队列。
- ss -lt
看到Send-Q在服务端口是20 ,原来在服务器端启动listen 的时候设置了20的backlog;
修改listen的参数为2048, 在次查看
- ss -lt
看到Send-Q在服务端口是128, 并不是2048, 其实修改为128的队列长度,此时nginx已经没有在出现connect timeout的错误。
通过详细分析查找, 发现原来内核参数也受somaxconn控制
查看
- cat /proc/sys/net/core/somaxconn
发现值是128, OK 原因貌似找到了,赶快修改/etc/sysctl.conf 添加:
- net.core.somaxconn = 8192
sysctl -f /etc/sysctl.conf 重新加载一下。
再次查看:
ss -lt
send-q 变为2048, 修改成功。
linux上TCP connection timeout的原因查找的更多相关文章
- Linux上TCP的几个内核参数调优
		Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ... 
- 从linux源码看socket(tcp)的timeout
		从linux源码看socket(tcp)的timeout 前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌.在经历了数次物理机宕机之后,笔者详细的考察了在网络编程(tcp ... 
- [转] TCP/IP原理、基础以及在Linux上的实现
		导言:本篇作为理论基础,将向我们讲述TCP/IP的基本原理以及重要的协议细节,并在此基础上介绍了TCP/IP在LINUX上的实现. OSI参考模型及TCP/IP参考模型 OSI模型(open syst ... 
- .net core linux环境下 System.Data.SqlClient.SqlException: Connection Timeout Expired.
		最近遇到了一个很奇葩的问题,我编写了一个.net core程序读取多个数据库数据源,进行数据同步处理.该程序在windows环境下运行完全正常,但在linux环境下运行报异常,提示 System.Da ... 
- Linux上的文件查找工具之locate与find
		前言 Linux上提供了两款工具用于查找文件,一款是locate,另一款是find. locate的特点是根据已生成的数据库查找,速度较快,但是查找的是快照数据,不准确. 因此在日常使用中,为了准确性 ... 
- 使用.NetCore在Linux上写TCP listen 重启后无法绑定地址
		拥抱.net core的过程中, 将公司的一套java项目改成了.net core 2.0版的. 里面的tcp服务被我用msdn的SocketAsyncEventArgs方式重写了, 然而在测试的过程 ... 
- C++的标准库函数默认都是操作字节,而不是字符,非常痛苦,所以引入了u16string和u32string(Linux上的wchar_t是32位的原因,utf16对unicode的支持是有缺陷的)good
		时至今日,字符串使用unicode已经是不需要理由的常识,但对一些有着悠久历史的编程语言来说,这仍然是个头痛的问题.如果抛开第三方库的支持,C++其实并不能实际有效地支持unicode,即使是utf8 ... 
- 使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序
		本文于2019年04月10日将标题「CentOS7 部署 ASP.NET Core应用程序」修改为「使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序」. 环境准备 VMwa ... 
- 不要在linux上启用net.ipv4.tcp_tw_recycle参数
		不要在linux上启用net.ipv4.tcp_tw_recycle参数 发布于 2015/07/27 莿鸟栖草堂 本文为翻译英文BLOG<Coping with the TCP TIME-WA ... 
随机推荐
- T-SQL基础 (子查询,连接查询,交叉查询,事务|| 笔记0807)
			一: A.子查询: 1.select 字段名 from table where 字段名=(select 字段名 from table 条件) //只能做1个匹配 2.select 字段名 from ... 
- 关于onSaveInstanceState的javadoc的渣渣翻译
			/** * Called to retrieve per-instance state from an activity before being * killed so that the state ... 
- Service解析
			Service解析: 运行service有如下两种方式: StartService() 访问者退出,service仍然运行: BindService() 访问者与service绑定,访问者退出,ser ... 
- Golang在视频直播平台的高性能实践
			http://toutiao.com/i6256894054273909249/ 熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们几十个服务中的一部分,由于并发量 ... 
- Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用
			转载自海子:http://www.cnblogs.com/dolphin0520/p/3803432.html Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封 ... 
- swift-01-简述swift与OC区别
			swift语言 Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1].在设计Swift时.就有意和Objective-C共存,Objective-C是A ... 
- Visual Studio2013使用Microsoft Office Document Imaging(MODI)的方法
			若要安装和 Microsoft Office 2013 一同使用的 Microsoft Office Document Imaging (MODI),请选择以下方法之一: 方法 1:通过安装 Shar ... 
- javascript Object的长度
			1.示例 var obj = { a:"hello", b:"world", c:"hehe" } var key = 0; for(var ... 
- 基于SSM框架的简易的分页功能——包含maven项目的搭建
			新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ... 
- Mysql DOC阅读笔记
			Mysql DOC阅读笔记 转自我的Github Speed of SELECT Statements 合理利用索引 隔离调试查询中花费高的部分,例如函数调用是在结果集中的行执行还是全表中的行执行 最 ... 
