php slowlog 导致 docker 容器中的 ptrace 错误

php slowlog 导致 docker 容器中的 ptrace 错误

我有一台 AWS Linux 主机,运行一个 centos 7 docker 容器,其中运行 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

并且 /var/www/log/php-fpm-slow.log 由具有 777 权限的 www 用户拥有。每次运行缓慢的脚本时,都会将以下内容记录到 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

我从中得知,5s 的 request_slowlog_timeout 实际上已被触发,但由于某种原因,无法生成日志。

我见过类似但不完全相同的问题,这些问题建议修改 /etc/sysctl.d/10-ptrace.conf 或 /proc/sys/kernel/yama/ptrace_scope。不幸的是,这两个文件都不存在我的主机 AWS Linux 或容器 Centos 7 操作系统中。

有谁知道是什么原因导致了这个问题,或者我可以采取哪些步骤来进一步调试?

答案1

我终于搞明白了。您需要为 docker 容器提供使用 ptrace 的能力。只需在 docker run 命令中添加 --cap-add SYS_PTRACE 即可解决这个问题。

相关内容