java.net.SocketException: Too many open files解决方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1936 | 回复: 0   主题: java.net.SocketException: Too many open files解决方法        下一篇 
第五种族
注册用户
等级:列兵
经验:103
发帖:78
精华:0
注册:2011-11-3
状态:离线
发送短消息息给第五种族 加好友    发送短消息息给第五种族 发消息
发表于: IP:您无权察看 2015-12-23 15:05:35 | [全部帖] [楼主帖] 楼主

 一、错误现象
tomcat启动后,会出现前台页面无法访问,从日志中看错误:

 2011-03-01 02:30:00 [com.asiainfo.aiox.common.rest.RestClient]-[ERROR] java.net.SocketException: Too many open files
 Exception in thread "Thread-1168" java.lang.NoClassDefFoundError: org/apache/log4j/spi/ThrowableInformation
 at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:159)
 at org.apache.log4j.Category.forcedLog(Category.java:391)

二.错误原因
Linux默认打开文件1024,对于并发量大的无法满足要求;
(1)查看系统设置

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 253951
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 253951
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

通过以上命令,我们可以看到open files 的最大数为1024,对于并发量比较大的网站这个限制是有些捉襟见肘的

(2)解决方法

通过这个命令 ulimit -n 4096,把打开文件数的上限设为了4096,这下好了,项目又稳定了

但是,ulimit -n 4096 命令只能临时的改变open files的值,当重新登陆后又会恢复,所以需要永久设置open files的值。

很多系统上限可以通过修改/etc/security/limits.conf文件改变,这个文件有详细的注释,对如何修改做了说明。如果希望把所有用户的进程打开文件上限改为65536,可以加入下面两行

* soft nofile 65535
* hard nofile 65535

其中,*表示所有用户,soft/hard表示软/硬限制,还可以只真对某个用户或某个组做修改,具体方法参见文件注释。修改后需要重新启动系统才能生效。

三.涉及命令

 ulimit -a  显示当前所有的 limit 信息

 ulimit -n 可以打开最大文件描述符的数量

 ulimit – n 4096;限制最大可以使用 4096个文件描述符

用lsof -p [进程ID] 可以看到某ID的打开文件状况。进程ID可能用 ps -ef|grep java列出weblogic的进程ID,然后用此ID套入lsof -p ID号,一大堆的请求,这显然是网络请求过多造成了 Too many open files。适当调整后便已消除这种现象。





--转自



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论