服务器中很多的CLOSE_WAIT

服务器中很多的CLOSE_WAIT,请教各位大虾!!!!!!!!!
最近遇到一个问题,工程在LINUX服务器上面跑起来了以后,运行一段时间
就有很多的CLOSE_WAIT链接,多了之后,网站就访问不了了,多半是程序的原因,我想从这方面入手,查看服务器JBOSS宕机之前在访问网站的那些
页面,看是那些页面引起的,再去查看代码,在下是LINUX新手,在服务器中怎么查看访问的页面信息,那些页面正在访问,这样好排查问题一些,请教各位大
侠!!!!!!

分享到:

------解决方案--------------------
一、“多半是程序的原因”?这个还是交给程序猿吧

二、linux 下 CLOSE_WAIT过多的解决方法
情景描述:系统产生大量“Too many open files” 
原因分析:在服务器与客户端通信过程中,因服务器发生了socket未关导致的closed_wait发生,致使监听port打开的句柄数到了1024
个,且均处于close_wait的状态,最终造成配置的port被占满出现“Too many open files”,无法再进行通信。 
close_wait状态出现的原因是被动关闭方未关闭socket造成,如附件图所示:

解决办法:有两种措施可行 
一、解决: 
原因是因为调用ServerSocket类的accept()方法和Socket输入流的read()方法时会引起线程阻塞,所以应该用
setSoTimeout()方法设置超时(缺省的设置是0,即超时永远不会发生);超时的判断是累计式的,一次设置后,每次调用引起的阻塞时间都从该值
中扣除,直至另一次超时设置或有超时异常抛出。 
比如,某种服务需要三次调用read(),超时设置为1分钟,那么如果某次服务三次read()调用的总时间超过1分钟就会有异常抛出,如果要在同一个Socket上反复进行这种服务,就要在每次服务之前设置一次超时。 
二、规避: 
调整系统参数,包括句柄相关参数和TCP/IP的参数;

注意: 
/proc/sys/fs/file-max 是整个系统可以打开的文件数的限制,由sysctl.conf控制; 
ulimit修改的是当前shell和它的子进程可以打开的文件数的限制,由limits.conf控制; 
lsof是列出系统所占用的资源,但是这些资源不一定会占用打开文件号的;比如:共享内存,信号量,消息队列,内存映射等,虽然占用了这些资源,但不占用打开文件号; 
因此,需要调整的是当前用户的子进程打开的文件数的限制,即limits.conf文件的配置; 
如果cat /proc/sys/fs/file-max值为65536或甚至更大,不需要修改该值; 
若ulimit -a ;其open files参数的值小于4096(默认是1024), 则采用如下方法修改open files参数值为8192;方法如下: 
1.使用root登陆,修改文件/etc/security/limits.conf 
vi /etc/security/limits.conf 添加 
xxx - nofile 8192 
xxx 是一个用户,如果是想所有用户生效的话换成 * ,设置的数值与硬件配置有关,别设置太大了。 
#<domain>      <type>     <item>         <value>

*         soft    nofile    8192 
*         hard    nofile    8192

#所有的用户每个进程可以使用8192个文件描述符。 
2.使这些限制生效 
确定文件/etc/pam.d/login 和/etc/pam.d/sshd包含如下行: 
session required pam_limits.so 
然后用户重新登陆一下即可生效。 
3. 在bash下可以使用ulimit -a 参看是否已经修改:

一、 修改方法:(暂时生效,重新启动服务器后,会还原成默认值) 
sysctl -w net.ipv4.tcp_keepalive_time=600   
sysctl -w net.ipv4.tcp_keepalive_probes=2 
sysctl -w net.ipv4.tcp_keepalive_intvl=2

注意:Linux的内核参数调整的是否合理要注意观察,看业务高峰时候效果如何。

二、 若做如上修改后,可起作用;则做如下修改以便永久生效。 
vi /etc/sysctl.conf

若配置文件中不存在如下信息,则添加: 
net.ipv4.tcp_keepalive_time = 1800 
net.ipv4.tcp_keepalive_probes = 3 
net.ipv4.tcp_keepalive_intvl = 15

编辑完 /etc/sysctl.conf,要重启network 才会生效 
/etc/rc.d/init.d/network restart 
然后,执行sysctl命令使修改生效,基本上就算完成了。

------------------------------------------------------------ 
修改原因:

当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端
Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超
时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已
崩溃。因此,解决这个问题的方法还可以通过修改TCP/IP的参数来缩短这个时间,于是修改tcp_keepalive_*系列参数: 
tcp_keepalive_time: 
/proc/sys/net/ipv4/tcp_keepalive_time 
INTEGER,默认值是7200(2小时) 
当keepalive打开的情况下,TCP发送keepalive消息的频率。建议修改值为1800秒。

tcp_keepalive_probes:INTEGER 
/proc/sys/net/ipv4/tcp_keepalive_probes 
INTEGER,默认值是9 
TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)

tcp_keepalive_intvl:INTEGER 
/proc/sys/net/ipv4/tcp_keepalive_intvl 
INTEGER,默认值为75 
当探测没有确认时,重新发送探测的频度。探测消息发送的频率(在认定连接失效之前,发送多少个TCP的keepalive探测包)。乘以
tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以
后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)

【检测办法】 
1. 系统不再出现“Too many open files”报错现象。

2. 处于TIME_WAIT状态的sockets不会激长。

在 Linux 上可用以下语句看了一下服务器的TCP状态(连接状态数量统计):

netstat -n 
------解决方案--------------------
 awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘

返回结果范例如下:

ESTABLISHED 1423 
FIN_WAIT1 1 
FIN_WAIT2 262 
SYN_SENT 1 
TIME_WAIT 962
------解决方案--------------------
对JBOSS不熟悉,不过如果其自身管理界面没有提供监控功能的话,你还有两个便捷手段:
1、开启AccessLog,根据时间,就可以知道某时间段内,哪些页面被访问;
2、执行ThreadDump,在生成的线程堆栈,可以看到所有线程在干啥以及哪个JSP(生成Servlet后的class),尤其是那些处于等待状态的。

时间: 2024-10-12 02:03:10

服务器中很多的CLOSE_WAIT的相关文章

Linux服务器中限制FTP用户访问方式

FTP(File Transfer Protocol)协议:是一个用于在计算机间上传.下载文件的协议. FTP工作在客户端/服务器端的模式中. FTP服务器持续监听来自远处客户端的FTP需求,在收到远处客户端的需求后,它负责管理登陆及建立连接.建立会话期间,执行FTP客户端发过来的命令.进入FTP服务器可以用匿名或者鉴权两种方式来管理.出于安全考虑,LINUX中的大部分系统,会考虑采用鉴权模式,即进入/访问FTP服务器,必须用用户名或密码的方式. 因为FTP不是一个安全协议,所以必须尽量被限制.

游戏服务器中的日志处理方式之一

在游戏开发的过程中,我们需要记录一些日志,以便以后了解游戏运行的情况,以及根据日志发现并处理游戏中的突发情况. 一,游戏日志可以分为以下几种:1)系统日志2)用户操作日志3)异常日志,即错误日志 系统日志 系统日志一般描述的是服务器日常运行的状态.比如启动是否成功,每天统计一下内存的占用量,CPU的使用量等信息.用于查检服务器运行的健康状况.这对于技术分析来说是非常重要的.如果没有这些信息,一但服务器宕机,我们就两眼一抺黑,不知从何下手了.这部分日志一般产生的文件不大,内容不是太多,可以记录成文

七牛云存储还有一个独一无二的特性——支持用户将文件从客户端直传到云服务器中

目前七牛已经拥有数千家客户,你会发现其中有很多都是像知乎.Weico.Camera360.美图秀秀.蝉游记和Vida等UGC(用户产生内容)类产品,尤其是在图片社交领域.这是因为,除了我在前面所说的“云存储”比传统方案更节省成本外,七牛云存储还有一个独一无二的特性——支持用户将文件从客户端直传到云服务器中.因为我看过蝉游记CTO Quake撰文写过这一特性,所以就直接引用他的原文来做说明: 常见的云存储上传文件流程一般如下: 用户 =>应用服务器 =>云存储提供商 这样多了一次上传的流程,和本

恢复数据:Xen Server服务器中一台VPS不可用

故障描述 1.硬件架构概述 服务器:Dell 720服务器配戴一张H710P的RAID卡. 存储阵列:由4块希捷2T STAT硬盘组成的RAID 10. 操作系统:Xen Server 6.2版本. 2.故障虚拟机概述 操作系统:Windows Server 2003. 应用:Web服务器(ASP + SQL 2005的网站架构). 虚拟磁盘:10G系统盘 + 5G数据盘. 故障描述:因特殊原因导致Xen Server服务器中一台VPS(即Xen Server虚拟机)不可用,虚拟磁盘中数据丢失.

x86服务器中网络性能分析与调优 转

x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 [x86服务器中网络性能分析与调优] 那些事! >> 网络性能理论极限 网络数据包处理的性能指标,一般包括吞吐.延时.丢包率.抖动等. 数据包有大有小,数据包的大小对这些性能指标有很大的影响. 一般认为服务器处理能力很强,不是数据包处理的瓶颈,而通过物理线路能够传送数据包的最大速率,即线速(Wir

什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间

什么是域名的TTL值? 转自:http://hizip.net/index.php/archives/20/TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器(权威域名服务器)发出解析请求从而获得解析记录:在获得这个记录之后,记录会在DNS服务器(各地的缓存服务器,也叫递归域名服务器)中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得

Apache服务器中prefork和worker工作模式

一.多道处理模块MPM介绍 Apache HTTP 服务器被设计为一个功能强大,并且灵活的 web 服务器, 可以在很多平台与环境中工作.不同平台和不同的环境往往需要不同 的特性,或可能以不同的方式实现相同的特性最有效率.Apache 通过模块化的设计来适应各种环境.这种设计允许网站管理员通过在 编译时或运行时,选择哪些模块将会加载在服务器中,来选择服务器特性.        Apache 2.0 扩展此模块化设计到最基本的 web 服务器功能. 它提供了可以选择的多处理模块(MPM),用来绑定

vs2003 刷新项目失败。无法从服务器中检索文件夹信息

环境: 操作系统:windows server 2003 开发工具:Visual stuadio 2003 FrameWork: 1.1 打开web项目的时候报错   提示 项目刷新失败,无法从服务器中检索文件夹信息 从网上搜索很多解决方案还是没有得到解决 ,最后查到发现是i应用程序的权限问题 在配置网站的时候需要选择执行包括脚本

服务器中设置.do等为首页的方法

服务器中设置.do等为首页的方法 众所周知,在java web程序中,可以利用web.xml设置网站首页,如: <welcome-file-list>   <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> 这样设置就不行了,如配置: <welcome-file>index.d