打开的文件太多(的ulimit已经改变)(Too many open files ( ulimit

2019-07-17 11:54发布

我工作Debian服务器上使用Tomcat 7和Java 1.7。 这是临危多个TCP连接的应用程序,每个TCP连接是由Java进程打开的文件。

看着/proc/pid of java/fd我发现,有时,打开的文件数超过1024,出现这种情况时,我发现在catalina.out日志堆栈跟踪_SocketException: Too many open files_

一切,我发现这个错误,人们指的ulimit,我已经改变了这事,错误不断发生。 下面是配置:

/etc/security/limits.conf

root    soft    nofile  8192
root    hard    nofile  8192

/etc/sysctl.conf

fs.file-max = 300000

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) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 8192
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

但是,当我检查的java程序的限制,它只是1024

/proc/pid of java/limits

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             32339                32339                processes 
Max open files            1024                 1024                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       32339                32339                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        

我怎样才能增加数量Max open files的java程序?

Answer 1:

我只是把线ulimit -n 8192下的catalina.sh里面,所以当我做catalina start ,JAVA与上述规定的限制运行。



Answer 2:

使用ulimit值在会话启动时间分配,因此更改/etc/security/limits.conf文件不会有已运行到过程的任何影响。 非登录过程中会从他们的父母继承的ulimit值,就像环境变量的继承。

所以改变后/etc/security/limits.conf文件,你需要注销和登录(让你的会议将有新的限制),然后重新启动应用程序。 只有这样,你的应用程序能够使用新的限制。



Answer 3:

设置较高的ulimit也许完全没有必要根据工作负载/流量的tomcat的/ httpd的处理。 Linux的创建每个套接字连接文件描述符,所以如果Tomcat配置为使用的mod_jk / AJP协议作为连接器,那么你可能想看看是否允许的最大连接太高,或者如果为ConnectionTimeout或KeepAliveTimeout的太高。 这些参数在OS文件描述符的消费起到了巨大的作用。 有时也可能是可行的,以限制apache httpd的/ nginx的连接的数目如果Tomcat由反向代理额。 我曾经减少的httpd将ServerLimit值扼杀gaterush场景时传入的请求。 总而言之调整的ulimit可能不是一个可行的选择,因为你的系统可能最终会消耗然而,许多你在它扔。 你将不得不拿出一个全面的计划来解决这个问题。



文章来源: Too many open files ( ulimit already changed )