You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 IS持续出现Too many open files错误,请求排查解决

解决WSO2中"打开的文件过多"报错问题

在wso2carbon.log中持续出现以下错误日志,说明系统打开的文件句柄数超出限制,导致Tomcat无法接收新的Socket连接:

TID: [-1234] [] [2023-05-28 10:31:46,495] ERROR {org.apache.tomcat.util.net.Acceptor} - Socket 接收失败 java.io.IOException: 打开的文件过多
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:424)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:252)
    at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:546)
    at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:79)
    at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:129)
    at java.lang.Thread.run(Thread.java:748)

TID: [-1234] [] [2023-05-28 10:32:44,162] ERROR {org.apache.tomcat.util.net.Acceptor} - Socket 接收失败 java.io.IOException: 打开的文件过多
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:424)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:252)
    at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:546)
    at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:79)
    at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:129)
    at java.lang.Thread.run(Thread.java:748)

1. 先排查当前文件句柄使用情况

  • 查看系统允许的最大文件句柄数:
    cat /proc/sys/fs/file-max
    
  • 查看运行WSO2的用户的文件句柄限制:
    ulimit -n
    
  • 查看WSO2进程实际占用的文件句柄数(替换<pid>为WSO2的进程ID):
    lsof -p <pid> | wc -l
    

2. 临时解决(立即生效,重启服务器后失效)

直接提升当前用户的文件句柄上限,然后重启WSO2:

ulimit -n 65535

3. 永久修改文件句柄限制

用户级配置

编辑运行WSO2的用户的~/.bashrc或~/.bash_profile文件,添加:

ulimit -n 65535

执行以下命令让配置立刻生效:

source ~/.bashrc

系统全局配置

  1. 编辑/etc/security/limits.conf,添加以下内容(替换<username>为运行WSO2的用户名):
    <username> soft nofile 65535
    <username> hard nofile 65535
    
  2. 编辑/etc/sysctl.conf,添加:
    fs.file-max = 655350
    
  3. 执行命令让系统配置生效:
    sysctl -p
    

完成后重启服务器,确保配置永久生效。

4. 优化WSO2自身配置减少句柄占用

  • 调整Tomcat NIO连接参数:打开<WSO2_HOME>/repository/conf/tomcat/catalina-server.xml,找到NioEndpoint类型的Connector节点,合理设置maxConnections和maxThreads,避免因连接堆积耗尽句柄:
    <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
               port="9443"
               maxConnections="10000"
               maxThreads="200"
               ...>
    
  • 检查日志配置:确保<WSO2_HOME>/repository/conf/log4j2.properties中配置了合理的日志滚动策略,限制日志文件的数量和大小,避免生成过多日志文件占用句柄。

内容的提问来源于stack exchange,提问作者Nipuna Upeksha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:24:57