随笔 - 0, 文章 - 264, 评论 - 170, 引用 - 0
数据加载中……

java.net.SocketException: Too many open files


  tomcat与apache整合的时候,在tomcat/conf/server.xml中配置ajp最大连接参数maxThreads为1024。然后重启服务器,当线程数达到1024峰值的时候,报java.net.SocketException: Too many open files错误。
 

  以下为网上摘抄的解决方案与解惑:

  在Unix/Linux系统中,无论是socket还是file访问,在后台为该访问程序分配了一个文件描述符(descriptor),该文件描 述符为应用程序与基础操作系统之间的交互提供了通用接口。Unix/Linux系统对每个进程能打开文件描述符有最大限制,一般默认是1024。如果在操 作socket和file的时候忘记关闭,当超过系统默认的最大限制,则出现java.net.SocketException: Too many open files。

 
查看系统默认文件描述符的最大限制数
#ulimit 
-a
core file size          (blocks, 
-c) 0
data seg size           (kbytes, 
-d) unlimited
file size               (blocks, 
-f) unlimited
pending signals                 (
-i) 1024
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
stack size              (kbytes, 
-s) 10240
cpu time               (seconds, 
-t) unlimited
max user processes              (
-u) 32764
virtual memory          (kbytes, 
-v) unlimited
file locks                      (
-x) unlimited

查看某一进程打开的文件描述符
#lsof 
-p 进程ID
java    
12451 root    1w   REG    8,2     6130    2297363 /opt/log.txt
java    
12451 root   43u  sock    0,5             6741803 can't identify protocol


  针对这个问题,解决办法如下:

ulimit -2048 增加文件描述符最大数


  就我目前遇到的问题,的确是因为socket打开连接太多了。

  当然,网上其他人说的,诸如文件流没有关闭,也可能会导致这个问题。如果是这种情况,请检查程序,把不必要的socket或file操作关闭掉即可解决。


posted on 2010-09-09 10:12 小一败涂地 阅读(4674) 评论(0)  编辑  收藏 所属分类: tomcat、apache、jboss等服务器相关


只有注册用户登录后才能发表评论。


网站导航: