知识库

java.lang.OutOfMemoryError: 无法创建新的本地线程

当客户端应用程序通过 bolt 或 bolt+routing 协议与 Neo4j 服务器建立会话时,服务器会分配一个线程作为服务器端 bolt 工作线程来处理该连接。**Neo4j 服务器对 bolt 工作线程的数量没有服务器端限制**,因此 JVM 可能耗尽本地线程。确切的数量取决于服务器硬件规格,但可能在数千个左右。

如果在 Neo4j 服务器上的 debug.log 或 neo4j.log 中发现类型为 java.lang.OutOfMemoryError: unable to create new native thread 的异常,这几乎肯定是由应用程序代码中客户端未正确关闭会话导致的。

2017-12-14 00:00:35.710+0000 ERROR [o.n.b.t.SocketTransportHandler] Fatal error occurred when handling a client connection: unable to
create new native thread unable to create new native thread
java.lang.OutOfMemoryError: unable to create new native thread

解决此问题的办法是检查应用程序代码中任何创建 Session 对象的地方,并验证它们是否遵循文档中的指导。例如,如果您使用的是 Neo4j Java 驱动程序,请使用 try-with-resources