`
wooyung
  • 浏览: 27052 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux和windows下TIME_WAIT过多的解决办法

 
阅读更多

如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器上,而且也会使后端的app服务器上有大量的TIME_WAIT。查阅TIME_WAIT资料,发现这个状态很多也没什么大问题,但可能因为它占用了系统过多的端口,导致后续的请求无法获取端口而造成障碍。虽然TIME_WAIT会造成一些问题,但是要完全枪毙掉它也是不正当的,虽然看起来这么做没什么错。

具体可看这篇文档:http://hi.baidu.com/tim_bi/blog/item/35b005d784ca91d5a044df1d.html所以目前看来最好的办法是让每个TIME_WAIT早点过期。在linux上可以这么配置:#让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse#让TIME_WAIT尽快回收,我也不知是多久,观察大概是一秒钟echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle很多文档都会建议两个参数都配置上,但是我发现只用修改tcp_tw_recycle就可以解决问题的了,TIME_WAIT重用TCP协议本身就是不建议打开的。不能重用端口可能会造成系统的某些服务无法启动,比如要重启一个系统监控的软件,它用了40000端口,而这个端口在软件重启过程中刚好被使用了,就可能会重启失败的。linux默认考虑到了这个问题,有这么个设定:#查看系统本地可用端口极限值cat /proc/sys/net/ipv4/ip_local_port_range

用这条命令会返回两个数字,默认是:32768 61000,说明这台机器本地能向外连接61000-32768=28232个连接,注意是本地向外连接,不是这台机器的所有连接,不会影响这台机器的80端口的对外连接数。但这个数字会影响到代理服务器(nginx)对app服务器的最大连接数,因为nginx对app是用的异步传输,所以这个环节的连接速度很快,所以堆积的连接就很少。假如nginx对app服务器之间的带宽出了问题或是app服务器有问题,那么可能使连接堆积起来,这时可以通过设定nginx的代理超时时间,来使连接尽快释放掉,一般来说极少能用到28232个连接。因为有软件使用了40000端口监听,常常出错的话,可以通过设定ip_local_port_range的最小值来解决:echo "40001 61000" > /proc/sys/net/ipv4/ip_local_port_range

但是这么做很显然把系统可用端口数减少了,这时可以把ip_local_port_range的最大值往上调,但是好习惯是使用不超过32768的端口来侦听服务,另外也不必要去修改ip_local_port_range数值成1024 65535之类的,意义不大。因为使用了nginx代理,在windows下也会造成大量TIME_WAIT,当然windows也可以调整:在注册表(regedit)的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters上添加一个DWORD类型的值TcpTimedWaitDelay,值就是秒数,即可。windows默认是重用TIME_WAIT,我现在还不知道怎么改成不重用的,本地端口也没查到是什么值,但这些都关系不大,都可以按系统默认运作。
参考:
1、http://www.educity.cn/rk/html/2009-06-02/88944.htm
2、http://www.cnblogs.com/shanyou/archive/2008/12/19/1358267.html
3、http://blog.sina.com.cn/s/blog_6155c9520100ef60.html

分享到:
评论

相关推荐

    大量TIME_WAIT状态的连接解决方法

    在Linux系统中,当服务器处理大量网络连接时,可能会遇到TIME_WAIT状态的连接过多导致的问题。TIME_WAIT是TCP连接的一个正常终止状态,但若数量过多则可能会影响到服务器性能。本文将详细介绍如何在Linux系统中优化...

    MySQL Tomcat Apache优化

    ##### 3.4 Apache服务器TIME_WAIT过多的解决办法 当Apache服务器面临大量TIME_WAIT状态的连接时,可能会导致新的连接请求被拒绝。解决这一问题的方法包括: - **调整TCP参数**:例如,通过设置`...

    TCP.rar_TCP 调试_tcp调试_tcp调试工具_visual c_调试工具

    4. **TCP疑难问题**:常见的TCP问题有TCP慢启动、TIME_WAIT状态过多、RST包的发送等。理解这些问题的原因及解决方法是调试的关键。 5. **TCP工具使用**:Visual C++是一种强大的C++编程环境,可以用于编写TCP客户端...

    windows下重启mysql的方法

    总结,重启MySQL在Windows系统中可以通过服务管理器或命令行工具实现,对于“Too many connections”错误,优化配置文件和合理管理应用程序连接是有效的解决办法。理解这些操作和概念对管理和维护MySQL数据库至关...

    面试必备TCP&UDP;区别

    在网络编程中,处理TIMEWAIT过多的问题可以优化系统性能。在Linux系统中,可以通过修改内核参数net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle为1来重用TIMEWAIT状态的连接,并快速回收TIMEWAIT状态的套接字。此外...

    掌握数据库生命线:深度配置MySQL的最大连接数

    在某些情况下,你可能还需要调整与最大连接数相关的其他系统变量,如`wait_timeout`和`interactive_timeout`,这些参数控制连接的超时时间: ```ini [mysqld] wait_timeout = 300 interactive_timeout = 300 ``` #...

    如何自动关闭空闲的sde连接

    这种情况下,如果系统中有大量类似的空闲连接,将可能导致资源消耗过多,进而影响到系统的整体性能和稳定性。为了避免这种情况的发生,可以采取措施自动关闭这些空闲连接,从而释放被占用的资源,为其他用户提供更好...

    Mysql训练营笔记(1).pdf

    通信协议方面,MySQL支持TCP/IP(最常见,用于大多数编程语言的连接)、Unix Socket(在Linux环境下,允许本地连接无需通过网络)、命名管道(Windows系统)和内存共享。客户端和服务器之间的通信是半双工的,即在...

    mysql的连接数据问题

    本篇文章将深入探讨MySQL的连接数据问题,旨在帮助用户理解和解决在数据库操作过程中遇到的连接问题。 一、MySQL连接方式 1. 命令行连接:通过终端或命令提示符输入`mysql -u username -p`,然后输入密码,可以直接...

    Oracle DBA日常巡检最佳实践

    - **方法**:使用操作系统提供的工具(如Windows的任务管理器或Linux的`ps aux | grep oracle`命令)来检查Oracle服务进程的状态。 **1.8 检查Oracle监听状态** - **目的**:确保监听器正常运行且能够接收客户端...

    Tomcat+Mysql高并发配置优化讲解

    - 修改`my.ini`(Windows)或`my.cnf`(Linux)文件,设置`max_connections`为12000,但通常建议不超过15000,以避免过多的并发连接导致资源耗尽。 - `max_user_connections`设置为0,表示不限制单个用户的最大...

    Java并发编程面试题(2022最新版)

    **如何在Windows和Linux上查找哪个线程CPU利用率最高** - **Windows:** 使用`wmic process where name='process_name.exe' get Caption,CommandLine,Processid /format:list` - **Linux:** 使用`top -b -n1 | ...

Global site tag (gtag.js) - Google Analytics