我有一个带有嵌入式 tomcat 服务器的 spring boot 应用程序。max-threads
的设置tomcat
当前设置为 250。除此之外,spring boot 应用程序还使用数据库MySql
作为datasource
。为了管理数据库连接,它使用Hikari
设置为最多 10 个数据库连接的连接池。
最大并发请求线程数和最大并发数据库连接数相差很大。我的问题是:我是否应该将设置降低max-threads
到 10,以便每个请求始终有一个可用的数据库连接?
我还想知道,当所有 10 个请求线程都被占用,而第 11 个请求到来时,会发生什么情况,该请求会被退回吗?如果是这样,那么也许我应该将设置保持max-threads
在 10 以上一点。
谢谢
答案1
我无法给出一个普遍的答案,但 Atlassian 建议数据库连接数比 max_threads 多 20% 左右。给出的原因是,应用程序可能会打开除 http 线程导致的连接之外的其他数据库连接。所以,我会说“是”。
如果数据库连接耗尽,您将收到一条错误消息。如果您的应用程序对此很稳健,它可能会等到一个连接被释放。如果它对此不稳健,应用程序可能会崩溃。Confluence 切换到错误模式。用户只会看到一个错误屏幕。
如果 max_threads 已耗尽,则表示 accept-queue 已满。如果所有 accept-queue 都已满,则表示服务器已成功停止运行。