有的网站会在服务器运行一段时间后down掉,有不少缘由可能形成这种现象:好比tomcat堆和非堆内存设置不足,程序没能释放内存空间形成内存溢出,或者某些进程一直运行没能释放,形成cup资源大量消耗。 tomcat
但除了程序自己的缘由,还有多是客服端访问形成(固然这个客户端也包含如蜘蛛软件等搜索引擎),若是服务器和客户端创建的是长连接(能够用"netstat -a"命令查看网络访问信息),这就须要对http响应头的connection作必定的设置。 服务器
介绍以下: 网络
1. 解释一下:tcp
在http1.1中request和reponse header中都有可能出现一个connection头字段,此header的含义是当client和server通讯时对于长连接如何进行处理。 网站
在http1.1中,client和server都是默认对方支持长连接的, 若是client使用http1.1协议,但又不但愿使用长连接,则须要在header中指明connection的值为close;若是server方也不想支持长连接,则在response中也须要明确说明connection的值为close. 搜索引擎
不论request仍是response的header中包含了值为close的connection,都代表当前正在使用的tcp连接在请求处理完毕后会被断掉。之后client再进行新的请求时就必须建立新的tcp连接了。 HTTP Connection的 close设置容许客户端或服务器中任何一方关闭底层的链接双方都会要求在处理请求后关闭它们的TCP链接。 spa
2.如何在程序中设置:orm
能够在过滤器中加入:response.setHeader("connection", "close");server
与之相关:解决服务器产生大量close_wait问题索引
要解决这个问题的能够修改系统的参数(/etc/sysctl.conf文件),系统默认超时时间的是7200秒,也就是2小时。
默认以下:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是若是某个TCP链接在idle 2个小时后,内核才发起probe.若是probe 9次(每次75秒)不成功,内核才完全放弃,认为该链接已失效
修改后
sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
通过这个修改后,服务器会在短期里回收没有关闭的tcp链接。