我正在使用 busybox 版本开发嵌入式 Linux。为了生成 linux 核心转储,我使用
ulimit -c unlimited
然后我看到我得到了一个巨大的核心文件(~1GB)。因为我的应用程序很大并且分配了那么多内存。
现在,我正在寻找优化这个大型核心文件的解决方案。我发现 (http://man7.org/linux/man-pages/man5/core.5.html)我可以通过管道将核心转储传输到程序。我正在尝试在生成核心转储时对其进行压缩。
IE
cat /proc/sys/kernel/core_pattern
| /tmp/shellscript.sh /tmp/core.%p.gz
cat /tmp/shellscript.sh
#!/bin/sh
/bin/gzip > "$1"
现在,我意识到“将核心转储传输到程序”仅适用于普通桌面ubuntu系统。
但我们的目标是使用busybox版本的嵌入式Linux系统。我想知道当我在 busybox 上执行完全相同的步骤“将核心转储传输到程序(在本例中为压缩)”时,它根本不会产生核心转储。
但是如果我删除 busybox 上的管道选项,那么我会看到核心转储。 IE
root@(none):~ cat /proc/sys/kernel/core_pattern
/tmp/core_top
你们是否知道为什么将核心转储管道传输到程序在带有 busybox 版本的嵌入式 Linux 上不起作用?
谢谢,
答案1
man 5 core
* The program must be specified using an absolute pathname (or a
pathname relative to the root directory, /), and must immediately
follow the '|' character.
|
因此,和之间不应有空格/
。
另外,您的/tmp
脚本所在的分区是否可能安装有-o noexec
?