有时 Apache2 会不断生成新进程,直到内存完全耗尽并且所有网站都变得非常非常慢。
我编写了一个 bash 文件并创建了一个 cron 作业,每分钟检查一次内存使用情况。如果超过 90% apache2 会重新启动。
这解决了速度慢的问题,但是这个解决方案有任何危险的副作用吗?
答案1
不要通过 cron 作业重新加载/重新启动服务器。如果服务器负载过重,您是否希望每分钟重新启动一次服务器?如果服务器无法重新启动会发生什么情况?
您应该确定 Apache 进程的平均大小以及您希望为所有 Apache 进程花费多少可用内存,并相应地设置MaxRequestWorkers
(MaxClients
在 Apache2.4 之前)指令,您当前的值太高了。
该值的指示符MaxRequestWorkers
可以是达到 90% 限制时的 Apache 进程数。
影响网络服务器性能的最大硬件问题是 RAM。网络服务器永远不应该进行交换,因为交换会增加每个请求的延迟,超出用户认为“足够快”的程度。这会导致用户点击停止并重新加载,进一步增加负载。您可以而且应该控制最大请求工作者数 设置以便您的服务器不会产生太多的子进程而开始交换。执行此操作的过程很简单:通过 top 等工具查看进程列表,确定平均 Apache 进程的大小,并将其划分为总可用内存,为其他进程留出一些空间。
进一步阅读:
- 性能配置(Apache 2.5 文档)