Php
php slowlog 在 docker 容器中導致 ptrace 錯誤
我有一台 AWS Linux 主機執行一個 centos 7 docker 容器,其中執行 5.5.25 和 php-fpm。Php 通過埠 9000 暴露在 docker 容器之外,並為 nginx 伺服器提供請求。此設置執行良好,但是當我最近打開 php-fpm 慢速日誌以嘗試調試一些慢速程式碼時,我無法讓 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 作業系統中都不存在這些文件。
是否有人對可能導致此問題的原因有任何想法,或者我可以採取哪些步驟來進一步調試?
我終於想通了。您需要為 docker 容器提供使用 ptrace 的能力。只需將 –cap-add SYS_PTRACE 添加到 docker run 命令即可為我解決此問題。