我们有一个基于 imagemagic 的用 Code Igniter 编写的 PHP 图像 api。我们有 nginx/php-fpm 后面的 api。我们知道 Imagemagic 部分很重,但我们试图使整体吞吐量越来越高。
我们浏览了 30 多篇关于 Nginx 的优化文章。通过主要关注文章并进行 TCP 优化,我们能够将输出从 300 个请求/分钟增加到 350 个请求/分钟。
通过这种方式,我们严重影响了服务器加载时间。我可以告诉你没有平均负载,因为这是一个新盒子,它是基于 Nginx 的。我们过去有 Apache 工作人员(少于 300 个请求/分钟)。现在有了 350req/m,我们的 AVG 负载为 20。这太过分了,我们正在寻求改进。
当我们使用 htop 调查进程时,通常我们会看到大约 20 个 php-fpm 进程大量使用所有 16 个 CPU,并且内存在 24GB 中的 2GB 左右。
我们的目标是大幅减少系统负载。我希望有经验的用户分享他们的知识,看看哪里,尝试什么。我会发布您要求的任何数字,但我不想在一开始就用它来填写帖子。
您将如何继续减少系统负载但仍保持吞吐量。
既然我们已经确定这是一个纯粹的 CPU 占用问题(没有 iowait),那么我真的看不出有任何方法可以在不增加更多资源的情况下保持相同的吞吐量。要么调低 PHP 进程的最大数量,要么添加更多 CPU 内核。
或者让开发人员使用 ImageMagick 以外的其他东西。
如果您有重复的请求,您可以检查 fastcgi 缓存(http://wiki.nginx.org/HttpFastcgiModule)或在 nginx 前面使用 varnish。
这将使您能够缓存已处理的图像,而不必再次执行繁重的 cpu 进程。
由于您的问题表明 PHP-FPM 进程位于 TOP cpu 中,因此我认为您正在使用 ImageMagick PHP 库(http://php.net/imagick)。
请您的开发人员测试图像处理直接由 ImageMagick 二进制文件完成的场景(例如 /usr/bin/[compare, import, display ...]。
如果直接使用二进制文件,那么使用 php 函数 exec() 并封装对 ImageMagick 二进制文件的调用,看看它是如何进行的(在 CPU 和持续时间方面)。
@附加信息:https ://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed
开发者方式
管理方式