标签: php-fpm

PHP5-FPM 不会在 /var/run 中创建 unix socket 目录

我已经设置了php5-fpm绑定到/var/run/php5-fpm.

/etc/php5/fpm/pool.d/www.conf

listen = /var/run/php5-fpm/$pool.sock
Run Code Online (Sandbox Code Playgroud)

问题是它不会自动创建php5-fpm目录。当我重新启动机器时,目录消失了。

如何在启动时自动创建它?或者这个问题有其他解决方案吗?

php5 php-fpm

7
推荐指数
1
解决办法
8181
查看次数

为什么静态与动态进程管理对 php-fpm 的内存使用影响如此之大?

我最近将一个客户端迁移到运行 Nginx + PHP-FPM 的 EC2 实例。当我第一次设置服务器时,我设置pm=static了 40 个工作进程。一周左右后,我决定尝试pm=dynamic最多 200 名工人和最少 30 名工人。

我注意到在静态设置下,40 个进程占用了大约 2.3GB 的内存,而在动态设置下,我看到 60 个进程仅使用 1.2GB 内存的峰值。

请参阅下面来自 New Relic 的图表,我的注释为红色。

比较静态与动态 pm 的新遗物记忆图表

可以看到,在 11/25 白天,我从静态更改为动态并重新启动了 php-fpm。之后我们可以看到48个进程只占用了990MB,60个进程只占用了1.2GB内存。

什么可能导致静态和动态管理之间的这种差异?难道是动态的,我将最大请求数设置为 50?也许静态内存使用更多是由于内存泄漏而不是 php-fpm 的内部问题?

php-fpm

7
推荐指数
1
解决办法
3499
查看次数

php-fpm 和 nginx 的奇怪性能波动

我正在针对 Web 服务运行负载测试。这是一个运行在 php-fpm 和 nginx 上的 php 应用程序,带有 fastcgi。有一个 MySQL 后端仅用于小型读取。

我总是看到一个奇怪的模式:性能稳定并随着流量的增加而可预见地增加,但在高峰期变得不稳定:CPU 使用率不断波动。

这是我看到的性能模式(用 可视化nmon):

在此处输入图片说明

下降总是与我的负载测试工具 - locust.io - 在它完成上升到我为测试设置的峰值水平时的短暂暂停同时发生。

我的假设:在这短暂的时刻,php-fpm主人认为负载已经消失并开始杀死工人;当流量在片刻之后全面恢复时,它无法足够快地响应。

我不太明白的是为什么它永远无法完全回到它的摆动中:我看到负载均衡器后面的所有 4 个应用程序服务器无限期地出现这种波动。

这是我的 php-fpm 池配置:

[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 100
pm.start_servers = 40
pm.min_spare_servers = 40
pm.max_spare_servers = 100
pm.max_requests = 10000
Run Code Online (Sandbox Code Playgroud)

我已经确认这不是数据库的问题 - 在将 MySQL 读取从站的数量增加一倍后,我看到了完全相同的行为。

这是什么原因造成的?我怎样才能阻止它?

编辑:

这是一个图表,展示了我所看到的。请注意,故障率通常会在 user_count 达到峰值时出现峰值,然后逐渐回落。

user_count vs fail_ratio

php performance nginx load-testing php-fpm

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

无法连接到 PostgreSQL unix 域套接字

我正在尝试从 PHP Web 应用程序连接到 PostgreSQL Unix 域套接字。相关系统组件:

  • CentOS 7 x64(强制执行 SELinux)
  • postgresql93 9.3.5-2PGDG.rhel7
  • nginx 1.6.2-1.el7.ngx
  • php-common 5.4.16-23.el7_0.3
  • php-fpm 5.4.16-23.el7_0.3
  • php-pdo 5.4.16-23.el7_0.3
  • php-pgsql 5.4.16-23.el7_0.3

PostgreSQL 正在侦听标准端口 5432,我在 127.0.0.1:5432 通过 TCP/IP 使用它没有问题,但是当我尝试连接到它的 Unix 域套接字时,出现以下错误:

Cannot connect to database: SQLSTATE[08006] [7] could not connect to server:
No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

文件/tmp/.s.PGSQL.5432存在,我可以使用psql连接:

$ psql -Uusername db_name
psql (9.3.5)
Type "help" for help.

db_name=>
Run Code Online (Sandbox Code Playgroud)

所以从 PostgreSQL 方面应该没有问题。或者有吗? …

postgresql nginx centos php-fpm

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

FastCGI缓存总是一个MISS

所以,我已经像这样设置了 FastCGI 缓存:

location ~ \.php(/.*)?$ {
    fastcgi_cache RWI;
    fastcgi_cache_valid 200 60m;

    set $nocache 0;
    if ($request_method = POST)
    {
        set $nocache 1;
    }

    if ($http_cookie ~ (rwi_userid*|rwi_password*)) {
        set $nocache 1;
    }

    if ($request_uri ~* "/(vb/admincp/)") {
        set $nocache 1;
    }

    fastcgi_no_cache $nocache;
    fastcgi_cache_bypass $nocache;

    fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass "unix:/var/www/vhosts/system/{domain}/php-fpm.sock";
    include /etc/nginx/fastcgi.conf;
}
Run Code Online (Sandbox Code Playgroud)

server{}块的顶部,我有:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=RWI:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;
Run Code Online (Sandbox Code Playgroud)

问题是我的 PHP 脚本 (vBulletin) 总是发送 Pragma & Cache-Control private。当上述规则不适用时,有没有办法忽略这些标头并强制 FastCGI …

nginx cache fastcgi php-fpm

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

Apache:设置 php-fpm chroot 后“找不到文件”

我正在努力完成在 php-fpm 上实现 chroot 的最后一步,Apache 2.4 在 CentOS 7 上运行。

我已经成功设置测试了没有 chroot 的 php-fpm 连接。但是,一旦我将 chroot 指令添加到 /etc/php-fpm.d/file.conf 中的 conf 文件中,我就会得到一个“找不到文件”的消息,正如许多其他人所经历的那样

这是我的 php-fpm conf 文件:

[site1.com]
user = user1
group = user1
listen = /var/run/php-fpm/site1.com.sock
listen.owner = user1
listen.group = user1
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = on
php_admin_value[short_open_tag] = On
php_admin_value[doc_root] = /
php_admin_value[error_log] = /logs/php-errors
php_admin_flag[log_errors] = on
pm = ondemand
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3 …
Run Code Online (Sandbox Code Playgroud)

php-fpm apache-2.4

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

nginx 和 php-fpm “主脚本未知”

闻起来像重复,我知道,但我现在已经尝试了这个设置 5 次,但我仍然无法让它工作。大多数配置对于 chroot 和多服务器等都很复杂,但我现在已将其简化为最简单的配置。我想了解如何以最简单的形式使用 nginx 设置 fpm...请耐心等待。

当前设置:

  • CentOS 7 64 位
  • 来自 Nginx 存储库的 nginx 1.8.0
  • 来自 Remi php56 的 php 5.6

添加到 /etc/nginx/conf.d/default.conf

    location ~ \.php$ {
      fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }
Run Code Online (Sandbox Code Playgroud)

对 /etc/php-fpm.d/www.conf 的添加和更改

listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Run Code Online (Sandbox Code Playgroud)

添加文件/usr/share/nginx/html/info.php

<?php phpinfo();?>
Run Code Online (Sandbox Code Playgroud)

启动了两个服务

systemctl start nginx.service
systemctl start php-fpm.service
Run Code Online (Sandbox Code Playgroud)

最后 tail -f /var/log/nginx/error.log

2015/11/09 12:18:01 [错误] 28638#0:*1 FastCGI 在标准错误中发送:“主脚本未知”,同时从上游读取响应头,客户端:xx.xxx.xxx.xxx,服务器:本地主机,请求:“GET /info.php HTTP/1.1”,上游:“fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”,主机:“xxx.xx.xxx.xx”

所以似乎FPM找不到脚本,我已经设法理解了,但是根据配置,脚本文件名是文档根目录和脚本名称。脚本名称为 …

nginx php-fpm centos7

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
查看次数

Docker + Nginx + PHP-FPM 错误:[emerg] 1#1: 在上游找不到主机

我有一个从这个 repo克隆的 LEMP 堆栈的 docker 设置。

在运行窗口 10 的开发机器上一切正常,但是当我将图像推送到 docker hub 并将其拉到我的 VPS 上时,无论我做什么,我总是收到此错误:

[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
Run Code Online (Sandbox Code Playgroud)

此错误来自两个文件。

第一: 来自这个 Nginx Docker 文件

这是代码:

RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
&& rm /etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)

第二个 来自这个 Nginx default.conf 文件

这是代码:

    location ~ \.php$ {
      ...
      fastcgi_pass php-upstream;
      ...
    }
Run Code Online (Sandbox Code Playgroud)

我说这两个文件是 b/c 其他地方没有引用 php-upstream 的原因。

我已经尝试了添加/删除主机、添加depends_on、更改 nginx、php 版本、禁用 selinux 的所有可能组合,但它不起作用。我总是在生产中遇到相同的错误,但在本地服务器上一切正常。

nginx php-fpm docker docker-compose docker-machine

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