Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat—HTTP连接器maxThreads/acceptCount与JDBC池maxActive之间的比率_Java_Tomcat_Httpconnection_Jdbc Pool - Fatal编程技术网

Java tomcat—HTTP连接器maxThreads/acceptCount与JDBC池maxActive之间的比率

Java tomcat—HTTP连接器maxThreads/acceptCount与JDBC池maxActive之间的比率,java,tomcat,httpconnection,jdbc-pool,Java,Tomcat,Httpconnection,Jdbc Pool,是否有某种常识可以接受的比例 HTTP连接器maxThreads(处理用户请求的最大HTTP线程数) HTTP连接器acceptCount(当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度) 数据库池maxActive(池中的最大数据库连接数)配置属性 当涉及到大量使用tomcat数据库的基于web的应用程序时 我的意思是,例如,我们几乎每个HTTP请求连接都在密集地使用数据库。因此,当我们有,例如,更少配置的DP池maxActive(例如100),而HTTP连接器maxThr

是否有某种常识可以接受的比例

  • HTTP连接器maxThreads(处理用户请求的最大HTTP线程数)
  • HTTP连接器acceptCount(当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度)
  • 数据库池maxActive(池中的最大数据库连接数)配置属性
当涉及到大量使用tomcat数据库的基于web的应用程序时

我的意思是,例如,我们几乎每个HTTP请求连接都在密集地使用数据库。因此,当我们有,例如,更少配置的DP池maxActive(例如100),而HTTP连接器maxThreads(例如200)是两倍大。 然后,可以在HTTP连接之间共享一个相同的DB连接。这可能会导致大量数据库使用/数据库暂停连接

我知道大多数情况下的web HTTP请求配置与数据库池配置没有关系,但是属性之间的比率(maxThreads/acceptCount maxActive)是否存在常见的情况/实践?例如,HTTP maxThreads比DB maxActive大是一种常见的做法(但根据我们的示例,认为100%大太多了-可以是20%或50%最大值?)并且假设我们有一个更大值的accpetCount,以便在应用程序处理其他HTTP请求时对HTTP请求进行排队


这里有一个类似的问题:但没有更准确的答案,首先,有一些澄清:

  • 线程之间不共享JDBC连接,以避免破坏隔离要求。如果池耗尽,请求将在队列中等待,直到分配连接或发生超时
  • 当请求到达maxThreads值时,将为其提供服务,任何额外的请求都将放置在acceptCount值之前的队列中
acceptCount:当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度

  • maxActive是您示例中的瓶颈,因此超出该数字的请求将等待db连接。更准确地说,瓶颈在db连接池上。您不会得到停止的db连接,而是等待池中连接的线程
也就是说,找到这些值之间的比率没有多大价值,因为maxActive将施加限制maxThreads>=maxActive是显而易见的经验法则

maxThreads将永远无法访问,除非您的应用程序负载如此,否则您的数据库池应该能够处理该负载,否则您的应用程序将失败

在这种情况下,调整性能更多的是调整数据库连接池和线程池动态,而不是设置限制。一旦达到限制,就没有什么可做的了,要么找到导致速度缓慢的代码,要么放大

池动态指的是最小空闲连接/线程数、保持空闲的时间、一次在池中创建多少个新条目等

希望这有帮助


.

感谢路易斯的描述性回复。根据您的意见,为了避免http线程等待DB连接(我们假设用户http请求正在密集使用DB),可能需要使maxActive和maxThreads的值更相似,这意味着maxThreads的值不会比maxActive的值大太多,在这种情况下,我们可能会遇到一些前端暂停连接(因为前端http线程将等待可用的db连接)?例如,maxActive=100和maxThreads=130或类似-但默认情况下不能是maxThreads=200数量的两倍/三倍,为什么不保持原样?降低该值不会提高性能。另一方面,连接中断可能是由于应用程序未及时应答造成的。也许maxActive=100对于您的工作负载来说是不够的。性能调优是关于查找瓶颈并解决它们,而不是设置限制。是的,但是在我们的例子中,http线程正在等待来自池的db连接,当db池已满时,所有db连接都被其他http线程使用。使用相似的值创建这两个属性可能会避免暂停连接,并水平扩展应用程序本身(实例数)。不幸的是,增加每个实例的db连接数将在另一方面限制db连接到db实例的db限制。最后是H scale up/maxThreads/maxActive的组合-diff perf tests将显示最佳组合。因此,如果我需要任何http请求的jdbc连接,设置maxThreads==maxActive是否良好?如果我有一些其他线程(cron或其他什么)可能是maxThreadsmaxThreads不是常见的情况,我想,在这种情况下jdbc池可能会过大。