PHP警告:exec():无法在some.php中分叉[rm some_file.txt] 第111行
关于这个问题,有一个问题已被提出PHP Warning: exec() unable to fork我有类似的问题,但不一样。
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) 31364
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) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 31364
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我的限制如上所示,看起来服务器上没有任何可以影响此错误的限制。
我尝试在使用未设置的变量并将它们设置为null以释放内存后取消设置变量。但它没有效果。
unset($var);
$var = null;
由于某些资源耗尽而无法解决错误,但我无法找到原因。 您能否建议我查看哪些日志?
此问题的任何想法或解决方法?
答案 0 :(得分:1)
此问题的任何想法或解决方法?
问题可能是代码中的一个缺陷 - 就像在https://stackoverflow.com/a/20649541/2038383中一样。因此,解决方法就是修复它。
你能告诉我我应该看哪些日志吗?
有PHP日志,然后是系统/内核日志。
您已经知道在哪里获取PHP日志以及默认情况下的内容。不幸的是,你不会从PHP中获得更多。您可以使用set_error_handler()自己捕获错误,但这不会为您提供更多有用的信息(它会给您PHP"#34; errno"但不是UNIX&# 39; s errno)。
至于系统日志;我在评论中说过检查你的syslog
。那里可能有一些东西,它始终是一个很好的起点。但实际上你通常不会在syslog中看到ulimit违规。有些会被记录(示例stack size
会生成记录的段错误)但很多人不会记录。这篇文章介绍了如何获取ulimit
违规行为的日志:https://unix.stackexchange.com/questions/139011/how-do-i-configure-logging-for-ulimits。令人惊讶的是非常微不足道。
系统调用应报告系统ulimit
违规的方式是设置errno。例如,如果点击max user processes
fork()
将返回EAGAIN
。
所以......你需要得到那个UNIX errno
才能知道真正发生了什么。不幸的是,我认为PHP中没有一种方法(有posix_errno(),但很可靠,仅限于PHP的posix_XXX函数库)。另请注意,它是PHP generating the "Unable to fork"消息。映射到实际系统调用错误的方式并不完全透明。
最好看看有其他方法来调试哪些有很多。与系统监控工具一样:ps
,dstat
,strace
可能是一个良好的开端。