Java vert.x getting-未能创建子事件循环

Java vert.x getting-未能创建子事件循环,java,vert.x,vertx3,Java,Vert.x,Vertx3,我正在创建大约150个5MB大小的文件。Vertx文件API在创建10-15个文件“未能创建子事件循环”后随机出现异常 (我正在使用vertx3和java8) 下面是我的代码片段(在我得到回调后,只有我再次调用函数来创建下一个文件。因此,文件创建永远不会并发): 下面是我的异常堆栈跟踪: java.lang.IllegalStateException: failed to create a child event loop at io.netty.util.concurrent.Mult

我正在创建大约150个5MB大小的文件。Vertx文件API在创建10-15个文件“未能创建子事件循环”后随机出现异常

(我正在使用vertx3和java8)

下面是我的代码片段(在我得到回调后,只有我再次调用函数来创建下一个文件。因此,文件创建永远不会并发):

下面是我的异常堆栈跟踪:

java.lang.IllegalStateException: failed to create a child event loop
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:68)
    at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:49)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:61)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:52)
    at io.vertx.core.impl.VertxImpl.<init>(VertxImpl.java:132)
    at io.vertx.core.impl.VertxImpl.<init>(VertxImpl.java:126)
    at io.vertx.core.impl.VertxImpl.<init>(VertxImpl.java:122)
    at io.vertx.core.impl.VertxFactoryImpl.vertx(VertxFactoryImpl.java:34)
    at io.vertx.core.Vertx.vertx(Vertx.java:78)
    at rc_datawarehouse.CsvToJsonChunkWriter.writeCsvChunkToFiles(CsvToJsonChunkWriter.java:73)
    at rc_datawarehouse.CsvToJsonReadWrite.lambda$2(CsvToJsonReadWrite.java:119)
    at rc_datawarehouse.CsvToJsonReadWrite$$Lambda$16/1470881859.handle(Unknown Source)
    at io.vertx.core.file.impl.AsyncFileImpl.handleData(AsyncFileImpl.java:335)
    at io.vertx.core.file.impl.AsyncFileImpl.lambda$doRead$285(AsyncFileImpl.java:320)
    at io.vertx.core.file.impl.AsyncFileImpl$$Lambda$17/1067800899.handle(Unknown Source)
    at io.vertx.core.file.impl.AsyncFileImpl$2.lambda$done$289(AsyncFileImpl.java:408)
    at io.vertx.core.file.impl.AsyncFileImpl$2$$Lambda$18/1632681662.handle(Unknown Source)
    at io.vertx.core.impl.ContextImpl.lambda$wrapTask$15(ContextImpl.java:314)
    at io.vertx.core.impl.ContextImpl$$Lambda$5/1780132728.run(Unknown Source)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Unknown Source)
Caused by: io.netty.channel.ChannelException: failed to open a new selector
    at io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:128)
    at io.netty.channel.nio.NioEventLoop.<init>(NioEventLoop.java:120)
    at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:87)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:64)
    ... 22 more
Caused by: java.io.IOException: Unable to establish loopback connection
    at sun.nio.ch.PipeImpl$Initializer.run(Unknown Source)
    at sun.nio.ch.PipeImpl$Initializer.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.nio.ch.PipeImpl.<init>(Unknown Source)
    at sun.nio.ch.SelectorProviderImpl.openPipe(Unknown Source)
    at java.nio.channels.Pipe.open(Unknown Source)
    at sun.nio.ch.WindowsSelectorImpl.<init>(Unknown Source)
    at sun.nio.ch.WindowsSelectorProvider.openSelector(Unknown Source)
    at io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:126)
    ... 25 more
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Unknown Source)
    at sun.nio.ch.Net.connect(Unknown Source)
    at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)
    at java.nio.channels.SocketChannel.open(Unknown Source)
    at sun.nio.ch.PipeImpl$Initializer$LoopbackConnector.run(Unknown Source)
    ... 34 more
java.lang.IllegalStateException:未能创建子事件循环
位于io.netty.util.concurrent.MultithreadEventExecutorGroup。(MultithreadEventExecutorGroup.java:68)
位于io.netty.channel.MultithreadEventLoopGroup。(MultithreadEventLoopGroup.java:49)
位于io.netty.channel.nio.NioEventLoopGroup。(NioEventLoopGroup.java:61)
位于io.netty.channel.nio.NioEventLoopGroup。(NioEventLoopGroup.java:52)
位于io.vertx.core.impl.VertxImpl.(VertxImpl.java:132)
位于io.vertx.core.impl.VertxImpl.(VertxImpl.java:126)
位于io.vertx.core.impl.VertxImpl.(VertxImpl.java:122)
位于io.vertx.core.impl.VertxFactoryImpl.vertx(VertxFactoryImpl.java:34)
在io.vertx.core.vertx.vertx(vertx.java:78)
位于rc_datawarehouse.CsvToJsonChunkWriter.writeCsvChunkToFiles(CsvToJsonChunkWriter.java:73)
位于rc_datawarehouse.CsvToJsonReadWrite.lambda$2(CsvToJsonReadWrite.java:119)
位于rc_datawarehouse.CsvToJsonReadWrite$$Lambda$16/1470881859.handle(未知源)
位于io.vertx.core.file.impl.AsyncFileImpl.handleData(AsyncFileImpl.java:335)
位于io.vertx.core.file.impl.AsyncFileImpl.lambda$doRead$285(AsyncFileImpl.java:320)
位于io.vertx.core.file.impl.AsyncFileImpl$$Lambda$17/1067800899.handle(未知源)
在io.vertx.core.file.impl.AsyncFileImpl$2.lambda$done$289(AsyncFileImpl.java:408)
位于io.vertx.core.file.impl.AsyncFileImpl$2$$Lambda$18/1632681662.handle(未知源)
在io.vertx.core.impl.ContextImpl.lambda$wrapTask$15(ContextImpl.java:314)
在io.vertx.core.impl.ContextImpl$$Lambda$5/1780132728.run(未知源)
位于io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
位于io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
位于io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
位于java.lang.Thread.run(未知源)
原因:io.netty.channel.ChannelException:无法打开新选择器
位于io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:128)
位于io.netty.channel.nio.NioEventLoop。(NioEventLoop.java:120)
位于io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:87)
位于io.netty.util.concurrent.MultithreadEventExecutorGroup。(MultithreadEventExecutorGroup.java:64)
... 还有22个
原因:java.io.IOException:无法建立环回连接
位于sun.nio.ch.PipeImpl$Initializer.run(未知源)
位于sun.nio.ch.PipeImpl$Initializer.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.nio.ch.PipeImpl(未知来源)
位于sun.nio.ch.selector或ProviderImpl.openPipe(未知源)
位于java.nio.channels.Pipe.open(未知源代码)
位于sun.nio.ch.WindowsSelectorImpl。(来源未知)
位于sun.nio.ch.WindowsSelector或Provider.openSelector(未知源)
位于io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:126)
... 25多
原因:java.net.SocketException:没有可用的缓冲区空间(已达到最大连接数?):连接
位于sun.nio.ch.Net.connect0(本机方法)
位于sun.nio.ch.Net.connect(未知源)
位于sun.nio.ch.Net.connect(未知源)
位于sun.nio.ch.socketchannel.connect(未知来源)
位于java.nio.channels.SocketChannel.open(未知源代码)
位于sun.nio.ch.PipeImpl$Initializer$LoopbackConnector.run(未知源)
... 34多

我从论坛上得到了答案(谢谢Jez)

Vertx.Vertx()
是罪魁祸首。它每次都会创建一个新的vertx,导致多个eventloops,这似乎就是问题所在

我将它缓存在一个变量中,而不是每次都使用
Vertx.Vertx()
,并且它工作正常

cachedVertx.fileSystem().writeFile(...)
Vertx.Vertx()不会创建任何事件循环。事件循环队列和线程仅在使用方法Vertx#deployVerticle部署Verticle时创建。当变量已经在verticle的父抽象类中时,为什么要缓存vertx实例,除非没有其他同名变量(vertx)
cachedVertx.fileSystem().writeFile(...)