报此错误是由于系统内核对进程打开文件个数的限制,默认为1024
一、 先从Linux设置入手
(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) 30525 max locked memory (kbytes, -l) 64 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) 1024 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
open files默认是1024
为了使服务器重启设置还能生效, 采取永久改变的方法。
vim /etc/security/limits.conf
在文档最后添加
* soft nofile 65535 * hard nofile 65535
(2) vim /etc/pam.d/login
在文档最后添加
session required /lib/security/pam_limits.so 之后重启服务器
修改成功,成功解决问题
另外:
查看所有进程的文件打开数
lsof |wc -l (wc -l表示统计行数
| 则表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。
)
查看某个进程打开的文件数
lsof -p pid |wc -l
二、 程序
记得在finally语句块里面关闭资源连接, 如:
这种写法有可能会导致资源打开不会被关闭,最好还是写在finally里