在我的程序执行过程中,我看到太多打开的文件异常。通常,这些以以下形式出现:
org.jboss.netty.channel.ChannelException: Failed to create a selector.
...
Caused by: java.io.IOException: Too many open files
然而,这些并不是唯一的例外。我观察到类似的情况(由“打开的文件太多”引起),但频率要低得多。
奇怪的是,我将屏幕会话(从我启动程序的位置)的打开文件限制设置为 1M:
root@s11:~/fabiim-cbench# 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) 1000000**
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
此外,正如我看到的输出所观察到的,lsof -p
在抛出异常之前,我看不到 1111 个打开的文件(套接字、管道、文件)。
问题:出了什么问题和/或我该如何深入研究这个问题。
额外:我目前正在将Floodlight与bft-smart集成。简而言之,Floodlight 进程是在执行由基准程序启动的压力测试时因打开文件异常过多而崩溃的进程。该基准程序将保持 64 个与 Floodlight 进程的 tcp 连接,而 Floodlight 进程又应保持与 bft-smart 副本的至少 64 * 3 个 tcp 连接。这两个程序都使用netty来管理这些连接。