当PHP出现故障时,我正试图生成核心转储。WARNING: [pool www] child 2756 exited on signal 11 (SIGSEGV) after 153.518521 seconds from start
.我正在使用一个基于Alpine的自定义Docker容器,托管在ECS上。
我遵循了多个指南,但PHP-FPM不能生成核心转储(我可以用php cli或用 kill -s SIGSEGV $$
). 我遵循的指南: - https:/ma.tias.begenerate-php-core-dumps-segfaults-php-fpm。 https:/www.bggofurther.com201504generating-core-dumps-for-php-fpm- 未生成核心转储文件
我的配置如下。
/ # ulimit -c
unlimited
/ # cat /proc/sys/kernel/core_pattern
/tmp/core-dumps/core-%t-%p
/ # cat /proc/sys/kernel/core_uses_pid
0
/ # php-fpm -tt
[global]
pid = undefined
error_log = /proc/self/fd/2
syslog.ident = php-fpm
syslog.facility = 24
log_buffering = yes
log_level = unknown value
log_limit = 8192
emergency_restart_interval = 0s
emergency_restart_threshold = 0
process_control_timeout = 0s
process.max = 0
process.priority = undefined
daemonize = no
rlimit_files = 0
rlimit_core = 0
events.mechanism = epoll
[www]
prefix = undefined
user = www-data
group = www-data
listen = 9000
listen.backlog = 511
listen.owner = undefined
listen.group = undefined
listen.mode = undefined
listen.allowed_clients = undefined
process.priority = undefined
process.dumpable = no
pm = dynamic
pm.max_children = 35
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.process_idle_timeout = 10
pm.max_requests = 500
pm.status_path = /_/php-fpm/status
ping.path = undefined
ping.response = undefined
access.log = /proc/self/fd/2
access.format = [%{%Y-%m-%dT%H:%M:%S%z}t] %R "%m %{REQUEST_SCHEME}e://%{HTTP_HOST}e%{REQUEST_URI}e" %s %f %{mili}d %{kilo}M %C%%
slowlog = undefined
request_slowlog_timeout = 0s
request_slowlog_trace_depth = 20
request_terminate_timeout = 0s
request_terminate_timeout_track_finished = no
rlimit_files = 0
rlimit_core = unlimited
chroot = undefined
chdir = undefined
catch_workers_output = yes
decorate_workers_output = no
clear_env = no
security.limit_extensions = .php .phar
configuration file /usr/local/etc/php-fpm.conf test is successful
我试着用 /proc/sys/kernel/core_uses_pid
到 1
并与 process.dumpable = yes
我想是PHP-FPM配置的问题,因为当我在cli中执行一个脚本时(我指的是像这样的 php generate_sigsegv.php
)核心转储生成良好。然而,我不知道为什么事情会出错。
对于CLI,我使用了这个脚本。
<?php
function segfault ($i = 1) {
echo "$i\n";
segfault($i + 1);
}
segfault();
?>
对于 PHP-FPM,我正在调查我的应用程序中的一个错误,所以我有一个 API 来调用生成 SIGSEGV。
问题是生成核心转储的文件夹的权限。确保PHP-FPM使用的用户有权利在文件夹上写东西.因为CLI中的PHP是与你的容器中的用户(主要是root)一起执行的,你可能有权利,但不是PHP-FPM。