0

我已经设置

kern.maxfiles=65536
kern.maxfilesperproc=65536

在此之后,我将以下命令放入我的 .zshrc 文件中

ulimit -n 30000

但是,如果我尝试从 Eclipse 运行基于 netty 的应用程序,则仅打开 10k 个套接字,然后出现 java IO 异常“打开的文件过多”。以下是堆栈跟踪。

java.io.IOException: Too many open files
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doReadMessages(NioServerSocketChannel.java:135)
    at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:68)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:510)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:467)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:381)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:834)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
    at java.lang.Thread.run(Thread.java:745) 

我使用以下命令检查我的服务器正在使用的打开文件/套接字的数量,并且在发生异常时它总是显示一个略大于 10k 的值。

lsof -p <pid> | wc -l 
4

1 回答 1

0

增加你的文件描述符值来实现。您正在将值设置为“65536”,但通过添加 shell 仅调用 30000

请更改值然后重新加载 bash,通过 su - 在当前会话中或打开新的终端/会话,然后重新启动您的应用程序。它必须工作

您可以在以下链接的帮助下设置 ulimit。

https://vasnlinux.wordpress.com/2015/05/01/linux-server-hardening/

于 2015-05-12T12:35:02.293 回答