我有一个在 JBOSS AS 5.1 中运行的 Struts 1.3 应用程序。我们在 server.xml 文件中为 HTTP 连接器设置了 2000 个 HTTP 线程,并在 run.conf 文件中将 JVM 堆中大约 2GB 的 RAM 分配给了 JBOSS。系统总共有 4GB RAM,剩余 RAM 正在被其他应用程序使用。
每当我的系统遇到超过 2000 个并发请求时,Jboss 就会挂起并停止工作。我没有在控制台上遇到异常或任何类型的内存不足错误,它只是挂起。
如何解决这个问题?我应该把 mod_cluster 或者其他东西放在 JBOSS 前面吗?或者我应该为连接器分配更多线程,如果是这样,我如何确定 HTTP 连接器上的内存和 maxThreads 之间的使用比例?
最佳答案
2000 是一个非常高的数字。如果您确实需要它处理 2000 个并发请求,则需要设置多个实例并在实例之间均匀分配负载。你可以在jboss前面设置一个负载均衡器或者apache+mod_jk。
使用多少内存取决于应用程序。使用多少个实例取决于实例在负载下的性能以及是否可以获得所需的响应时间。
关于达到 maxThreads 限制时 JBOSS 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683511/