全球主机交流论坛

标题: FastCGI下ZendOpcache好浪费内存 [打印本页]

作者: 阔空晴云    时间: 2014-6-19 04:51
标题: FastCGI下ZendOpcache好浪费内存
本帖最后由 阔空晴云 于 2014-6-19 05:06 编辑

刚刚在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要占多少内存,以免内存不足。
作者: Kslr    时间: 2014-6-19 06:35
不清楚,没碰到,PHP5.5已集成
作者: tyucom    时间: 2014-6-19 09:17
楼主用的OVZ  一代么?

php探针真实内存占用多少。

你设置的64应该只占64吧。你可以下载一个 opcache 传上去检测一下 缓存占用。

gist.github.com/ck-on/4959032/?ocp.php       下载一个传上去看他占多少
作者: cst4you    时间: 2014-6-19 10:15
内存大, 内存换速度
作者: 阔空晴云    时间: 2014-6-19 10:56
tyucom 发表于 2014-6-19 09:17
楼主用的OVZ  一代么?

php探针真实内存占用多少。

我看了,每个网站下的那个缓存是独立的,那个ocp.php放到不同的网站下面,检测出来的缓存信息不一样,也就证明了我说的话,每个php-fpm都会各自开辟独立的zendopcache缓存,而不是共用一个
作者: 雨宫音羽    时间: 2014-6-20 11:48
AMH下每个网站下的肯定是独立的 都chroot了 FPM不一样

至于不同FPM子进程占用不同缓存区的说法 我很肯定不存在。。我1G KVM VPS上开了20个FPM子进程 128M缓存区 压力测试wp-login.php以后也没爆内存 只比启动时多占用了200M内存而已

照楼主的说法我内存早爆了。。
作者: 阔空晴云    时间: 2014-6-20 13:15
雨宫音羽 发表于 2014-6-20 11:48
AMH下每个网站下的肯定是独立的 都chroot了 FPM不一样

至于不同FPM子进程占用不同缓存区的说法 我很肯定不 ...


子进程我不敢确定,但nginx的fpm不同网站占用独立的缓存区与apache相比太费内存了




欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4