记Nfs引起的php执行缓慢

多台PHP服务器,  为方便管理,使用NFS共享程序文件(用过sersync实现实时同步),在访问量少的情况没啥问题,当php-fpm进程数与访问量上来后,

php-fpm错误日志报告大量执行超时;
系统日志报告大量php-fpm进程段错误或其它错误信息;
php服务器负载变得出奇的高,cpu,mem,io等负载都很低;
在Top中nfs的rpc进程排在前面;

由于单一访问可能加载上百的php程序文件,即使使用xcache缓存了opcode, 但还需要判断文件是否被修改,如下流程所示
xache原理

如果能减少从网络获取文件信息的大量操作,那此问题就能得到很大程度的解决,opcache很早就知道,只认为是与xcache, apc, ea之类的类似缓存或缓存opcode之类的,当时也就懒得理它,后来仔细查看有我们所期望的参数,在一时间间隔内不判断php文件修改时间

opcache.validate_timestamps(默认值:1)
禁用时, 您必须手动重置Zend Optimizer +或重新启动Web服务器,以使文件系统的更改生效. 检查的频率是由指令 “opcache.revalidate_freq” 控制.

opcache.revalidate_freq(默认值:2)
多久(以秒为单位)检查文件时间戳以改变共享内存的分配.”1″ 表示一秒校验一次, 但是是每个请求一次. “0″ 表示总是在校验.

通过ab测试发现qps还有20%左右的提高,最关键的是服务器top中看不到nfs的rpc进程身影,到此问题解决

opcache命中率

参考
xcache: http://blog.linuxeye.com/361.html
opcache: http://blog.haohtml.com/archives/14646

 

发表评论

您的电子邮箱地址不会被公开。