标签: php-fpm

需要帮助解决 PHP-fpm 高 CPU 使用率问题

有一个问题让我抓狂。有一天我尝试修复 VPS 的 CPU 使用问题后,CPU 负载从 60% 增长到 150%,而且我不知道是什么原因导致了问题。请帮我。

我在 Linode 1024 上安装了 mediawiki 的副本。该 wiki 运行在 Niginx + PHP-fpm + MySql 上。该 wiki 的流量并不多,每天只有大约 4000 个请求,大部分来自 Google 和 Bing 机器人。之前它使用了大约 60% 的 CPU(Linode 上总共使用了 400%)。我认为它有点高,所以两天前,我试图解决这个问题(不知道等待我的是什么)。我什么也没做,只是在wiki的配置文件中添加了一个新的空行,这会改变配置文件的修改时间,然后所有缓存的页面文件将被设置为无效。我以前也这样做过,这会导致 CPU 使用率很高,但通常只需要几个小时就能让一切恢复正常。不是这次,我的CPU使用率已经两天多在150%左右了。

使用大部分CPU的就是php-fpm。100%使用三核的情况并不罕见。我以前没见过。Linode上还有其他网站,但应该是wiki。因为如果我将 wiki 离线,CPU 使用率很快就会回落到 40% 左右。

那天我还复制了 php-fpm.conf 并打开它,但没有更改它。

我不知道我做错了什么。我在这里请求帮助,以免自己陷入疯狂!它是 php-fpm。有没有办法知道它在做什么?我的意思是哪些脚本相关以及哪些功能代码正在运行?

顶部:

top - 06:34:33 up 10 days,  4:23,  2 users,  load average: 1.10, 1.24, 1.37
Tasks:  76 total,   4 running,  72 sleeping,   0 stopped,   0 zombie
Cpu(s): 61.1%us,  3.1%sy,  0.0%ni, 32.8%id, …
Run Code Online (Sandbox Code Playgroud)

php mediawiki php-fpm cpu-usage

6
推荐指数
1
解决办法
4万
查看次数

如何追踪 php-fpm 终止的原因?

我有VPS(4核,6GB),运行centos,nginx和php-fpm,流量很少(我从未发布过网址)。

每隔几周(在不同的时间),php-fpm 就会终止,并在 php-fpm.log 中仅显示以下内容:

[10-Nov-2015 04:14:48] NOTICE: Terminating ...
[10-Nov-2015 04:14:48] NOTICE: exiting, bye-bye!
Run Code Online (Sandbox Code Playgroud)

此时 nginx error.log 或 php-fpm-error.log 中没有其他事件。

  • 我还可以在哪里查找终止的原因?

  • 我可以配置什么来在下次发生这种情况时为我提供更多信息吗?

  • 我可以配置php-fpm自动重启吗?

vps nginx centos php-fpm

6
推荐指数
1
解决办法
1万
查看次数

使用 root 选项自动启动 PHP-FPM

我试图让 PHP-FPM 以 root 身份运行一个池,但我似乎无法调整 init.d 启动参数。

它在从 CLI 启动 PHP-FPM 时起作用(使用sudo php-fpm7.0 -DRy /etc/php/7.0/fpm/php-fpm.conf,但我无法使用service命令(sudo service php7.0-fpm (re)start。所以每次服务器重新启动时,PHP-FPM 都会失败,我必须运行此命令。

我试图把文件“PHP-fpm7.0”在/etc/default与线DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R",我甚至尝试添加-R参数的do_start函数/etc/init.d/php7.0-fpm直接,但我不断收到please specify user and group other than root错误。

有什么办法可以让我在启动时和service命令中工作吗?


题外话:我知道所有的风险,我知道为什么我不应该这样做,但我还是想这样做。我需要运行一些脚本来创建目录、执行 chown 命令等,并且池将专用于 nginx 服务器块使用的后端,该后端只能在一个特定的 URL 路径上从私有 192.168.1.X 网络内访问。

作为替代方案,我可以设置一个以 root 身份执行 PHP 脚本的 cron 脚本,但这种方法会花费我更多的时间。

linux root php-fpm init.d php7

6
推荐指数
2
解决办法
2万
查看次数

Nginx + PHP 最大输出限制

我安装了 php 5.5 (fpm) 和 nginx 1.10(gzip 配置为 1)。在 ubuntu 上运行。

当我“回应”一个大输出(超过 2 mb)时,它突然停止在 520 kb 左右。

但是当我在 php-cli 上运行相同的程序时,将整个内容“回显”到终端上没有问题。

通过 adminer 下载 mysql 转储也中途停止。我的意思是下载不完整的文件(如果正确的总输出大几 MB)。

如何解决这个问题?

我的程序没有任何问题。即使是一个足够长的简单循环,也可以在特定字节限制处停止回声“hello world”。

我不确定这个问题是由 nginx 端还是 php 端引起的。

php nginx php-fpm php-cli

6
推荐指数
1
解决办法
1080
查看次数

11:资源暂时不可用,连接upstream + Bad Gateway (Nginx)

对于我的新服务器上的所有站点,似乎一旦nginx提供了一定数量的流量,它就会开始提供“错误 502 - 错误网关! ”。

让我们来看看一些日志和配置...

  • 操作系统:Ubuntu 16.04(服务器)

  • 硬件:6核,12GB内存

  • 面板:ISPConfig

  • nginx 版本:1.10.3

来自/var/www/example/log/error.log

11: Resource temporarily unavailable) while connecting to upstream, client: 216.170.123.179, server: example.com, request: "GET /KHFxygk9 HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php7.0-fpm/web3.sock:", host: "example.com", referrer: "http://example.com/"
2017/08/10 06:01:06 [error] 15408#15408: *31372 connect() to unix:/var/lib/php7.0-fpm/web3.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 192.3.114.12, server: example.com, request: "GET /jiPNQjwp HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php7.0-fpm/web3.sock:", host: "example.com", referrer: "http://example.com/"
Run Code Online (Sandbox Code Playgroud)

这是我的配置文件:

  • /etc/php/7.0/fpm/pool.d/www.conf

[www]    
user = …
Run Code Online (Sandbox Code Playgroud)

linux http nginx php-fpm php7

6
推荐指数
2
解决办法
2万
查看次数

如何检查当前的 pm.max_children 设置?

我在/opt/plesk/php/7.0/etc/php-fpm.d/domain.com.conf文件中修改了 pm.max_children 。

我重新启动了 php70-fpm 服务,想检查我的设置是否启用。

如何检查此设置?

php php-fpm php7

6
推荐指数
1
解决办法
2879
查看次数

FastCGI:无法在 NGinx 和 PHP-FPM 上打开主脚本

显然我不是唯一一个遇到这个问题的人,但是在尝试了针对情侣的每一个建议解决方案之后,我发现我不知道该怎么办。

我正在运行 Ubuntu 16.04、NGinx 和 PHP-FPM。

nginx.conf 是默认的,我只设置了一种信息更丰富的日志格式。

用户权限似乎没问题:NGinx 和 PHP_FPM 在用户 www-data 下运行。文档根所有者是 www-data。FPM-Pool 所有者是 www-data。套接字文件存在并且可写。

我已经尝试将文件夹和文件权限设置为最弱(chmod 777):没有结果。

这是我的 server.conf,正如您从注释行中看到的那样,我尝试了很多技巧 - 但没有效果:

server {
    listen         8080;
#    listen         8080 default_server;
 #   listen         [::]:8080 default_server;
    server_name    example.com www.example.com
    root           /var/www/nginx/;
    index          index.php;
        access_log /var/log/nginx/scripts.log scripts;


    gzip             on;
    gzip_comp_level  3;
    gzip_types       text/plain text/css application/javascript image/*;

    location ~ \.php$ {
        if ($uri !~ "^/uploads/") {
            fastcgi_pass unix:/run/php/php-fpm-www.sock;

        }

    include fastcgi.conf;

#    include         snippets/fastcgi-php.conf;
    include         fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;

  } …
Run Code Online (Sandbox Code Playgroud)

nginx fastcgi php-fpm

6
推荐指数
1
解决办法
2万
查看次数

一个 php-fpm 5.6 站点如何导致所有站点中断?

我有一个真正令人头疼的问题,服务器上的一个站点会影响单独的 php-fpm 池中的其他站点。我认为这个想法是 php-fpm 池提供了隔离以阻止(减少)这种情况的发生。

我们有一个典型的 LEMP 服务器(Ubuntu 16.04 运行 NGINX 和 php-fpm 7.0 和 5.6。MySQL 在另一个机器上。)运行着许多不同规模的站点。

澄清一下,这似乎不是服务器资源问题;CPU、内存、inode、打开的文件、网络,我们已经检查了我们能想到的一切,服务器上仍然有足够的空间。

然而,游泳池的资源有限......

/etc/php/5.6/fpm/pool.d/siteone.conf

[siteone]
user = siteone
group = siteone
listen = /var/run/php5.6-fpm-siteone.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 25
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[error_log] = /var/log/php-fpm/siteone/siteone-php-fpm.log
php_value[newrelic.appname] = "siteone - LIVE"
php_admin_value[upload_max_filesize] = 5M
request_terminate_timeout = 5m
pm.max_requests = 5000
Run Code Online (Sandbox Code Playgroud)

然而,当一个站点达到 maxchildren 时,所有站点都开始超时。

请任何建议。

先感谢您。

ubuntu nginx php-fpm

6
推荐指数
0
解决办法
230
查看次数

Apache PHP-FPM 代理启用重用 = on 时出现奇怪的响应

启用后<Proxy ... enablereuse=on max=10>我开始收到奇怪的响应。刷新当前页面时,主请求加载不同的响应;例如空白页面、针对单独客户端的响应或来自请求页面上 CSS 文件的 404 响应。

删除enablereuse,修复了奇怪的响应,但阻止了来自同一用户的并发请求,这意味着每个请求都是单独提供的。

例如:在同一虚拟主机域上打开两个不同 URL 的浏览器选项卡,如果第一个请求的页面需要 5 秒才能加载,则在第一个选项卡完成之前不会加载第二个选项卡。

我试图通过允许同一客户端以并发非阻塞方式同时执行多个请求来防止这种情况。

服务器环境

CentOS 6.10 x64
php 5.6.37 Remi
Apache 2.4.33 IUS
Run Code Online (Sandbox Code Playgroud)

MPM 事件配置

<IfModule mpm_event_module>
    ServerLimit              100
    StartServers             4
    ThreadLimit              64
    MaxRequestWorkers        100
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadsPerChild          25
    MaxConnectionsPerChild   1000
    ListenBacklog       511
</IfModule>
Run Code Online (Sandbox Code Playgroud)

虚拟主机配置(4 中的 1 - 除 IP 地址、UDS 和服务器名称外均相同)

<VirtualHost 192.168.1.71:443>
    ServerName example.com:443
    DocumentRoot /home/example/example.com
    <IfModule mod_ssl.c>
        SSLEngine on
        SSLCertificateFile /etc/httpd/ssl/certs/example.crt
        SSLCertificateKeyFile /etc/httpd/ssl/private/example.key
        SSLCertificateChainfile /etc/httpd/ssl/certs/example.ca-bundle
        <IfModule mod_setenvif.c>
            SetEnvIf …
Run Code Online (Sandbox Code Playgroud)

php-fpm apache-2.4 mod-proxy-fcgi

6
推荐指数
1
解决办法
2526
查看次数

如何禁用 PHP-FPM 请求日志记录?

我不断在 Kubernetes 集群中看到类似这样的日志:

[php] - -  05/Jul/2020:20:15:55 +0000 "POST /api/bookings" 200
Run Code Online (Sandbox Code Playgroud)

我怎样才能禁用它们?

如果 PHP 想要写一个错误或者其他什么,我想保留它,这只是我不关心的请求日志(NGINX 无论如何都会记录它们第二次)。

我在用着php:7.1-fpm

php-fpm kubernetes

6
推荐指数
2
解决办法
9953
查看次数