一尘不染

如何优化php进程的内存使用情况?

linux

我正在运行一个wordpress网站,每个PHP进程的使用空间约为200mb至250mb。使用16GB的ram,服务器只能处理大约70个进程。通过将虚拟内存增加到16GB,它可以处理140个。之后,负载不断增加。如果10分钟内有200个连接,则在3Ghz四核xeon处理器上服务器负载将达到20个!

我曾尝试停用所有插件,但这只会使每个进程的PHP内存使用量减少不到10%。suPHP告诉我哪个用户正在使用那么多的内存,而不告诉我wordpress代码的哪一部分。

关于如何减少内存使用的任何建议?还是升级到32GB RAM的唯一选择?

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10585 nobody    16   0 2266m 237m 199m S 21.3  1.5   1:09.17 /usr/bin/php
10597 nobody    16   0 2257m 255m 226m S 15.3  1.6   0:17.56 /usr/bin/php

pmap -d的最大输出

000000000e8b8000   27580 rw--- 000000000e8b8000 000:00000   [ anon ]
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
00002b37f2a62000   55108 r---- 0000000000000000 0fd:00000 locale-archive
mapped: 2320852K    writeable/private: 30012K    shared: 2097152K

ipcs输出

------ Semaphore Arrays --------

key        semid      owner      perms      nsems
0x000000a7 0          root      600        1
0x00000000 162529281  nobody    600        1
0x00000000 162562050  nobody    600        1
0x00000000 162594819  nobody    600        1
0x00000000 162627588  nobody    600        1
------ Message Queues --------

key        msqid      owner      perms      used-bytes   messages`

阅读 342

收藏
2020-06-03

共1个答案

一尘不染

我将总结一下丽莎为发现问题所做的工作:

  • 使用来检查单个PHP进程的内存布局pmap -d <pid>。输出显示该进程使用了​​大量共享内存:
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [

shmid=0x2d1b803a ]

  • 使用来检查共享内存区域ipcs -m。结果表明,没有人(Web服务器)创建了许多共享内存区域,以下是其中一些:
0x00000000 117964807 nobody 600 2147483648 1 dest
0x00000000 117997576 nobody 600 2147483648 1 dest
0x00000000 118030345 nobody 600 2147483648 1 dest
0x00000000 118063114 nobody 600 2147483648 1 dest
  • 在php.ini中禁用eAccelerator并删除创建的共享内存区域:

为我在ipcs -m | 切-d''-f2 | grep'^ [0-9]'; ipcrm -m $ i; 做完了

2020-06-03