我目前正在使用AWS基础架构托pipe我的移动Web应用程序。 我使用Apache Web服务器mod_jk将请求传递给Tomcat,并使用连接池进一步与MySQL DB进行通信。 最近的服务器一直在响应缓慢。 其中一个原因是所有具有应用程序的用户在15分钟的时间间隔内随机创build一个请求(LocationUpdate)。 我相信这是减慢服务器的原因。 另外,我们也有很多用户。 我想知道如何加载平衡。
所以不知道该如何处理。 哪个configuration设置来确认。 我在互联网上search,但不知道如何弄清楚。 我应该增加Tomcat堆大小吗?
首先,您需要重新考虑一下,您的应用程序是否真的需要每隔15分钟“回家” 这不仅将burdon放到你的服务器上,而且还放在移动networking,人们的电话和数据账单上。 特别是,如果这是位置更新,则应用程序可能被编程为不发送位置的更新,如果来自上次传输的更新的GPS坐标的变化很小。
其次,你必须debugging,什么驱动了你的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
“等待”意味着你的工作正在等待磁盘完成读取或写入数据。 如果你有这个问题,那就试着减less不必要的写入磁盘(谷歌for noatime来了解更多信息),并尽量降低数据库的写入安全级别。 例如,如果在发生电源故障时,位置更新没有正确写入磁盘,那么对服务的影响可能是最小的,因为在修复发生故障的组件后恢复电源的情况下,位置将会过时。 另一方面,如果新用户注册,您希望将这些写入的主帐户数据保持为同步,这样就不会因电源或服务器故障而导致帐户丢失。
如果即使在这些变化之后,等待时间也是很长的时候,考虑更快的磁盘:有两个甚至三个磁盘的RAID 1或SSD,甚至在考虑负载平衡之前。
如果你的负载线如下所示:
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
在用户态(us)和系统模式(us)中花费了几乎所有的CPU时间,那么CPU就会超载。 检查顶部输出中标题下方的行,以了解哪些服务(如apache2,tomcat,MySQL)具有较高的cpu负载。 然后优化您的Web应用程序以减lessCPU使用量。 如果这没有帮助,请添加更多的CPU核心到您的服务器。
最后但并非最不重要的是, free检查你的记忆。 如果使用很大比例的内存,或者使用超过几千字节的交换,请添加更多的内存。