AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 487336
Accepted
Christian
Christian
Asked: 2013-03-14 00:11:23 +0800 CST2013-03-14 00:11:23 +0800 CST 2013-03-14 00:11:23 +0800 CST

NGINX/PHP-FPM cpu 峰值和失控进程

  • 772

最近我切换到 NGINX/PHP-FPM 来运行我的论坛。

大多数时候,该网站运行得非常好,速度非常快,我对此非常满意。它在 AWS 的 13 核/30+GB 内存实例上,因此资源充足(在 Apache 之前是 8 核,16GB。)

所以,发生的情况是,大多数时候我们有 6 或 7 个 PHP-FPM 进程,并且一切都很好;

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27676 apache    20   0  499m  34m  19m R 49.2  0.1   0:06.33 php-fpm
27669 apache    20   0  508m  48m  24m R 48.2  0.1   0:10.84 php-fpm
27661 apache    20   0  534m  75m  26m R 45.9  0.2   0:16.18 php-fpm
27671 apache    20   0  531m  69m  21m R 43.9  0.2   0:09.85 php-fpm
27672 apache    20   0  501m  41m  23m R 32.9  0.1   0:09.18 php-fpm
27702 apache    20   0  508m  40m  16m R 23.6  0.1   0:00.94 php-fpm

嗯,还不错。使用了很多 CPU,但只有少数几个,所以还算可以。

然后,似乎无处不在,我生成了一堆进程(上次我们有 52 个),每个进程都使用 8% 的 CPU。你不需要擅长这个就知道 52 * 8 很多。

现在,我将 max_children 设置为 40(原来是 50。)

pm.max_children = 40
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 100

php.ini 中的内存限制为 128mb。

所以,我明白为什么我有这么多进程 - 没关系,我已经配置了它们。我很好奇的是,如果我们每个进程有 8% 的 cpu - 是不是太多了?而且,也许我的流程活得太久了?

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     26575  0.0  0.0 499572  4944 ?        Ss   18:23   0:01 php-fpm: master process (/etc/php-fpm.conf)
apache   28161 16.1  0.1 516644 47588 ?        S    19:06   0:08 php-fpm: pool www
apache   28164 18.0  0.1 525044 59644 ?        S    19:06   0:07 php-fpm: pool www
apache   28166 18.6  0.1 513152 41388 ?        R    19:06   0:06 php-fpm: pool www
apache   28167 23.2  0.1 515520 47092 ?        S    19:06   0:07 php-fpm: pool www
apache   28168 15.2  0.1 515804 49320 ?        S    19:06   0:04 php-fpm: pool www
apache   28171 17.3  0.1 514484 43752 ?        S    19:06   0:04 php-fpm: pool www

在我写这篇文章的时候,是晚上 7:08——所以子进程已经运行了 2 分钟,并且可能在这段时间内服务了很多(论坛 atm 上有 700 人。)

所以 - 非常热衷于听取建议/批评/意见。最近我有太多的停机时间,我即将再次设置 Apache,我很乐意坚持下去。

提前致谢。

编辑
这是 Bitnami 图表,显示尖峰及其发生的速度(这是 24 小时) CPU 使用率图

编辑#2
nginx.conf 可以在这里找到。

编辑#3
我提高了我的数字。它看起来不错,但仍然让我有点紧张。

pm.max_children = 100
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 50
pm.max_requests = 500

编辑#4
所以,我有更多的停机时间,我已经设置了 Splunk 和 New Relic 来帮助我监控正在发生的事情。似乎没有 CPU 等待时间,我还有空闲内存。

top - 17:30:37 up 10 days, 19:20,  2 users,  load average: 24.61, 37.34, 25.68
Tasks: 151 total,  20 running, 131 sleeping,   0 stopped,   0 zombie
Cpu0  : 71.8%us, 27.9%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu1  : 73.7%us, 26.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 70.8%us, 29.2%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  : 69.3%us, 30.7%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  35062648k total, 28747980k used,  6314668k free,   438032k buffers
Swap:        0k total,        0k used,        0k free, 16527768k cached

看着 Splunk 它似乎不像它的流量 - 我确实受到了 Googlebot 的重创,我对此表示怀疑,但没有具体的。

nginx
  • 1 1 个回答
  • 7015 Views

1 个回答

  • Voted
  1. Best Answer
    symcbean
    2013-03-14T02:52:12+08:002013-03-14T02:52:12+08:00

    嗯,还不错。使用了很多 CPU,但只有少数几个,所以还可以

    进程所做的工作量由它使用的 CPU 量决定——因此它是使用率 x 使用时间。因此,如果您的 PHP 进程占用了大量 CPU,那么这通常是一件好事——这意味着它不会等待其他事情发生。从系统管理员的角度来看,您可以让更多的 CPU 可用于其他任务 - 但您会增加 PHP 进程处理请求所花费的时间。

    当然,如果请求以稳定的速度传入,则处理它们需要更长的时间意味着在任何时候都有更多的进程在工作(或等待调度),而更大的内存占用意味着可用于 VFS 缓存的内存更少。还有一种风险是,调度程序将开始抢占任务而不是让它们让步,这会降低整体吞吐量。

    因此,您应该以高 CPU 使用率为目标!(但负载低)。

    php.ini 中的内存限制为 128mb

    这是相当高的,但是由于 CPU 使用率很高,这表明它不是什么大问题,除非每个请求都需要很长时间才能完成并进行大量垃圾收集 - 在这种情况下,通过减少强制更频繁的垃圾收集内存限制实际上可以提高性能。

    我最近有很多停机时间

    就其价值而言,我发现 APC 比 Xcache 可靠得多——这似乎是我在其他地方读到的趋势。没有关于 Zend Optimizer+ 的任何经验/数据,它将与未来版本的 PHP 捆绑在一起。

    我即将再次设置 Apache,我愿意坚持下去

    Pre-fork apache + mod_php 在较低的流量下明显快于 nginx + php-fpm - 但当负载/请求速率为中等时 nginx 似乎具有巨大优势 - 相对于硬件容量(这是你似乎是)。

    如果是我,我会仔细查看日志,看看峰值是否是由于流量增加/流量配置文件更改/响应时间更改引起的。也在努力研究缓存和代码。您可能会考虑临时对活动站点运行分析器(使用 xhprof - 而不是用于生产系统的 xdebug)。

    • 1

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve