尝试配置 PHP 以执行核心转储,我执行了以下操作:
[root@myserver ~]# echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
[root@myserver ~]# echo 0 > /proc/sys/kernel/core_uses_pid
[root@myserver ~]# ulimit -c unlimited
我不知道原来的 ulimit 值是什么,但它们现在如下:
[michael@myserver ~]$ ulimit
unlimited
[michael@myserver ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7867
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[michael@myserver ~]$
我还对 php-fpm 配置文件进行了一些更改,但已经将它们改回了默认设置。
我正在运行 Centos7。我应该将 ulimit 值设置回什么?另外,我应该做些什么来反转这两个echo
命令吗?
这看起来像是我的默认值。如果您使用 CLI 更改它们,则更改不是永久性的。您可以重新启动会话,它们将恢复为原始值。
同样,
proc
变化也不是永久性的;重新启动将重置它们。如果您运行“ulimit -c 0”而不是 php-fpm 服务,您正在更改您登录的 shell 的 ulimit。
如果您希望它是永久的,您需要将“LimitCORE=infinity”添加到启动 php-fpm 服务的服务中。有关更多详细信息,请参阅systemd 文档。
为此,您将(以 root 身份)运行“systemctl edit php-rpm.service”,然后会出现一个编辑器,您可以在其中添加如下内容:
(或使用合理的核心尺寸限制,如 1G)
要保留 core_pattern,您需要禁用 systemd-coredump 和 abrtd,并通过 /etc/sysctl.d/ 中的 sysctl 文件设置 kernel.core_pattern。