需要改进apache和mysqlconfiguration。 当前的configuration是由于内存最大化而崩溃的服务器?

好吧,我们运行一个不断增长的汽车零件购物车。 我们的服务器运行缓慢,总是崩溃,所以我们要求我们的虚拟主机来协助我们。 他们给我们这些报告,但我需要一些build议如何处理。

我们现在的计划是采用MySQL数据库并将其托pipe在AWS上,但是我需要知道如何确定我们需要的实例大小以及哪种服务最适合。

我也需要知道任何调整,以提高性能的Apache。

这是networking主机发送给我们的分析

这些问题的出现方式是:

1)Web应用程序超大的RAM占用空间大于512M,加上不正确的Apache调整,使得这些Web应用程序进程消耗的内存比服务器上可用的RAM多。

2)像Apache这样的服务器上的MySQL服务被调整为分配比您的服务器上可用的更多的RAM。 这使得MySQL服务不稳定,因此需要重新启动才能解决问题,如果正确调整不使用比已安装的更多的RAM,就不会出现问题。

APACHE

您的服务器的Apache MaxClients设置是默认== 256

您的服务器有32232 MB的内存

最大的Apache Web应用程序进程正在使用572.73 MB的内存

最小的Apache Web应用程序进程使用35.02 MB的内存

平均Apache Web应用程序使用94.93 MB的内存

按照Apache的平均stream程,Apache可能使用24302.09 MB RAM(可用RAM的75.40%),

按照最大的Apache进程,Apache可能使用146618.89 MB RAM(可用RAM的454.89%),

如果您仅将服务器的RAM的100%分配给Apache Web应用程序进程,则您的服务器的Apache MaxClients设置应不大于50。

最大潜在的内存使用量:146618.88 MB(可用RAM的454.89%)

分配给Apache的RAM的百分比454.89%

注意:这个分析并没有考虑到任何其他进程,比如在你的服务器上运行的MySQL数据库服务,这也需要大量的RAM资源来有效地运行,目前最less是1.2GB的RAM。

MySQL的

-------- Performance Metrics ------------------------------------------------- [--] Up for: 14h 11m 51s (9M q [195.147 qps], 41K conn, TX: 22B, RX: 1B) [--] Reads / Writes: 59% / 41% [--] Total buffers: 1.6G global + 5.0G per thread (151 max threads) [!!] Maximum possible memory usage: 756.7G (2403% of installed RAM) [OK] Slow queries: 0% (2K/9M) [OK] Highest usage of available connections: 23% (35/151) [OK] Key buffer size / total MyISAM indexes: 1.0G/2.2G [OK] Key buffer hit rate: 100.0% (9B cached / 1M reads) [OK] Query cache efficiency: 90.4% (8M cached / 9M selects) [!!] Query cache prunes per day: 725309 [OK] Sorts requiring temporary tables: 0% (0 temp sorts / 147K sorts) [!!] Joins performed without indexes: 1544 [!!] Temporary tables created on disk: 47% (96K on disk / 203K total) [OK] Thread cache hit rate: 99% (59 created / 41K connections) [!!] Table cache hit rate: 5% (512 open / 10K opened) [OK] Open file limit used: 1% (910/65K) [OK] Table locks acquired immediately: 99% (2M immediate / 2M locks) [!!] Connections aborted: 6% 

build议的MySQL缓解措施:

运行OPTIMIZE TABLE进行碎片整理以获得更好的性能

减less您的整体MySQL内存足迹,以保持系统稳定性

调整连接查询以始终使用索引

临时表大小已经很大 – 减小结果集的大小

减less不带LIMIT子句的SELECT DISTINCT查询

您的应用程序没有正确closuresMySQL连接,开发人员修复代码,以便在返回查询结果时显式closuresMySQL连接。

如果您将MySQL和Apache托pipe在同一台服务器上,只需将它们移动到不同的机器上就可以获得性能提升。 MySQL喜欢使用RAM来caching数据,但是如果你正在做大量的写操作(它看起来不像你),你不会看到很多的改进。

另外你可能会考虑的是获得一个负载均衡器,并在其后面启动两个Web服务器。 这会让你得到更小的实例,并将风险分散出去。 AWS在给定的可用区域内有多个区域(如1a,1b等),您可以将数据库放在1a中,坐在1b中的多个数据库副本也可以坐在区域中。 如果1a下降,则自动故障转移到1b。 负载平衡器将确保您也分stream服务器之间的stream量意味着更less的机会超载。

对于所有这一切,我build议你尝试以下

  • 运行mysqltuner ,看看你是否可以先调整你的数据库。 您将需要这些信息来帮助您稍后调整您的RDS实例
  • 把你的分贝进入m3.medium或m3.large。 请记住,如果您发现超负荷,则可以稍后更改实例types
  • 为您的Web服务器使用两个m3.medium EC2实例。 负载平衡,我敢打赌,他们的performance比现在的单片服务器更好。 考虑使用像Opsworks这样的服务器configuration系统来简化设置。 如果您发现您的服务器过载,您可以随时使用该脚本来按需启动新服务器并共享负载。

你正在使用哪个apache processusbuild模? 或者听起来像是瓶坯。 预制件现在已经过时了,并且还有其他的mpm,用于Apache,其内存占用更less。 并不是所有的应用程序都支持它们,但是大多数应用程序至less应该与Apache amp工作者合作 这应该允许保持并且可能增加并发客户端的数量,同时使用更less的内存。