为 Wordpress 调优 Apache/MySQL/PHP

为 Wordpress 调优 Apache/MySQL/PHP

我想知道为什么我的 Apache 进程消耗了这么多内存

我的切片规格(1.5GB RAM,CentOS 5,Apache2,PHP 5.2,MySQL)

正如您所看到的,我的顶级进程消耗了几乎一半的内存,并且当产生更多进程时,服务器几乎陷入停顿,频繁进入交换并崩溃。

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   
6817 apache    40   0  296m 103m 3920 S  0.0  6.7   0:03.52 httpd                         
6789 apache    40   0  295m 101m 3932 S  0.0  6.6   0:07.04 httpd                         
6765 apache    40   0  284m  91m 3948 S 55.1  5.9   0:12.45 httpd                         
6798 apache    40   0  284m  90m 3944 S  0.0  5.9   0:05.49 httpd                         
6542 apache    40   0  283m  90m 3956 S  0.0  5.8   0:43.25 httpd                         
6827 apache    40   0  283m  88m 3796 S  0.0  5.7   0:01.83 httpd    

有谁知道是什么原因导致 apache(和 php)消耗如此多的内存?

              total       used       free     shared    buffers     cached
Mem:          1545        827        718          0          3        111
-/+ buffers/cache:        713        832
Swap:         3071        103       2968

答案1

您几乎肯定正在运行 mod_php,这意味着您几乎肯定正在 mpm_prefork 中运行 apache。

如果性能通常都还好,直到负载导致您开始交换,那么一个快速解决方法就是开始限制 apache 的 MaxClients。如果允许 apache 随时分叉工作进程,它将在负载下开始交换。请求将排队,直到有工作进程可用,因此速度可能会变慢,但不会像因交换而死亡那样慢。

如果您确实需要更严格地调整,请考虑放弃 prefork apache mpm。这意味着将 PHP 作为 FastCGI 运行。如果您要在 FastCGI 下使用 PHP,则应考虑升级到 PHP 5.3.3,它具有更好的 FastCGI 进程管理器(--enable-fpm 配置选项)。

php-fpm/worker 比老式的 mod_php 更节省内存。然后,您可以独立于 PHP 进程数调整 apache 进程/线程数。而且,占用大量内存的 PHP 进程仅用于提供 php 驱动的内容,而不会浪费在提供静态文件上。

答案2

PID  USER   PR NI VIRT RES  SHR  S %CPU %MEM TIME+   COMMAND
6817 apache 40 0  296m 103m 3920 S 0.0  6.7  0:03.52 httpd
6789 apache 40 0  295m 101m 3932 S 0.0  6.6  0:07.04 httpd
6765 apache 40 0  284m 91m  3948 S 55.1 5.9  0:12.45 httpd
6798 apache 40 0  284m 90m  3944 S 0.0  5.9  0:05.49 httpd
6542 apache 40 0  283m 90m  3956 S 0.0  5.8  0:43.25 httpd
6827 apache 40 0  283m 88m  3796 S 0.0  5.7  0:01.83 httpd

apache 上唯一运行的程序是 wordpress 吗?我最好奇的是 PID 6765 的 CPU 使用率非常高。不知道它在做什么。就 mem%s 而言,这对于 webapp 设置来说看起来很正常,因为每个线程实际上都在运行多个工作程序。

您正在使用什么 MPM 用于 apache,以及如何配置它?

另外,如果您要发布终端转储,请以四个空格作为每行的开头。这样可以保留格式。

答案3

我的水晶球有点脏,但我猜你正在使用memcached及其 PHP 扩展。如果是这种情况,请尝试禁用它,除非您确实需要它。

另一种可能性是,你有某种操作码缓存,例如缓存、安装并配置它以使用大量内存。

你可以尝试

pmap -x `pidof apache`

看看是什么消耗了内存。

答案4

不要加载未使用的 apache 模块(例如 python、perl 等)。

使用 eAccelerator php 模块。它是 php 编译器。您可以获得更快的执行速度和更小的内存使用量。

其他用户也许也对。

相关内容