记一次Time-Wait导致的问题
去年(2014年)公司决定服务框架改用Finagle(后续文章详细介绍),but 公司业务系统大部分是C#写的,然后 finagle只提供了 scala/java 的Client 于是 只能自己动手丰衣足食了,项目中使用了 zookpeerClient+ThriftClient 然后自己封装了 client loadBlance 部分 和 failover 部分.
使用场景:web服务器 (window iis 挂载 mvc4的网站,mvc4中使用封装的Client)访问 finagle服务器(linux集群)
现象:web服务大量的通讯端口time-wait 使用导致web用户无法访问(端口不够)
分析: time-wait 产生原因是 tcp短链接时 主动关闭的一方 ,然后看下封装的finagle client中的thrift client 底层使用tcpclient 然后每次 都是 open close 导致整个问题。
解决:1:window服务器修改 time-wait 时间 but 不靠谱 (万一以后新部署的服务器忘了修改怎么办)
2: 修改client 改后pool 模式 正好 最近阅读 redis client 有感觉 https://github.com/ServiceStack/ServiceStack.Redis
补充:根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务. TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证
补充2:linux服务器 也会存在问题,很多人通过修改 核心参数解决 but 也会引发其他问题。 连接:http://blog.csdn.net/dog250/article/details/13760985
补充3: 开起 keep-alive 解决 nginx time-wait 问题 http://www.cnblogs.com/QLeelulu/p/3601499.html
写在最后:1年前的事 最近才找到原因。而且已经从公司离职了惭愧啊。
记一次Time-Wait导致的问题的更多相关文章
- 记一次redis挂机导致的服务雪崩事故~不对,是故事
		
事故时常有,最近特别多!但每次事故总会有人出来背锅!如果不是自己的锅,解决了对自己是一种成长,如果是自己的锅,恐怕锅大了,就得走人了,哈哈哈... 这不,最近又出了一个锅:从周五开始,每天到11点就不 ...
 - 记一次网络原因导致的mysql连接中断问题(druid)
		
date: 2018-04-19 21:00 tag: java,mysql,exception,mat,调试,jvm 工具: gceasy.io, MAT 线上系统出现一个诡异的bug,通过heap ...
 - 记因内核版本错误导致U盘不能识别的问题解决
		
U盘插上电脑,发现没有自动挂载.然后运行sudo fdisk -l一看,发现并没有U盘所对应的设备,也就是U盘不能识别了!以前从没在Linux上遇到这种问题,通过查资料得知,要识别U盘,需要装载usb ...
 - 记一次Laravel定时任务导致日志没有写入权限的坑
		
问题:用laravel开发定时任务时,发生了日志没有写入权限导致项目打不开的问题 原因:linux的添加定时任务时默认是当前登录用户,我定时任务会生成日志 crontab: kernel: 生成日志的 ...
 - 记一个bootstrap定制container导致页面X轴出现横向滚动条的坑
		
壹 ❀ 引 在bootstrap定制时,因为UI给的图纸的页面主体部分宽度为1200px,所以我将container容器宽度从默认的1170px改成了1200px,随后在页面缩小的调试过程中发现了页 ...
 - 记一次JAVA进程导致Kubernetes节点CPU飙高的排查与解决
		
一.发现问题 在一次系统上线后,我们发现某几个节点在长时间运行后会出现CPU持续飙升的问题,导致的结果就是Kubernetes集群的这个节点会把所在的Pod进行驱逐(调度):如果调度到同样问题的节点上 ...
 - 记一次数据库主从导致严重的bug解决过程
		
1.事情起始: 我们每个月要给商家进行出账,所以有定时任务去跑商家的订单和售后进行出账,这个功能已经上线很久了,代码执行多次都没问题,突然有一天,产品找我说出现bug了: 这时,去生产库查询重复的订单 ...
 - 记一次zabbix-server故障恢复导致的事故  zabbix-server.log -- One child process died
		
前言 zabbix-server昨天出了个问题,不停的重启.昨天摆弄到晚上也不搞清楚原因,按照网上说的各种操作,各种CacheSize.TimeOut.StartPollers都改了,还有什么Incl ...
 - 记一次异步处理导致Jetty Request对象泄漏
		
最近排查一个bug,发现了一系列有意思的东西,对「自定义线程池」.「Jetty线程模型」都有了一些新的认识. 本文预计阅读时间10分钟,包括: 问题表现 常见原因筛查 根因与源码分析 最佳实践 一些小 ...
 - 记一次msyql导入导致的问题
		
公司有个项目要导入150M大小的sql文件,但是导入时报错,去网上找答案,很多人说是因为保留字什么什么的,所以就按照sql文件里面的mysql版本又去下载了一份mysql5.6安装好,但是登陆不了,又 ...
 
随机推荐
- 【Leetcode】Reorder List  JAVA
			
一.题目描述 Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must ...
 - jQuery插件开发的模式和结构
			
jQuery插件开发 一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法:另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通 ...
 - Raspberry Pi3 ~ 配置网络
			
Rpi3 有两个网卡 一个无线wlan 一个有线 eth0 无线的只需要在右上角的那个配置里面添加就行 有线的需要设置下静态IP.dns.等 在raspbain图形化界面里面 设置 Network P ...
 - 使用LabVIEW如何生成应用程序(exe)和安装程序(installer)
			
主要软件: LabVIEW Development Systems>>LabVIEW Professional Development System主要软件版本: 2012主要软件 ...
 - jQuery选择器之全面总结
			
选择器是jQuery的根基,在jQuery中,对事件处理,遍历DOM和Ajax操作都依赖于选择器.如果能熟练的使用选择器,不仅能简化代码,而且可以达到事半功倍的效果. jQuery中的选择器完全继承了 ...
 - saltstack配置安装的一些关键步骤及安装时各种报错的分析
			
以下其他仅做参考,官方网址才是安装重点:http://docs.saltstack.cn/topics/installation/rhel.html 与安装相关的一些文档或资料: 一.linux服务器 ...
 - IoC(控制反转)
			
在传统的编程中,我们通过内部代码来控制组件之间的关系,但是这种实现方式,容易造成组件之间的高耦合.IoC能够很好地解决这个问题,它将组件间的关系从程序内部上提到外部容器来管理.IoC的核心目标是通过简 ...
 - html --- VML --- javascript --- 旋转矩形
			
矢量标记语言 --- Vector Markup Language 运行它的代码需要打开IE的兼容性视图 如有疑问请参考:http://msdn.microsoft.com/en-us/library ...
 - git初步使用
			
git初步使用 主要目的:使用代码控制工具,练习使用git 1.创建新项目 网址如下: https://github.com/kellyseeme?tab=repositories 注意每个人使用的名 ...
 - C++11 多线程
			
C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用 ...