更新

更新

从 2.2 升级到 2.4 时,mpm_itk 和 mpm_prefork 不知何故一起启用了。我之前的一个帖子中讨论过这个问题: Apache 错误日志中经常出现 mpm_itk 错误 这导致出现“mpm_itk 错误”,但现在我收到的是这些核心通知:[core:notice] [pid xxxxx] AH00052:子 pid 4597 退出信号分段错误(11)有人知道我应该看什么才能最终解决这个问题吗?

更新

我设法跟踪了一个进程直到其段错误,但无法真正解释它。任何帮助都将不胜感激:

rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
getcwd("/", 4095)                       = 2
chdir("/website/public")                = 0
lstat("/website/public/index.php", {st_mode=S_IFREG|0644, st_size=1777, ...}) = 0
lstat("/website/public", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/website", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0
fcntl(14, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1, len=1}) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR,        si_addr=0x7f5a3d942028} ---
chdir("/etc/apache2")                   = 0
rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER|SA_INTERRUPT, 0x7f5a3cd258d0}, {SIG_DFL, [], SA_RESTORER|SA_RESETHAND, 0x7f5a3cd258d0}, 8) = 0
kill(24177, SIGSEGV)                    = 0
rt_sigreturn()                          = 140025556901856
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_USER, si_pid=24177, si_uid=33} ---
+++ killed by SIGSEGV +++

答案1

strace命令列出了应用程序运行时发出的系统调用。

如果您不是开发人员:系统手册第 2 部分记录了系统调用,可帮助您了解正在发生的事情。

fcntl(14, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1, len=1}) = 0

man 2 fcntl

姓名 fcntl- 操作文件描述符

int fcntl(int fd, int cmd, ... /* arg */ );

描述
fcntl()对打开的文件描述符 fd 执行下述操作之一。操作由 cmd 决定。
fcntl()可以采用可选的第三个参数。此参数是否必需由 cmd 决定。所需的参数类型在每个 cmd 名称后的括号中指明(在大多数情况下,所需的类型是 int,我们使用名称 arg 来标识参数),如果不需要该参数,则指定 void。...

换句话说:尝试对文件描述符编号 14 进行读锁定。要找出存在哪个文件,应该使用编号 14 的符号链接,即 中表示文件的整数/proc/<PID>/fd/14

在我看来,这看起来与下一行的错误无关,但我不是开发人员......:

--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x7f5a3d942028} ---

si_signo=SIGSEGV 看起来您正在监控的进程 id 收到了分段错误(SIGSEGV) 信号是由于访问无效内存地址 0x7f5a3d942028 引起的,该地址不允许访问(SEGV_ACCERR si_code)。

至于为什么会发生这种情况:strace通常不太可能为您提供帮助。

相关内容