Chinaunix

标题: too many open files [打印本页]

作者: hrdxwandg    时间: 2012-12-04 18:05
标题: too many open files
ulimit -a后得出的结果:
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

sudo lsof | wc -l后的结果是:
5217

为什么还出现too many open files的问题?
求解答,在线等啊。。。。
作者: chenyx    时间: 2012-12-04 18:31
你试试加到655360看看还出现不了
作者: hrdxwandg    时间: 2012-12-04 19:13
回复 2# chenyx

额,不过这个说不通啊?


   
作者: q1208c    时间: 2012-12-04 22:56
什么地方报出来的?

有时候, 不一定是系统层的限制.
作者: hrdxwandg    时间: 2012-12-04 23:28
回复 4# q1208c

运行solr服务报出来的,你说的很有可能,同一套代码,第一次跑没问题,再跑就出问题了。但是一直没找到原因。


   
作者: q1208c    时间: 2012-12-04 23:34
回复 5# hrdxwandg
我的意思是, 这一行字是在打在哪里的?

应用的 log?
/var/log/message ?
dmesg?

console ?

and ??

   
作者: hrdxwandg    时间: 2012-12-05 09:14
回复 6# q1208c

tomcat的catalina.out文件中:
Caused by: java.net.SocketException: Too many open files
        at java.net.Socket.createImpl(Socket.java:414)
        at java.net.Socket.getImpl(Socket.java:477)
        at java.net.Socket.setSoTimeout(Socket.java:1035)
        at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:126)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:151)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:125)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
        at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:306)
        ... 41 more


   
作者: sakulagi    时间: 2012-12-05 09:15
看上去是Java程序同时打开socket数量的限制。
作者: zongg    时间: 2012-12-05 09:19
按理说修改了这个参数就没问题了,tomcat 你重启过吗?
作者: hrdxwandg    时间: 2012-12-05 10:52
回复 8# sakulagi

java进程单独还有限制?


   
作者: hrdxwandg    时间: 2012-12-05 10:53
回复 9# zongg

重启过,打开文件太多后连tomcat的管理页面都打不开,只好重启了。


   
作者: zongg    时间: 2012-12-05 10:56
hrdxwandg 发表于 2012-12-05 10:53
回复 9# zongg

重启过,打开文件太多后连tomcat的管理页面都打不开,只好重启了。



你的连链接数多少啊?句柄数调最大都不行?
作者: zongg    时间: 2012-12-05 11:11
hrdxwandg 发表于 2012-12-05 10:53
回复 9# zongg

重启过,打开文件太多后连tomcat的管理页面都打不开,只好重启了。



是不是程序里打开某些动作没有去关闭?
作者: hrdxwandg    时间: 2012-12-05 11:18
回复 13# zongg

不是,程序中打开的文件都关闭了。
sudo lsof -p 6944后得到的:

java    6944 root  250u  IPv6          614668508        0t0       TCP localhost:45597->localhost:tproxy (CLOSE_WAIT)
java    6944 root  251u  IPv6          614666678        0t0       TCP localhost:45414->localhost:tproxy (CLOSE_WAIT)
java    6944 root  252u  IPv6          614665181        0t0       TCP localhost:45306->localhost:tproxy (CLOSE_WAIT)
java    6944 root  253u  IPv6          614667499        0t0       TCP localhost:45507->localhost:tproxy (CLOSE_WAIT)
java    6944 root  254u  IPv6          614672998        0t0       TCP localhost:34548->localhost:tproxy (CLOSE_WAIT)
java    6944 root  255u  IPv6          614671884        0t0       TCP localhost:39129->localhost:tproxy (CLOSE_WAIT)
java    6944 root  256u  IPv6          614666738        0t0       TCP localhost:45521->localhost:tproxy (CLOSE_WAIT)
java    6944 root  257u  IPv6          614674449        0t0       TCP localhost:34940->localhost:tproxy (CLOSE_WAIT)
java    6944 root  258u  IPv6          614665608        0t0       TCP localhost:45508->localhost:tproxy (CLOSE_WAIT)
java    6944 root  259u  IPv6          614673173        0t0       TCP localhost:34810->localhost:tproxy (CLOSE_WAIT)


因为向tomcat服务器发了很多http请求solr服务。这个占用了大量的文件数。


   
作者: zongg    时间: 2012-12-05 11:31
hrdxwandg 发表于 2012-12-05 11:18
回复 13# zongg

不是,程序中打开的文件都关闭了。


大量CLOSE_WAIT是等待关闭,
net.ipv4.tcp_keepalive_time = 300

加到/etc/sysctl.conf里,默认是7200
作者: hrdxwandg    时间: 2012-12-05 14:58
回复 15# zongg


search@search-test:/usr/share/tomcat6/logs$ sudo sysctl -p
net.ipv4.tcp_keepalive_time = 120

但是close_wait状态:

FIN_WAIT2 10
CLOSE_WAIT 404
TIME_WAIT 261
ESTABLISHED 147

没减少呢?


   
作者: zongg    时间: 2012-12-06 08:43
hrdxwandg 发表于 2012-12-05 14:58
回复 15# zongg



net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 20


加里试试.
作者: kellyseeme123    时间: 2012-12-06 09:38
我这边也出现这个错误,不过报错的是weblogic,然后修改这些参数之后完全没作用,最后发现是F5负载均衡的问题
作者: hrdxwandg    时间: 2012-12-06 09:59
回复 17# zongg

还是不行。
我改成了:

net.ipv4.tcp_keepalive_time = 1
net.ipv4.tcp_keepalive_intvl = 1
net.ipv4.tcp_keepalive_probes = 1



   
作者: zongg    时间: 2012-12-06 10:03
hrdxwandg 发表于 2012-12-06 09:59
回复 17# zongg

还是不行。



额,那我也帮不上忙了.
作者: hrdxwandg    时间: 2012-12-06 10:04
回复 21# zongg

嗯,还是谢谢了~


   
作者: darrenlee3    时间: 2012-12-06 10:40
solr哪个版?
solr有close wait的bug
需要改客户端代码
作者: hrdxwandg    时间: 2012-12-06 11:46
回复 23# darrenlee3

solr3.6.1
用了solrj这个客户端


   
作者: hrdxwandg    时间: 2012-12-06 11:50
回复 23# darrenlee3

这个bug在**说明呢?官方文档?
麻烦给具体网址呗?
谢谢


   
作者: darrenlee3    时间: 2012-12-06 12:22
回复 25# hrdxwandg


    不谢
https://issues.apache.org/jira/browse/SOLR-861
试试吧,也许能解决问题




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2