era*_*mos 5 coredump busybox docker
考虑这个简单的“管道”核心模式:
vagrant@myhost:~$ cat /proc/sys/kernel/core_pattern
|/var/core-manager.sh %t
Run Code Online (Sandbox Code Playgroud)
拥有这个同样简化的核心管理器脚本:
vagrant@myhost:~$ cat /var/core-manager.sh
#!/bin/bash
(
file=/tmp/mycore.$1
cat > $file < /dev/stdin
)
Run Code Online (Sandbox Code Playgroud)
现在在 Linux 主机中重现并检索核心转储:
vagrant@myhost:~$ ls -lrt /tmp/mycore*
total 0
vagrant@myhost:~$ ulimit -c unlimited
vagrant@myhost:~$ sleep 100 &
[1] 16647
vagrant@myhost:~$ kill -SIGSEGV 16647
[1]+ Segmentation fault (core dumped) sleep 100
vagrant@myhost:~$ ls -lrt /tmp/mycore*
-rw-rw-rw- 1 root root 385024 Jan 28 18:42 /tmp/mycore.1580233332
Run Code Online (Sandbox Code Playgroud)
现在,在容器(比方说 busybox)内重现它:
(正如你们许多人可能知道的那样,核心模式是由容器继承的,尽管 ulimit 不是,因为它取决于调用 shell,但可能“无限制”是 busybox shell 中的默认值,因为问题是我有无限的 ulimit对于容器内的核心大小“什么都不做”,这就是我真正想要的)。
vagrant@myhost:~$ docker run -it --rm busybox
/ # cat << EOF > /var/core-manager.sh
> #!/bin/bash
> (
> file=/tmp/mycore.$1
> cat > $file < /dev/stdin
> )
> EOF
/ # chmod a+x /var/core-manager.sh
/ # cat /proc/sys/kernel/core_pattern
|/var/core-manager.sh %t
/ # ulimit -c
unlimited
/ # sleep 100 &
/ # kill -SIGSEGV %1
/ #
[1]+ Segmentation fault (core dumped) sleep 100
/ # ls -lrt /tmp/mycore*
ls: /tmp/mycore*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我向核心管理器脚本添加了 a+x 权限,以防万一,但我认为没有必要(我不知道核心转储等异步系统任务的行为方式)。无论如何,如您所见,未创建核心转储。
核心模式的常规路径位置在容器内(当然在主机上)完美工作,那么这让我认为 docker 中的某些内容限制了这种“管道”核心模式的使用。或者也许这是我现在看不到的东西。
任何想法 ?十分感谢!
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |