Bolt 线程池配置

Bolt 连接器由服务器端的一个线程池支持,而线程池是在服务器启动过程中构建的。此页面讨论了线程池基础架构及其配置方法。

线程池的工作原理

Bolt 线程池具有最小和最大容量。它以可用的最小线程数开始,并根据工作负载增长到最大线程数。空闲时间超过指定时间段的线程将被停止并从池中移除以释放资源。但是,池的大小永远不会低于最小值。

每个建立的连接都分配给连接器的线程池。空闲连接不会消耗服务器端的任何资源,并且会监视来自客户端的到达的消息。到达连接上的每条消息都会触发在线程池中可用线程上调度连接。如果所有可用线程都处于繁忙状态,并且仍然有扩展空间,则会创建一个新线程并将连接移交给它进行处理。如果池容量已满,并且没有可用线程进行处理,则作业提交将被拒绝,并生成一条错误消息以通知客户端出现的问题。

分配给 Bolt 线程池的默认值适合大多数工作负载,因此通常不需要显式配置连接池。如果最大池大小设置得太低,则会抛出异常并显示错误消息,指示没有可用线程来提供服务。该消息也将写入 neo4j.log

任何与活动显式或隐式事务的连接都将保留在启动事务的线程上,并且在事务关闭之前不会将该线程返回到池中。因此,在使用显式事务的应用程序中,正确关闭事务非常重要。要了解有关事务的更多信息,请参阅Neo4j 驱动程序手册

配置选项

以下配置选项可用于配置 Bolt 连接器

表 1. 线程池选项
选项名称 默认值 描述

server.bolt.thread_pool_min_size

5

即使线程处于空闲状态,也始终保持运行的最小线程数。

server.bolt.thread_pool_max_size

400

线程池将创建的最大线程数。

server.bolt.thread_pool_keep_alive

5m

线程池在终止池中空闲线程之前等待的持续时间。但是,线程数永远不会低于server.bolt.thread_pool_min_size

如何调整 Bolt 线程池大小

根据您的工作负载选择线程池大小的值。由于每个活动事务都会从池中借用一个线程,直到事务关闭,因此基本上是任何给定时间内的最小和最大活动事务决定了池配置选项的值。您可以使用数据库的监控功能(请参阅监控)来了解更多关于您的工作负载的信息。

根据您的最小或平均工作负载配置server.bolt.thread_pool_min_size。由于线程池中始终存在这么多线程,因此坚持使用较低的值可能比让太多空闲线程等待作业提交更节省资源。

根据您的最大工作负载配置server.bolt.thread_pool_max_size。这基本上应该在服务器上预期的最大活动事务数之后设置。您还应该考虑将在线程池上执行的非事务操作,例如客户端的连接和断开连接。

示例 1. 配置 Bolt 连接器的线程池

在此示例中,我们将 Bolt 线程池的最小大小配置为5,最大大小配置为100,并将其保持活动时间设置为10 分钟

server.bolt.thread_pool_min_size=10
server.bolt.thread_pool_max_size=100
server.bolt.thread_pool_keep_alive=10m