好吧,我们运行一个不断增长的汽车零件购物车。 我们的服务器运行缓慢,总是崩溃,所以我们要求我们的虚拟主机来协助我们。 他们给我们这些报告,但我需要一些build议如何处理。
我们现在的计划是采用MySQL数据库并将其托pipe在AWS上,但是我需要知道如何确定我们需要的实例大小以及哪种服务最适合。
我也需要知道任何调整,以提高性能的Apache。
这是networking主机发送给我们的分析
这些问题的出现方式是:
1)Web应用程序超大的RAM占用空间大于512M,加上不正确的Apache调整,使得这些Web应用程序进程消耗的内存比服务器上可用的RAM多。
2)像Apache这样的服务器上的MySQL服务被调整为分配比您的服务器上可用的更多的RAM。 这使得MySQL服务不稳定,因此需要重新启动才能解决问题,如果正确调整不使用比已安装的更多的RAM,就不会出现问题。
您的服务器的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。
-------- 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议你尝试以下
你正在使用哪个apache processusbuild模? 或者听起来像是瓶坯。 预制件现在已经过时了,并且还有其他的mpm,用于Apache,其内存占用更less。 并不是所有的应用程序都支持它们,但是大多数应用程序至less应该与Apache amp工作者合作 这应该允许保持并且可能增加并发客户端的数量,同时使用更less的内存。