我有一台 3.5 GB 2 CPU 服务器,在 tomcat/apache 上运行,并安装了 mod.jk。我们发现服务器本身拥有大量可用内存,并且 tomcat 在 GC 方面没有出现任何异常。
我们一直在尝试对 worker.properties 中的 maxClients maxThreads 和 socket_timeout 进行不同的设置。
我们平均有大约 4000 个并发用户,估计每秒的请求数有点困难,但我想可能是 400 个(只是猜测)。
tomcat 中的 maxThreads 是否应该始终大于 httpd 中的 maxClients?如果是,那么大多少。
我们尝试将 maxClients 设置为 250,将 maxThreads 设置为 300,我们发现网络速度很慢,但是服务器看起来很正常。
另外我们的平均 httpd 大小是 10mg。
任何帮助都将非常有帮助!
谢谢
答案1
您没有说您正在使用哪个 MPM 或哪个 Tomcat 版本,所以我不能像您希望的那样精确。
AJP 默认使用持久连接。因此,默认情况下,Tomcat 的线程池中至少需要与 httpd 的 maxClients 数量相同的线程数。这往往非常低效,因为大多数连接将处于空闲状态。
有几种方法可以改善这种情况:
如果可用,请切换到 NIO AJP 连接器(Tomcat 7 及以上版本)。您需要将 Tomcat 的 AJP 连接器配置为 maxThreads > 预期并发请求数。
禁用 httpd 端的连接重用。对于 mod_jk,这意味着使用
JkOptions +DisableReuse
忽略文档中有关性能损失的警告 - 它们不正确。您仍然需要使用 maxThreads > 预期并发请求来配置 Tomcat 的 AJP 连接器。