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=5
server.bolt.thread_pool_max_size=100
server.bolt.thread_pool_keep_alive=10m