Bolt 线程池配置
Bolt 连接器在服务器端由一个线程池支持,该线程池作为服务器启动过程的一部分构建。本页讨论线程池的基础设施及其配置方法。
线程池如何工作
Bolt 线程池有一个最小容量和最大容量。它以最小数量的可用线程启动,并根据工作负载增长到最大数量。空闲时间超过指定期限的线程将被停止并从池中移除,以释放资源。但是,池的大小永远不会低于最小值。
建立的每个连接都分配给连接器的线程池。空闲连接不消耗服务器端的任何资源,它们会被监控以等待来自客户端的消息。到达连接的每条消息都会触发在线程池中可用线程上调度连接。如果所有可用线程都处于忙碌状态,并且仍有增长空间,则会创建一个新线程并将连接移交给它进行处理。如果池容量已满,并且没有可用线程进行处理,则会拒绝作业提交并生成失败消息以通知客户端问题。
分配给 Bolt 线程池的默认值适用于大多数工作负载,因此通常无需显式配置连接池。如果最大池大小设置得过低,则会抛出异常,并显示错误消息,指示没有可用线程来提供服务。该消息也将写入 neo4j.log。
任何具有活动显式或隐式事务的连接都将绑定到启动该事务的线程,并且在事务关闭之前不会将该线程返回到池中。因此,在使用显式事务的应用程序中,正确关闭事务非常重要。要了解有关事务的更多信息,请参阅 Neo4j 驱动程序手册。 |
配置选项
以下配置选项可用于配置 Bolt 连接器
选项名称 | 默认值 | 描述 |
---|---|---|
|
即使线程空闲,也始终保持运行的最小线程数。 |
|
|
线程池将创建的最大线程数。 |
|
|
线程池在终止池中空闲线程之前等待的时间。但是,线程数永远不会低于 |
如何调整 Bolt 线程池的大小
根据您的工作负载选择线程池大小的值。由于每个活动事务都会从池中借用一个线程,直到事务关闭,因此基本上是任何给定时间内的最小和最大活动事务决定了池配置选项的值。您可以使用数据库的监控功能(参见 监控)来了解更多关于您的工作负载的信息。
根据您的最小或平均工作负载配置 server.bolt.thread_pool_min_size
。由于线程池中始终会有这么多线程,因此使用较低的值可能比有太多空闲线程等待作业提交更节省资源。
根据您的最大工作负载配置 server.bolt.thread_pool_max_size
。这基本上应在服务器上预期的最大活动事务数之后设置。您还应该考虑将在线程池上发生的非事务操作,例如客户端的连接和断开。
在此示例中,我们将 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