boomboomxx opened a new issue, #6018: URL: https://github.com/apache/shenyu/issues/6018
### Question ### 运行环境 1. 版本: 2.6.0 2. 存储:MySQL 8.0.40 3. 操作系统:CentOS 8 Stream 4. JDK 17.0.1 5. 单机单节点模式运行 6. 单用户限制 如下:``` core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 14510 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65536 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) 14510 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited ``` --- ### 问题描述 > 在使用 TCP 代理时,所有代理使用 local 模式 在代理数据添加到大概 5000 个的时候,bootstrap 服务日志报错: ```log 2025-05-07 11:07:41 [WebSocketConnectReadThread-8345] ERROR org.apache.shenyu.plugin.sync.data.websocket.client.ShenyuWebsocketClient - websocket server[ws://localhost:9095/websocket] is error..... java.lang.IllegalStateException: failed to create a child event loop at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:88) at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60) at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:49) at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:59) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:87) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:82) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:69) at reactor.netty.resources.DefaultLoopResources.cacheNioServerLoops(DefaultLoopResources.java:213) at reactor.netty.resources.DefaultLoopResources.onServer(DefaultLoopResources.java:155) at reactor.netty.transport.ServerTransportConfig.childEventLoopGroup(ServerTransportConfig.java:205) at reactor.netty.transport.ServerTransport.lambda$bind$0(ServerTransport.java:113) at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:58) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.Mono.block(Mono.java:1765) at reactor.netty.transport.ServerTransport.bindNow(ServerTransport.java:149) at reactor.netty.transport.ServerTransport.bindNow(ServerTransport.java:134) at org.apache.shenyu.protocol.tcp.TcpBootstrapServer.start(TcpBootstrapServer.java:79) at org.apache.shenyu.plugin.tcp.handler.TcpBootstrapFactory.createBootstrapServer(TcpBootstrapFactory.java:58) at org.apache.shenyu.plugin.tcp.handler.TcpProxySelectorDataHandler.handlerProxySelector(TcpProxySelectorDataHandler.java:45) at org.apache.shenyu.plugin.base.cache.CommonProxySelectorDataSubscriber.lambda$onSubscribe$1(CommonProxySelectorDataSubscriber.java:43) at java.base/java.util.Optional.ifPresent(Optional.java:178) at org.apache.shenyu.plugin.base.cache.CommonProxySelectorDataSubscriber.onSubscribe(CommonProxySelectorDataSubscriber.java:43) at org.apache.shenyu.plugin.sync.data.websocket.handler.ProxySelectorDataHandler.lambda$null$0(ProxySelectorDataHandler.java:53) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.apache.shenyu.plugin.sync.data.websocket.handler.ProxySelectorDataHandler.lambda$doUpdate$1(ProxySelectorDataHandler.java:52) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.apache.shenyu.plugin.sync.data.websocket.handler.ProxySelectorDataHandler.doUpdate(ProxySelectorDataHandler.java:51) at org.apache.shenyu.plugin.sync.data.websocket.handler.AbstractDataHandler.handle(AbstractDataHandler.java:77) at org.apache.shenyu.plugin.sync.data.websocket.handler.WebsocketDataHandler.executor(WebsocketDataHandler.java:65) at org.apache.shenyu.plugin.sync.data.websocket.client.ShenyuWebsocketClient.handleResult(ShenyuWebsocketClient.java:197) at org.apache.shenyu.plugin.sync.data.websocket.client.ShenyuWebsocketClient.onMessage(ShenyuWebsocketClient.java:143) at org.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:591) at org.java_websocket.drafts.Draft_6455.processFrameText(Draft_6455.java:885) at org.java_websocket.drafts.Draft_6455.processFrame(Draft_6455.java:819) at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:379) at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:216) at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:508) at java.base/java.lang.Thread.run(Thread.java:833) Suppressed: java.lang.Exception: #block terminated with an error at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:139) at reactor.core.publisher.Mono.block(Mono.java:1766) ... 24 common frames omitted Caused by: io.netty.channel.ChannelException: failed to open a new selector at io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:179) at io.netty.channel.nio.NioEventLoop.<init>(NioEventLoop.java:146) at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:183) at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38) at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84) ... 37 common frames omitted Caused by: java.io.IOException: 打开的文件过多 at java.base/sun.nio.ch.EPoll.create(Native Method) at java.base/sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:78) at java.base/sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:36) at io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:177) ... 41 common frames omitted ``` 使用 `lsof -p $pid` 查看打开的文件时发现存在大量 `eventpool` 和 `eventfd`, 以下为截取信息 ```text java 84752 devops *433u IPv6 2107390 0t0 TCP *:24586 (LISTEN) java 84752 devops *434u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *435u a_inode 0,14 0 10521 [eventfd] java 84752 devops *436u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *437u a_inode 0,14 0 10521 [eventfd] java 84752 devops *438u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *439u a_inode 0,14 0 10521 [eventfd] java 84752 devops *440u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *441u a_inode 0,14 0 10521 [eventfd] java 84752 devops *442u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *443u a_inode 0,14 0 10521 [eventfd] java 84752 devops *444u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *445u a_inode 0,14 0 10521 [eventfd] java 84752 devops *446u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *447u a_inode 0,14 0 10521 [eventfd] java 84752 devops *448u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *449u a_inode 0,14 0 10521 [eventfd] java 84752 devops *450u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *451u a_inode 0,14 0 10521 [eventfd] java 84752 devops *452u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *453u a_inode 0,14 0 10521 [eventfd] java 84752 devops *454u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *455u a_inode 0,14 0 10521 [eventfd] java 84752 devops *456u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *457u a_inode 0,14 0 10521 [eventfd] java 84752 devops *458u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *459u a_inode 0,14 0 10521 [eventfd] java 84752 devops *460u IPv6 2107391 0t0 TCP *:29500 (LISTEN) java 84752 devops *461u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *462u a_inode 0,14 0 10521 [eventfd] java 84752 devops *463u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *464u a_inode 0,14 0 10521 [eventfd] java 84752 devops *465u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *466u a_inode 0,14 0 10521 [eventfd] java 84752 devops *467u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *468u a_inode 0,14 0 10521 [eventfd] java 84752 devops *469u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *470u a_inode 0,14 0 10521 [eventfd] java 84752 devops *471u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *472u a_inode 0,14 0 10521 [eventfd] java 84752 devops *473u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *474u a_inode 0,14 0 10521 [eventfd] java 84752 devops *475u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *476u a_inode 0,14 0 10521 [eventfd] java 84752 devops *477u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *478u a_inode 0,14 0 10521 [eventfd] java 84752 devops *479u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *480u a_inode 0,14 0 10521 [eventfd] java 84752 devops *481u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *482u a_inode 0,14 0 10521 [eventfd] java 84752 devops *483u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *484u a_inode 0,14 0 10521 [eventfd] java 84752 devops *485u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *486u a_inode 0,14 0 10521 [eventfd] java 84752 devops *487u IPv6 2107392 0t0 TCP *:19746 (LISTEN) java 84752 devops *488u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *489u a_inode 0,14 0 10521 [eventfd] java 84752 devops *490u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *491u a_inode 0,14 0 10521 [eventfd] java 84752 devops *492u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *493u a_inode 0,14 0 10521 [eventfd] java 84752 devops *494u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *495u a_inode 0,14 0 10521 [eventfd] java 84752 devops *496u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *497u a_inode 0,14 0 10521 [eventfd] java 84752 devops *498u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *499u a_inode 0,14 0 10521 [eventfd] java 84752 devops *500u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *501u a_inode 0,14 0 10521 [eventfd] java 84752 devops *502u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *503u a_inode 0,14 0 10521 [eventfd] java 84752 devops *504u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *505u a_inode 0,14 0 10521 [eventfd] java 84752 devops *506u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *507u a_inode 0,14 0 10521 [eventfd] java 84752 devops *508u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *509u a_inode 0,14 0 10521 [eventfd] java 84752 devops *510u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *511u a_inode 0,14 0 10521 [eventfd] java 84752 devops *512u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *513u a_inode 0,14 0 10521 [eventfd] java 84752 devops *514u sock 0,9 0t0 2108417 protocol: TCPv6 java 84752 devops *515u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *516u a_inode 0,14 0 10521 [eventfd] java 84752 devops *517u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *518u a_inode 0,14 0 10521 [eventfd] java 84752 devops *519u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *520u a_inode 0,14 0 10521 [eventfd] java 84752 devops *521u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *522u a_inode 0,14 0 10521 [eventfd] java 84752 devops *523u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *524u a_inode 0,14 0 10521 [eventfd] java 84752 devops *525u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *526u a_inode 0,14 0 10521 [eventfd] java 84752 devops *527u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *528u a_inode 0,14 0 10521 [eventfd] java 84752 devops *529u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *530u a_inode 0,14 0 10521 [eventfd] java 84752 devops *531u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *532u a_inode 0,14 0 10521 [eventfd] java 84752 devops *533u a_inode 0,14 0 10521 [eventpoll] java 84752 devops *534u a_inode 0,14 0 10521 [eventfd] ``` ### 问题发现过程 使用 `lsof -p $pid | wc -l` 观察文件描述符变化 每创建一个 tcp 代理,则文件描述符加 **28** 删除单个tcp代理时,文件描述符减 **1** 感觉像是删除对应的代理时,只释放了 `TcpBootstrapServer` 对应的连接,而未释放对应的 `fd` 有无解决办法? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@shenyu.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org