这与这些问题基本相同:
但是那里的答案似乎不适用于带有 PHP 7 的 Ubuntu 16.04。
/etc/php/7.0/fpm/pool.d/www.conf:
catch_workers_output = yes
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
Run Code Online (Sandbox Code Playgroud)
/var/log/fpm-php.www.log存在并归www-data.
/etc/php/7.0/fpm/php.ini:
log_errors = On
Run Code Online (Sandbox Code Playgroud)
Nginx 虚拟主机的服务器块
access_log /var/log/myapp/access.log;
error_log /var/log/myapp/error.log error;
Run Code Online (Sandbox Code Playgroud)
/var/log/myapp/access.log 存在并归www-data.
但是当发生错误时,我在任何指定的日志文件中都没有收到错误,并且在任何其他地方也找不到它。
我浏览了关于另一个问题的所有建议,但没有找到任何有效的答案。我假设自从这些答案发布以来,情况已经发生了变化。有什么建议?
我的网络服务器上的 opcache 一直达到我设置的限制,即使我觉得我没有那么多 PHP 代码,它真的应该有足够的空间。
更糟糕的是,即使在清除 opcache 时,它也会立即显示超过 2/3 的可用空间已被填充。
刚才的例子:
运行 opcache_reset() 之前的 phpinfo 片段:
Used memory 122958472
Free memory 5552
Run Code Online (Sandbox Code Playgroud)
运行 opcache_reset() 后的 phpinfo 片段:
Used memory 90691312
Free memory 43526416
Run Code Online (Sandbox Code Playgroud)
我知道在 PHP7 中,opcache(显然)备份到磁盘,所以也许东西正在自动重新加载?但这似乎违背了重置 opcache 的目的,我不知道 opcache 备份到磁盘上的哪个位置,所以我无法检查。
我正在 nginx 上运行 PHP-FPM,准确地说是 vesion 7.0.15-0ubuntu0.16.04.4。
我编写了一个脚本来在 Nginx 上创建新的虚拟主机。该脚本创建 Ningx vhost 配置文件、vhost 用户和目录、php-fpm 池文件。
在脚本的末尾,我想在重新启动 php-fpm 之前检查配置是否正常。对于 Apache,我可以apachectl graceful,但是可以用 做类似的事情php5-fpm -t吗?
有一个PHP5.3.3 错误,它不允许我通过 Apache2 查看 php-fpm 的 /status 页面。有没有办法手动访问这些数据?我无法升级盒子(不支持 Ubuntu 10.10,php5.3.4)。
我试过使用这里的技术进行连接:http : //inode.co.nz/testing-a-fastcgi-service,但没有运气。
在这里使用 Ubuntu 12.04、nginx 和 php5-fpm
我让 mongo 在 php 5.3 上运行良好,然后我添加了 ondrej/php5 ppa 并更新到 php5.4。它保留了 GD 和 CURL 扩展,但不保留 mongo。我将该行重新添加到 php.ini 文件中,但什么也没添加。然后我启用了启动错误并得到了这个:
PHP Startup: Unable to load dynamic library '/usr/lib/php5/20100525/mongo.so' - /usr/lib/php5/20100525/mongo.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以,疯狂的猜测,我做了find -name 'mongo.so'并将文件从 20090626/ 移动到 20100525/ ...这导致了这个错误:
PHP Startup: mongo: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20100525
These options need to match
Run Code Online (Sandbox Code Playgroud)
然后我做了pecl uninstall mongo和pecl install …
当我尝试访问我的服务器时,我收到 504 网关超时。
一个小的检查没有在 php5-fpm 日志上找到任何日志,但为了确保,我尝试重新启动它。
当我尝试重新启动它时:
sudo service php5-fpm restart
Run Code Online (Sandbox Code Playgroud)
我明白了[fail],但是当我这样做的时候
sudo service php5-fpm stop
sudo service php5-fpm start
Run Code Online (Sandbox Code Playgroud)
我没有错误。
如果没有日志,我该如何调查?我能做什么?
我有以下情况发生:
我们使用 8 核、8GB 内存、2.6 GHz 的 linode - 使用 nginx + php-fpm - 我们得到了极高的 CPU 使用率图(我们不想成为如此糟糕的 VPS 邻居)...
我们网站上一次只有不到 100 个用户——所以这种情况也非常尴尬——我们的 CPU 使用率非常高。
我们正在使用一个非常未知的、可能是 CPU 密集型的 php-wise、可疑的可怕框架,而不是众所周知的、有据可查的、精心设计的其他框架,如 wordpress 或 drupal,其中有很多关于缓存(以及插件)的文档在 nginx + php_fpm 平台上处理缓存)php。
因此,我们有大约 6 个开放的 php-fpm 进程在运行时单独消耗大量(30+,通常接近 99%)的 cpu - 我真的一点也不知道如何阻止它们使用这么多 cpu . 我不知道是哪些 php 脚本导致了这些峰值,因为它们一直在发生……通常只有 1 或 2 个正在运行 - 但是当所有 6 个脚本都运行时,我们最大化了所有 8 个 cpu。
我的 pool.d/www.conf 文件具有以下设置:
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Run Code Online (Sandbox Code Playgroud)我们这样做 ^ …
我一直在尝试在 php-fpm 和 nginx 中记录错误,因为我在网上找不到任何好的解释。大多数指南说如果我想将错误从 php5-fpm 发送回 nginx,我应该更改catch_workers_output为yes。但是,在我的实验中,我发现即使catch_workers_output设置为no,nginx 仍会正确记录错误。
这是我的虚拟主机配置:
server {
server_name domain.com;
return 301 http://www.domain.com$request_uri;
access_log off;
}
server {
listen 80;
listen [::]:80;
root /home/websites/domain.com;
index index.php index.html index.htm;
error_log /home/websites/logs/domain.com/error.log warn;
access_log /home/websites/logs/domain.com/access.log;
#switch on gzip
gzip on;
gzip_min_length 1100;
gzip_buffers 10 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
gzip_vary on;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
expires 30d;
access_log off;
}
error_page …Run Code Online (Sandbox Code Playgroud) 我有dockerised一个 wordpress 应用程序,现在我是一个纯粹主义者,不想包含nginx在 docker 容器中,也不想在nginx容器和php-fpm容器之间共享任何状态。
我想php-fpm作为一个独立的网络服务器(如 ruby 中的 unicorn 或 python 中的 gunicorn)运行,为 wordpress 站点提供所有内容(html、css 和图像)。并nginx在它前面运行一个反向代理(缓存静态内容)。这样我就可以保持关注点的分离,并且我没有nginx将流量转发到nginx服务器。
的默认配置php-fpm只允许处理 php 文件。可以php-fpm更改的conf吗?如何?这是个好主意吗?
我有一个 LEMP 环境,需要选择将所有开发子域与暂存区分开(使用 xdebug 暂存开发而不使用)。
因此我设置了两个池php-dev和php-stage,但似乎只能在php.ini中启用扩展!?
这是我的 pool.conf (dev)
[php-dev]
listen = 127.0.0.1:9101
listen = /var/run/php-fpm/a1-php-dev.socket
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
request_slowlog_timeout = 3s
slowlog = /var/log/php-fpm/slowlog-php-dev.log
pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 500
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = …Run Code Online (Sandbox Code Playgroud)