FastCGI下ZendOpcache很费内存

刚刚在nginx的php下配置了ZendOpcache,结果重新加载PHP的时候,部分php-fpm进程无法启动,所有网站都是502错误,我开始以为是php.ini配置有问题,搞了半天,结果一看内存使用,卧槽,直接爆满了。

然后推敲了一下才发现这个问题:

PHP-FPM模式下,即便是同一个网站,PHP进程也可能有很多个。如果我把ZendOpcache的内存缓存大小设置为64M,那么3个进程就要占用192MB了。。。

而我用的是AMH面板,默认一个网站分配3个PHP-FPM进程,而我那个VPS上放了6个小流量网站,总共就是18个进程,光是ZendOpcache缓存都要占用18*64=1152MB内存,而我的VPS只有1G内存,所以。。。PHP启动不了了。。

同一个网站,PHP的代码缓存重叠应该很多,但由于是多个进程,PHP进程之间的内存是独立的,造成同一个PHP文件的Code缓存可能会有多个内存副本(每个PHP进程一个),造成了很大的内存浪费。

apache好像就没有这个问题。

所以,如果你用nginx(比如你用的AMH)面板,那么当你使用内存缓存器的时候,一定要注意合理设置缓存大小,特别是那种一个VPS放多个网站的,稍不注意就502了。而对于只会用面板的小白而言,谨慎安装缓存器(包括zend,xcache等等),否则可能面板都进不去了。

另外说一下,AMH模块里面的那个ZendOpcache模块,安装以后缓存大小配置的是64M,所以安装之前你得先计算好你现在有多少网站,开了ZendOpcache要占多少内存,以免内存不足。

标签: none

添加新评论