Ticket #58 (closed 用户报障: 已处理)
论坛服务器应用进程打开文件数限制
| Reported by: | dingjianyong | Owned by: | dingjianyong |
|---|---|---|---|
| Priority: | 重要的(3) | Milestone: | |
| Component: | 时尚网论坛 | Version: | |
| Keywords: | Cc: | ||
| Due Date: | 10/05/2013 |
Description
发现女性网论坛机器重启频率很高(约1-2小时重启一次),重启的时候内存溢出,抛出错误。
jdk log如下:
java.lang.OutOfMemoryError? GC overhead limit exceeded
java.io.FileNotFoundException? pc_route/route.txt.md5 (Too many open files)
error log如下:
java.lang.NullPointerException?
com.danga.MemCached?.MemCachedClient?$NIOLoader.doMulti(MemCachedClient?.java:2207)
错误原因:没有对resin进程的启动用户设置【可以同时打开的文件数目】。此参数在默认的情况下为1024。 由于没有设置,所以当resin进程某个请求需要打开文件达到限制,则抛出错误,故而重启。
解决方案:
“open files (-n) 1024 ”是Linux操作系统对一个进程打开的文件句柄数量的限制(包含打开的SOCKET数量).这个值可用ulimit 命令来修改。
Change History
comment:1 Changed 13 years ago by dingjianyong
- Summary changed from 论坛服务器进程连接数限制导致内存溢出 to 论坛服务器应用进程打开文件数限制
comment:2 Changed 13 years ago by dingjianyong
仔细查阅log发现,出现的error log包括
java.lang.OutOfMemoryError:GC overhead limit exceeded
java.lang.OutOfMemoryError?: Java heap space
Too many open files
每次重启所抛出的log会不一致,主要为上述三种。
为了进一步研究为何会出现上述几种不同类型的log,进行了进一步研究。
经研究,是danga.memcached2.0.1存在nio管道句柄泄漏问题,会产生大量软引用的selector对象,当jvm内存不足时,试图回收这些对象,但是由于GC在进行回收时,需要通过算法检查是否回收软应用对象。GC占用大量时间为释放很小空间的时候,就会抛出GC overhead limit exceeded错误。如果刚好MC线程池扩张,就会出现java.lang.OutOfMemoryError?: Java heap space错误。如果jvm内存依然足够,这些软引用的selector都不会释放,打开文件数就有可能达到上限。所以报Too many open files。
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)