tomcat 上的 maxConnections 或 maxThreads

tomcat 上的 maxConnections 或 maxThreads

寻求建议 - 我已阅读了关于此问题的另外两个帖子

在我的 server.xml 文件中,有两个地方定义了 maxThreads:

  1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="100" minSpareThreads="4"/>

  1. <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="100" SSLEnabled="true" scheme="https" secure="true" connectionTimeout="600000" keystoreFile="/usr/local/tomcat/conf/keystore.p12" keystorePass="mypassword" clientAuth="false" sslProtocol="TLS" />

我们的服务器经常遇到的错误是:“超时:池为空。无法在 30 秒内获取连接,无可用连接 [大小:100;忙:100;空闲:0;最后等待:30000]”,然后系统致命关闭(机器重置并重新启动 - 在 AWS ECS 集群上)

当我在此处列出的第二个实例中将 maxThreads 值增加到 300 时,我们收到相同的错误消息 - 所以我不确定连接大小是否有所增加。系统行为不同(机器没有重新启动),但用户无法连接 - 最终需要手动重新启动。

如何才能实现更多的系统连接或保持尽可能高的连接性?

在关于该主题的其他帖子中,有人建议也减少 maxThreads(假设它们快速完成)可以获得更好的性能。

更新:

在我的应用程序属性文件中我有以下设置:

spring.datasource.url=jdbc:postgresql://db####
spring.datasource.username=#####
spring.datasource.password=######
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=60
spring.datasource.tomcat.test-on-borrow=true

spring.jpa.show-sql=false
#spring.jpa.hibernate.ddl-auto=create-drop
#spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.show_sql=false
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

spring.jpa.hibernate.connection.provider_class=org.hibernate.c3p0.internal.C3P0ConnectionProvider
spring.jpa.properties.hibernate.c3p0.min_size=1
spring.jpa.properties.hibernate.c3p0.max_size=30
spring.jpa.properties.hibernate.c3p0.timeout=120
spring.jpa.properties.hibernate.c3p0.max_statements=20

答案1

您的应用程序遭受数据库连接池耗尽的困扰:由于 Tomcat 中的工作线程数 (100) 比连接池中的可用连接数 (60) 多,因此许多线程需要等待连接可用。您与数据库的连接数至少应与工作线程数一样多。尝试:

spring.datasource.tomcat.max-active=200

评论:由于你的<Connector>没有executor属性,因此<Executor>您创建的 未被使用并且可以被删除(除非另一个连接器使用它)。

由于没有spring.jpa.hibernate.connection.provider_class属性,您尝试配置的 C3P0 连接池永远不会被创建:Hibernate 将使用通过属性配置的连接池spring.datasource.*。因此,您可以删除与 C3P0 相关的属性。

相关内容