And*_*ett 6 php php-fpm amazon-web-services docker centos7
我有一台运行 centos 7 docker 容器的 AWS Linux 主机,其中运行 5.5.25 和 php-fpm。Php 通过端口 9000 暴露在 docker 容器之外,并为 nginx 服务器提供请求。这个设置一直运行良好,但是当我最近打开 php-fpm slowlog 以尝试调试一些慢速代码时,我无法让 php 记录慢速脚本。我在 /etc/php-fpm.d/www.conf 中设置了以下内容:
request_slowlog_timeout = 5s
slowlog = /var/www/log/php-fpm-slow.log
Run Code Online (Sandbox Code Playgroud)
/var/www/log/php-fpm-slow.log 归 www 用户所有,拥有 777 权限。每次运行缓慢的脚本时,都会将以下内容记录到 php 错误日志中。
[07-Jul-2015 07:33:34] ERROR: failed to ptrace(ATTACH) child 18: Operation not permitted (1)
[07-Jul-2015 07:33:34] WARNING: [pool www] child 18, script '/var/www/src/index.php' (request: "GET /index.php") executing too slow (5.700050 sec), logging
Run Code Online (Sandbox Code Playgroud)
我从中得出 5s 的 request_slowlog_timeout 实际上正在被触发,但由于某种原因无法生成日志。
我见过类似但不完全相同的问题,建议修改 /etc/sysctl.d/10-ptrace.conf 或 /proc/sys/kernel/yama/ptrace_scope。不幸的是,这些文件都不存在于我的主机 AWS Linux 或容器 Centos 7 操作系统中。
有没有人知道可能导致此问题的原因,或者我可以采取哪些步骤来进一步调试?
And*_*ett 13
我终于想通了这一点。您需要为 docker 容器提供使用 ptrace 的能力。只需将 --cap-add SYS_PTRACE 添加到 docker run 命令即可为我解决此问题。