Java client 调用过程中报错 No buffer space available (maximum connections reached?): connect

但是我现在还是有那个插入三元组数据到 1 万条左右的时候就会有问题,接口给的日志错误信息是这样的:

Exception in thread "vert.x-eventloop-thread-1" com.vesoft.nebula.client.graph.exception.IOErrorException: java.net.SocketException: Broken pipe (Write failed)
	at com.vesoft.nebula.client.graph.net.SyncConnection.execute(SyncConnection.java:74)
	at com.vesoft.nebula.client.graph.net.Session.execute(Session.java:46)

但是 graphd, meta0, storaged 里都没有日志,就很难查。

我在网上看到说有可能的原因是:

1:猜测是数据库链接数不够,而需要等待的链接数过多,导致资源无法尽快释放。

2:因为代码内部使用有很多的 HttpClient请求,调用另一个数据库的数据,可能是请求量过多,或者是请求未正常的关闭。导致内部资源泄露

3:系统并发量太大,链接数过多,部分系统或者非系统请求无法正常的释放关闭,而又持续请求,导致socket链接不断进行积压,从而导致系统崩溃。

但我不太确定在建立 nebula 连接的时候需要怎么改。

这个我解决了,是我在写调用脚本的时候,把 val client = HttpClient.newBuilder().build(); 这个语句放在了循环里面,导致一直在重复创建,到 1 万左右的时候就会出问题。

1 个赞