我面临 orientdb 的问题并出现以下异常。
Reached maximum number of concurrent connections (max=1000, current=1000), reject incoming connection from /127.0.0.1:54782 [OServerNetworkListener]
为了进行更多分析,我编写了以下用于连接创建和关闭的代码。
public class ConnectionsOpenAndClose {
public static void main(String[] args) {
String databaseUrl = <url>;
String username = <username>;
String password = <password>;
OPartitionedDatabasePool pool = openConnections(databaseUrl, username, password);
ODatabaseDocument oDatabaseDocument = pool.acquire();
closeConnections(pool, oDatabaseDocument);
}
private static void closeConnections(OPartitionedDatabasePool pool, ODatabaseDocument oDatabaseDocument) {
if (Objects.nonNull(pool)) {
if (Objects.nonNull(oDatabaseDocument)) {
oDatabaseDocument.activateOnCurrentThread();
oDatabaseDocument.close();
}
pool.close();
}
}
private static OPartitionedDatabasePool openConnections(String databaseUrl, String username, String password) {
OPartitionedDatabasePool pool = new OPartitionedDatabasePool(databaseUrl, username, password);
ODatabaseDocument odbDocument = pool.acquire();
odbDocument.close();
return pool;
}
}
执行代码后,我发现在 pool.close() 或 oDatabaseDocument.close(); 上没有二进制侦听器被关闭。我从 orientdb studio 仪表板验证了这一点。仅当上述代码从 JVM 终止后,这些连接才会被释放。
有什么解决办法吗?如何关闭这些连接?因为一段时间后 orientdb 开始拒绝传入连接,然后最终 orientdb 挂起并需要重新启动。
这种情况发生在执行上述代码的 REDHAT 机器上,并且最新的 Orientdb 位于任何操作系统上。
东方数据库版本3.2.23
请不要使用 OParitionedPool。使用 OrientDB 类提供的池,使用方法
com.orientechnologies.orient.core.db.OrientDB#cachedPool(java.lang.String, java.lang.String, java.lang.String, com.orientechnologies.orient.core.db.OrientDBConfig)
不再支持您使用的类。