Java JVM/应用服务器线程限制

Java JVM/应用服务器线程限制,java,multithreading,jvm,Java,Multithreading,Jvm,有没有办法确定特定JVM+应用程序服务器组合可以处理多少线程?问题不仅涉及web应用程序请求服务线程,还涉及后台线程 这真的不是纯粹从Java虚拟机中就能发现的东西。它更多的是硬件/操作系统的限制,而不是VM特有的任何限制。找到这个答案的最佳方法是使用大量线程进行测试,看看性能从哪里开始下降。另请参见。这确实不是纯粹从Java虚拟机中可以发现的。它更多的是硬件/操作系统的限制,而不是VM特有的任何限制。找到这个答案的最佳方法是使用大量线程进行测试,看看性能从哪里开始下降。另请参见。这实际上取决于

有没有办法确定特定JVM+应用程序服务器组合可以处理多少线程?问题不仅涉及web应用程序请求服务线程,还涉及后台线程

这真的不是纯粹从Java虚拟机中就能发现的东西。它更多的是硬件/操作系统的限制,而不是VM特有的任何限制。找到这个答案的最佳方法是使用大量线程进行测试,看看性能从哪里开始下降。另请参见。

这确实不是纯粹从Java虚拟机中可以发现的。它更多的是硬件/操作系统的限制,而不是VM特有的任何限制。找到这个答案的最佳方法是使用大量线程进行测试,看看性能从哪里开始下降。另请参见。

这实际上取决于您运行的特定硬件(CPU数量、内存量等),也取决于操作系统(Solaris与Windows),因为底层线程依赖于操作系统提供的线程管理。它还取决于应用程序和应用程序服务器本身,因为每个线程消耗的资源量取决于应用程序。

这实际上取决于您运行的特定硬件(CPU数量、内存量等),也取决于操作系统(Solaris与Windows)因为底层线程依赖于操作系统提供的线程管理。它还取决于应用程序和应用程序服务器本身,因为每个线程消耗的资源量取决于应用程序。

对于所有实际用途来说,这是一种情况,它确实“取决于”

  • 线程在做什么
  • 他们每个人需要多少内存
  • 正在进行多少垃圾收集
  • 你有多少记性
  • 你有多少个CPU
  • 它们有多快
JavaEEAppServer应用程序往往不会自己创建线程。而是配置线程池。我从来没有遇到过这样的情况:能够再创建10个线程就可以解决问题,而应用服务器的某些限制阻止了我这么做

在不同的应用程序服务器之间进行性能比较是非常重要的,而且答案往往很脆弱——即,工作类型的微小变化可能会产生不同的答案


你为什么要问这个问题?

就所有实际目的而言,这是情境性的,它确实“取决于”

  • 线程在做什么
  • 他们每个人需要多少内存
  • 正在进行多少垃圾收集
  • 你有多少记性
  • 你有多少个CPU
  • 它们有多快
JavaEEAppServer应用程序往往不会自己创建线程。而是配置线程池。我从来没有遇到过这样的情况:能够再创建10个线程就可以解决问题,而应用服务器的某些限制阻止了我这么做

在不同的应用程序服务器之间进行性能比较是非常重要的,而且答案往往很脆弱——即,工作类型的微小变化可能会产生不同的答案


你为什么要问这个问题?

我问这个问题的原因是因为我想在web服务中进行一些异步处理。当然,最初的请求将由应用服务器定义的线程池中的一个线程提供服务,但随后该线程会产生(比方说)5个额外的线程来完成这项工作。因此,服务器可能需要的线程总数=为请求服务的线程数*每个请求的工作线程数+一定数量的后台线程。这个数字可能相当大。在我实现之前,我只是想知道JVM在这种情况下会有什么表现:)。1)线程正在处理web服务请求并在内部访问数据库和其他web服务2+3)今天,通过顺序处理,它们花费5-6MB/请求4)可用内存:2GB 5)1 CPU 6)取决于后端系统响应任何应用程序服务器的体系结构允许以某种方式以受控方式生成其他工作线程、异步作业队列等。使用这些,您应该能够在正常服务线程和其他工作线程之间取得平衡。如果web服务正在做非常繁重的工作,那么“submitJob,getJobResult”操作对可能会工作得很好。我问这个问题的原因是因为我想在web服务内部进行一些异步处理。当然,最初的请求将由应用服务器定义的线程池中的一个线程提供服务,但随后该线程会产生(比方说)5个额外的线程来完成这项工作。因此,服务器可能需要的线程总数=为请求服务的线程数*每个请求的工作线程数+一定数量的后台线程。这个数字可能相当大。在我实现之前,我只是想知道JVM在这种情况下会有什么表现:)。1)线程正在处理web服务请求并在内部访问数据库和其他web服务2+3)今天,通过顺序处理,它们花费5-6MB/请求4)可用内存:2GB 5)1 CPU 6)取决于后端系统响应任何应用程序服务器的体系结构允许以某种方式以受控方式生成其他工作线程、异步作业队列等。使用这些,您应该能够在正常服务线程和其他工作线程之间取得平衡。如果web服务正在做非常繁重的工作,那么“submitJob,getJobResult”操作对可能工作得很好。