2012-04-27 85 views
8

我正在运行一个wordpress站点,每个PHP进程使用大约200mb到250mb的常驻大​​小内存。使用16GB内存,服务器只能处理大约70个进程。通过将虚拟内存增加到16GB,它可以处理140.之后,负载持续上升。如果10分钟内有200个连接,则3Ghz四核xeon处理器的服务器负载将达到20个!如何优化php进程的内存使用情况?

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

有关如何减少内存使用的任何建议?或者是我升级到32GB内存的唯一选择?从PMAP

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 

最大输出-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` 
+0

您是否已经尝试安装APC或某些类似的操作码缓存解决方案? – raina77ow 2012-04-27 15:40:34

+0

是的。我正在使用eAccelerator和Zend Optimizer。 APC目前不包含在cPanel中。另外两个可以用easyapache编译。 – Lisa 2012-04-27 15:48:23

+0

奇怪的是,我正在运行一些托管服务器,大多数PHP实例消耗7到50 MB的RSS内存。我的建议是:1.升级到PHP 5.4(由于减少了内存占用)。 2.在wordpress前安装一些反向代理(如清漆)。 – strkol 2012-04-27 16:15:29

回答

5

我会总结一下丽莎没有发现问题:

  • 检查一个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 
  • 禁用eAccelerator在php.ini中并删除创建的共享内存区域:

我在`ipcs -m |剪下-d''-f2 | grep'^ [0-9]';做ipcrm -m $ i;完成

2

拉斯姆斯·勒多夫做了一个关于在Confoo PHP运行情况发布会上,2010年,他用一个WordPress博客作为一个例子,这应该给你很好的工具来回答你的问题:

http://talks.php.net/show/confoo10/1

综上所述:

  • 运行phpinfo(),并禁用您不使用PHP扩展。他们可以占用很多内存(imagick,curl,...)
  • 使用inclued.so扩展名生成包含图。你可能会在你的wordpress设置中加载无用的函数。
  • siege运行基准。有时,微小的优化对性能有很大的影响,因此请确保您有指标,以帮助您做出决定。
  • 使用callgrind来显示你失去表现的位置。在我的一个项目中,我使用md5()来散列我的SQL查询并缓存它们。 md5()调用时使用20%的CPU时间。

我肯定会先禁用PHP扩展,如果可能的话。

+1

谢谢。 Strkol发现eaccelerator是问题所在。禁用时,PHP每个进程仅使用60m至80m RES。 – Lisa 2012-04-27 21:13:51

+0

@Lisa没问题。如果您有机会,请查看Rasmus Lerdorf建议的工具。这是一个很棒的谈话! – Tchoupi 2012-04-27 21:22:31

+0

问题是关于内存而不是速度优化。 – 2014-09-02 06:38:49

相关问题