PHP 7.2 + NGINX
你好。我有一个问题-如何通过调整设置来提高php的性能。机器CPU 8c/16t,ram 64 8c。
当前设置:
pm动态
max_children 64
max_request %0
tcp套接字
我在达到max_children设置时经常遇到问题,所发生的是100%的CPU负载。我的RAM没有问题,总是使用大约22 do的内存(不仅仅是PHP,还有其他一些东西)。我一直在日志中查看以考虑设置更高的子池,但是当我已经有64个子程序的100% CPU负载时,这是否有意义呢?我只找到了如何根据内存限制计算最大子池的方法,但是CPU呢?
ps。我有一个HTTP缓存服务器,我能够通过改进缓存规则来减少负载,但我只想知道是否有比目前更好的设置。
发布于 2019-12-14 05:13:47
当我已经有64个孩子的100%的CPU负载时,
是否有意义?
是的,确实如此。如果您的RAM真的允许更多的工作进程,无论如何,增加它们。这将减少不必要的进程分叉(从而减少CPU的使用)。
max_request 0
这有点危险,因为它意味着第三方库中没有内存泄漏(这是可以的)。更安全的做法是将其设置为例如10000,以便在10k请求后回收工作进程。
通常,除了调优pm.max_children
、pm.max_requests
和pm
类型之外,您对PHP的优化也无能为力。
如果您可以使用static
pm
,那么PHP将分配已知数量的工作进程,而且根本没有分叉。这是配置PHP的最佳方法,特别是如果您只有一个专用于PHP的服务器(这需要对max_children
的理想值进行大量的实验)。
您可以大大改进的地方是使用PHP OPCache。确保它是启用的。然后使用cachetool
监视是否为它分配了足够的内存。
OPCache的一个好的设置是禁用validate_timestamps
,因此它将永远不会重新检查validate_timestamps
文件的更改。之所以它是好的,是因为您的脚本将在“解析”状态和“从”内存中运行。因此,解析它们不会导致缓慢的磁盘读取或CPU影响,并且更接近二进制程序的运行方式。
禁用时间戳验证意味着在部署策略中使用清除OPCache。同样,cachetool
在这里是有帮助的(如果git是部署的话,cachetool opcache:reset
在git钩子中)。
最后,您真的需要在使用这种CPU的同时调整PHP吗?可能不会。这种CPU的使用保证了对缓存的配置,例如Varnish或NGINX Fastcgi cache或至少NGINX微缓存。
https://stackoverflow.com/questions/59335153
复制相似问题