使用 Apache 反向代理和 Postgresql 调整 Tomcat Java 应用程序

使用 Apache 反向代理和 Postgresql 调整 Tomcat Java 应用程序

看起来我的 Apache 反向代理可能成为了瓶颈,并减少了用户发出的请求数量。

我在 server1 上运行 Apache 和 Tomcat,它有 96 GB RAM、rhel5 x64、24 核。相当强大。

Postgresql 数据库在 server2 上运行,具有 50gb RAM、rhel5 x64、24 核。

Tomcat 配置为使用 60gb 内存(我可以根据需要增加或减少)。我每分钟处理数百次点击(既有来自用户的点击,也有远程 API 调用的点击),Apache 似乎跟不上。

我应该在 httpd.conf 中增加哪些设置以确保它有额外的内存?我还读到,apache 中的线程数与数据库线程数直接相关。我的 postgres 服务器确实很强大,还没有发挥出它的潜力,但我不想以牺牲另一个为代价来增加一个。那么我该如何找出两者的正确设置呢?

Apache 正在处理我的 SSL,服务于 443。Tomcat 有一个端口为 8080 的连接器。

我是否应该增加 Apache 的工作进程数量?或者为它们提供更多内存?

答案1

你只是在猜测。你增加了 Tomcat 和 Apache 上的最大连接数了吗?你增加了 Tomcat 应用程序数据库连接池中的连接数和 PostgreSQL 中的最大连接数了吗?尝试增加这 4 个值,看看会发生什么。

此外,使用 60GB 内存的 Tomcat 也不是一个好主意。每隔一段时间,每个 Java 垃圾收集器(无论哪个)都会暂停一次。暂停时间与内存量成正比。在此期间,您的系统将完全没有响应。使用 60GB 内存,暂停时间可能长达 60 秒。尝试生成多个较小的 Tomcat 实例并使用 mod_jk 负载平衡。

祝你好运

答案2

在 Tomcat 服务器上启用 GG 日志记录并监控内存使用情况。我的目标是每 10 到 15 秒执行一次新一代 GC。对于在线应用程序,您可能需要考虑使用并发 GC。我的目标是每小时或两小时执行一次旧代 GC,如果应用程序停止时间太长,则更频繁地执行。

如果 Apache 无法处理负载,我会感到惊讶。监控活动连接数。如果用完了,则可能需要增加子进程数和/或每个子进程的连接数。HTTP 1.1 可以增加所需的连接数。如果您增加了保持活动超时,请考虑减少它。

相关内容