我正在编写一个在多核硬件上运行在 Tomcat 中的 java 应用程序。应用程序执行算法并将答案返回给用户。问题是,即使我同时运行两个请求,tomcat 进程也最多使用一个 CPU 内核。
据我了解,Tomcat 中的每个请求都在单独的线程中执行,JVM 应该在单独的 CPU 内核上运行每个线程。
限制 JVM 或 Tomcat 使用不超过一个内核的问题可能是什么?
提前致谢。
我正在编写一个在多核硬件上运行在 Tomcat 中的 java 应用程序。应用程序执行算法并将答案返回给用户。问题是,即使我同时运行两个请求,tomcat 进程也最多使用一个 CPU 内核。
据我了解,Tomcat 中的每个请求都在单独的线程中执行,JVM 应该在单独的 CPU 内核上运行每个线程。
限制 JVM 或 Tomcat 使用不超过一个内核的问题可能是什么?
提前致谢。
所有处理器管理都将由服务器本身负责。如果您传递两个请求,则不必使用两个 CPU。
您确定正在创建两个线程吗?您可以简单地打印线程名称作为快速测试。
如果您在独立应用程序中运行算法会发生什么?
您是否正在执行任何会强制串行执行的同步块/方法?server.xml 中的 tomcat 连接器配置控制请求线程池 - 但默认值为 200 个线程,IIRC。
这是在 tomcat http://tomcat.apache.org/tomcat-5.5-doc/balancer-howto.html中进行负载平衡的过程
我认为这也适用于 Tomcat 6,因为他们提到平衡器 webapp 随 tomcat 5.0 及更高版本一起提供。