【问题标题】:JBOSS Hangs when maxThreads limit is reached达到 maxThreads 限制时 JBOSS 挂起
【发布时间】:2012-03-13 11:55:02
【问题描述】:

我有一个在 JBOSS AS 5.1 中运行的 Struts 1.3 应用程序。我们在 server.xml 文件中为 HTTP 连接器设置了 2000 个 HTTP 线程,并在 run.conf 文件中为 JBOSS 分配了 JVM 堆中大约 2GB 的 RAM。系统共有 4GB RAM,其余 RAM 正在被其他应用程序使用。

每当我的系统遇到超过 2000 个并发请求时,Jboss 就会挂起并停止工作。我没有在控制台上遇到异常或任何类型的内存不足错误,它只是挂起。

我该如何解决这个问题?我应该把 mod_cluster 或其他东西放在 JBOSS 前面吗?或者我应该只为连接器分配更多线程,如果是这样,我如何确定 HTTP 连接器上的内存和 maxThreads 之间使用的比率?

【问题讨论】:

    标签: jboss jvm struts jboss5.x server.xml


    【解决方案1】:

    2000 是一个非常高的数字。如果您确实需要它来处理 2000 个并发请求,您将需要设置多个实例并在实例之间平均分配负载。您可以在 jboss 前面设置负载均衡器或 apache+mod_jk。

    使用多少内存取决于应用程序。使用多少实例取决于实例在负载下的性能以及您是否可以获得所需的响应时间。

    【讨论】:

    • 你的意思是在同一个系统上设置多个实例吗?如果是这样,为什么这比运行单个 JBOSS 实例更有利?这是一个企业网络应用程序,因此我们需要处理 2000 多个用户。您还可以推荐一些我可以用来计算我的应用程序的每个组件正在使用多少内存的工具吗?
    • @user1266369 您不需要 2000 个连接器线程来处理 2000 个用户。除非应用程序使用非常大量网络,否则 200 可能更现实。为了获得更高的吞吐量,更多的 RAM/堆空间将有所帮助,并且有许多方法可以调整连接器以获得更好的性能。
    • 如果它是一个企业网络应用程序,您不希望一个实例为所有用户提供服务。当那个单一实例宕机时会发生什么?故障转移绝对是设置多个实例的原因之一。此外,如果该服务器上的 CPU 使用率增加,您始终可以建立另一台服务器并将第二个实例移至该服务器。
    • 我用来分析 Sun JDK 内存使用情况的工具是verbosegc 日志文件、jconsole,有时还有visualvm。但我认为他们没有提供您要求的详细信息。
    • @Mikaveli 据我所知,我的 Web 应用程序访问我的 JBOSS 服务的每个新 URL 都将在一个新的 HTTP 连接器线程中处理,直到前一个线程被释放。如果 Web 应用程序上有大量并发流量,就我的理解而言,这会迫使系统使用来自连接器的更多线程。在这种情况下,如何让 200 个线程为 2000 个用户工作?
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多