我们使用 mod_php 和 mysql 在 Apache 上部署了 Magento 应用程序。我观察到有时 apache 服务器开始消耗高内存,这会导致内存交换并导致服务器上的高负载。每当 apache 服务器上有高负载时,导致高负载的 apache 进程在 mysql 端处于睡眠模式,在客户端处于 CLOSE_WAIT 状态。感谢您提供任何帮助来解决此问题。
我们使用 mod_php 和 mysql 在 Apache 上部署了 Magento 应用程序。我观察到有时 apache 服务器开始消耗高内存,这会导致内存交换并导致服务器上的高负载。每当 apache 服务器上有高负载时,导致高负载的 apache 进程在 mysql 端处于睡眠模式,在客户端处于 CLOSE_WAIT 状态。感谢您提供任何帮助来解决此问题。
@raj 您可能会发现进程处于 S 状态,因为它们正在等待受 I/O 约束的另一个进程(处于 D 状态),即。为机器停止交换。
所以关键是要解决两个关键问题,标准内存分配和内存承诺。
运行 Magento 时,只需将 PHP 最大内存限制设置得太高,就很容易在 RAM 上大量过度提交。在正常情况下,它不会产生任何不良影响,但当应用程序尝试使用该内存时,它几乎会立即进入交换状态(如果您用完了 RAM)。
然后,您可能会发现 Apache 不是内存使用的主要问题,而 MySQL 更有可能是罪魁祸首。
您没有提到您的服务器规格或商店的任何具体细节,因此无法提供准确的建议。但简单地修改您的 Apache 和 MySQL 配置将是一个简单的起点。减少 Apache 线程数、MySQL 连接数、分配的内存承诺。然后开始使用像 Munin 这样的工具绘制图表,以实际关联流量、线程、CPU 使用率和内存使用率。如果不这样做,你就是在盲目工作。
但是我建议您不要再四处寻找 netstat,因为您离诊断 TCP 状态还有很长的路要走;你需要从头开始。
去阅读一些关于 HTTP 调优和性能管理主题的好书(真的——你不太可能在这里得到答案)。
那么你的服务器配置不当 - 网络服务器永远不应该开始交换。应用通常的 apache 调整程序并减少 php 最大内存。
嗯?根据定义,休眠进程不会增加负载。mhysql到底是什么?
使用此脚本:http ://saiweb.co.uk/linux/apache/bash%20script/linux-the-sysadmin-script-part-3/
确定您的 apache 进程使用了多少内存。
然后将 apache 配置中的 MaxClients 限制为无需交换即可运行的进程数量。这样的话当问题出现的时候你的LA就不高了,你就可以找到问题的真正根源。这是我的脚本版本(上面的链接现在似乎已损坏)