当通过php-fpm / nginx使用image processing时减less系统负载

我们有一个基于Imagemagic的Code Igniter写的PHP图像api。 我们有nginx / php-fpm背后的api。 我们知道Imagemagic部分很重,但是我们试图使整体吞吐量越来越高。

我们已经完成了30多篇有关Nginx的优化文章。 我们能够通过大多数文章和进行TCP优化来将输出从300个请求/分钟增加到350个请求/分钟。

由此我们严重影响了服务器的加载时间。 没有平均的负载我可以告诉你,因为这是一个新的盒子,它是基于Nginx的。 我们在过去的Apache工作人员(不到300请求/分钟)。 现在有350req / m,我们有20的AVG负载。这是太多了,我们正在寻求改善。

当我们使用htop来调查进程时,通常我们会看到大约20个使用全部16个CPU的php-fpm进程,内存在24GB中有2GB。

我们旨在大幅降低系统负载。 我希望有经验的用户分享他们的知识在哪里看,尝试什么。 我会张贴你要求的任何号码,但是我不想在开始的时候把这个post填满。

你将如何继续减less系统负载,但仍然保持吞吐量。

既然我们已经确定这是一个纯CPU的问题(没有iowait),那么我真的不能看到任何保持相同的吞吐量,而不增加更多的资源。 调低PHP进程的最大数量或增加更多的CPU核心。

或者让开发者使用ImageMagick以外的东西

如果您有重复的请求,您可以检查fastcgicaching( http://wiki.nginx.org/HttpFastcgiModule )或在nginx前使用varnish。

这将使您能够caching已处理的图像,而不必再次执行繁重的cpu过程。

由于您的问题指出PHP-FPM进程在TOP cpu中,因此您使用ImageMagick PHP库( http://php.net/imagick )。

要求开发人员testingImageMagick二进制直接完成image processing的场景(例如/ usr / bin / [compare,import,display …]。

如果直接使用二进制工作,然后使用php函数exec()并将调用封装到ImageMagick二进制文件,并看看如何去(根据CPU和持续时间)。

@附加信息: https ://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed

开发人员的方式

  1. 尝试减lessimage processing的PHP开销。
  2. 尝试使用较less的资源进行image processing。 使用准备好的图像或更改一些性能要求较低的操作

pipe理方式

  1. 使用更强大的CPU