Java tomcat多线程问题

Java tomcat多线程问题,java,multithreading,tomcat,tomcat6,cpu-cores,Java,Multithreading,Tomcat,Tomcat6,Cpu Cores,我正在编写一个java应用程序,它在多核硬件上运行在Tomcat中。 应用程序执行一个算法并将答案返回给用户。问题是,即使我同时运行两个请求,tomcat进程也最多使用一个CPU核。 据我所知,Tomcat中的每个请求都在单独的线程中执行,JVM应该在单独的CPU核心上运行每个线程 什么问题会限制JVM或Tomcat只使用一个内核 提前感谢。所有处理器管理都将由服务器自己负责。如果您传递两个请求,它应该使用两个CPU,这不是强制性的。您确定正在创建两个线程吗。您可以简单地打印线程的名称作为快速测

我正在编写一个java应用程序,它在多核硬件上运行在Tomcat中。 应用程序执行一个算法并将答案返回给用户。问题是,即使我同时运行两个请求,tomcat进程也最多使用一个CPU核。
据我所知,Tomcat中的每个请求都在单独的线程中执行,JVM应该在单独的CPU核心上运行每个线程

什么问题会限制JVM或Tomcat只使用一个内核


提前感谢。

所有处理器管理都将由服务器自己负责。如果您传递两个请求,它应该使用两个CPU,这不是强制性的。

您确定正在创建两个线程吗。您可以简单地打印线程的名称作为快速测试


如果在独立应用程序中运行算法会发生什么情况?

您是否正在执行任何会强制串行执行的同步块/方法?server.xml中的tomcat连接器配置控制请求线程池,但默认为200个线程,IIRC。

以下是在tomcat中进行负载平衡的过程


我认为这也适用于Tomcat 6,因为他们提到平衡器webapp随Tomcat 5.0及更高版本一起提供。

您使用的是哪种JVM?java版本是“1.6.0_20”,资源分配不在我们手中。但是服务器管理员可以根据内存利用率、CPU利用率等条件配置两台服务器之间的负载平衡,我自己运行tomcat,所以它应该在我手中。我确实有同步块,但据我检查,它们不会导致问题。我试着再次检查它。经过大量测试,我发现在独立应用程序中同样的问题仍然存在。我继续进行详细的分析,并决定当完整GC运行时,所有其他线程都处于休眠状态,并且我看到只有一个CPU内核在使用。问题在于,该算法是内存贪婪的,几乎所有JVM都在尝试运行完整的GC。所以在Tomcat中没有问题,我现在将检查内存使用情况,并尝试找到哪里可以节省内存浪费。我认为这个答案是正确的,因为它引导我得出了正确的结论(尽管事实上它并不能真正解决问题)。我们不是在讨论对多个服务器的负载平衡请求,而是在讨论多线程请求。