Tomcat、Apache、MySQL 调优

Tomcat、Apache、MySQL 调优

我目前正在使用 AWS 基础设施来托管我的移动 Web 应用程序。我使用 Apache Web 服务器 mod_jk 将请求传递给 Tomcat,后者使用连接池进一步与 MySQL DB 通信。最近,服务器响应缓慢。原因之一是所有使用该应用程序的用户以 15 分钟的间隔随机触发一个请求(LocationUpdate)。我认为这就是服务器速度变慢的原因。另一个原因是我们也有很多用户。我想知道如何对此进行负载平衡。

  1. 我不确定 Apache 是否无法处理这么多的网络请求。
  2. 或者是 Tomcat 无法处理它们。

所以不确定我该如何处理。要确认哪些配置设置。我确实在互联网上搜索过,但不确定如何解决。我应该增加 Tomcat 堆大小吗?

答案1

首先,您需要重新考虑,您的应用是否真的需要每 15 分钟“打电话回家”一次!这不仅会给您的服务器带来负担,还会给移动网络、人们的手机和他们的数据账单带来负担。特别是,如果这是位置更新,如果 GPS 坐标与上次传输更新相比的变化很小,则应用可能会被编程为不发送位置更新。

其次,您必须调试导致 Web 服务器负载增加的原因。使用top显示负载详细信息。特别值得关注的行如下所示:

Cpu(s):  3.0%us,  6.0%sy,  1.6%ni, 85.9%id,  0.4%wa,  0.0%hi,  3.0%si,  0.0%st

这是来自一个负载较轻的服务器,空闲率为 86% - 所以在我的示例中一切正常。对于您来说,它可能看起来像以下内容:

Cpu(s):  3.0%us,  6.0%sy,  1.6%ni, 4.9%id,  81.4%wa,  0.0%hi,  3.0%si,  0.0%st

过度的“等待”意味着您的作业正在等待磁盘完成读取或写入数据。如果您遇到此问题,请尝试减少不必要的磁盘写入(请谷歌搜索以noatime了解更多信息),并尝试降低数据库的写入安全级别,以确保安全。例如,如果在发生电源故障时位置更新未正确写入磁盘,则对您的服务的影响可能很小,因为在修复故障组件后恢复电源时,位置信息无论如何都会过时。另一方面,如果有新用户注册,您希望将这些写入主帐户数据的操作保持同步,这样您就不会因电源或服务器故障而丢失帐户。

如果即使在这些更改之后,等待时间仍然很长,请考虑更快的磁盘:具有两个甚至三个磁盘或 SSD 的 RAID 1,然后再考虑负载平衡。

如果您的负载线如下所示:

Cpu(s):  43.0%us,  42.0%sy,  1.6%ni, 4.9%id,  5.4%wa,  0.0%hi,  3.0%si,  0.0%st

几乎所有 CPU 时间都花在用户空间(us)和系统模式(us)上,那么您的 CPU 就超载了。检查顶部输出中标题下方的行,找出哪些服务(如 apache2、tomcat、MySQL)的 CPU 负载较高。然后优化您的 Web 应用程序以减少 CPU 使用率。如果这没有帮助,请为您的服务器添加更多 CPU 核心。

最后,但并非最不重要的一点,使用 检查您的内存free。如果使用了大量内存,或者交换使用量超过几千字节,请添加更多内存。

相关内容