我在一台 512MB 的云服务器上运行了一个小型启动程序,并使用 htop 和 phpsysinfo 监控 CPU/内存消耗。有一次,服务器的内存耗尽,在某些情况下,内存消耗高达 90%。htop 显示 apache (httpd) 是最大的进程,某些 (httpd) 进程在某些情况下消耗高达 7.5%。对于单个 httpd 进程来说,这个数量 (7.5%) 是否太多了?有哪些建议可以减少 apache 内存消耗?
答案1
对于单个子进程来说 7.5% 听起来并不太不正常,但这完全取决于子进程应该做什么...我运行带有 apache 和 mod_perl 的系统,这些子进程变得非常庞大。
观察 Apache 子进程的内存占用情况,看看它们是否稳定下来。如果没有,请使用 MaxRequestsPerChild 来控制它们的重启频率。使用 MaxClients 来限制您拥有的并发子进程数量(以避免交换或虚拟内存不足问题)。
根据我的经验,这通常是网络服务器上的内存瓶颈。
答案2
这听起来很正常。要减少内存占用,就得找出你需要和不需要的模块,然后编译你自己的版本。不过,对于动态模块来说,这可能没多大帮助。
这是一个不错的O'Reilly 文章关于降低 Apache 内存需求。虽然有点旧,但不确定是否具有 Apache 2 带来的增强功能。