所有
我的C ++程序生成的核心转储大小为2GB,并且很快填满了所有可用的磁盘空间。 我真正需要的只是回溯。 我想知道如果我想保留回溯,核心转储文件的安全大小是多less。 另外,我想知道是否还有其他的智能解决scheme。
谢谢! 詹姆士
您可以直接将coredumppipe道传输到一个程序,该程序将跟踪保存到临时位置,获取回溯,然后将其放在用户可以访问的位置,然后删除该核心。 有关如何使用coredump模式执行某些操作的示例,请参阅man 5 core 。 本质上,你可以设置内核控制值kernel.coredump_pattern把coredumppipe到特定的程序中。 通过这种方式,您可以完全控制何时保存coredump以及何时不保存的逻辑。 请注意,您input的程序以root身份运行! |/usr/local/bin/coredump_it.sh将是这样做的一个例子。
另外, systemd已经提供了这个function。 如果你像这样设置coredump模式
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e
然后,您可以使用命令coredumpctl来存储和检索该coredump的回溯。 例如,coredump是用于PID 24164的。
coredumpctl info 24164 $ coredumpctl info 24164 PID: 24164 (bintree) UID: 1000 (matthew) GID: 1000 (matthew) Signal: 11 (SEGV) Timestamp: Mon 2015-02-09 19:14:13 GMT (1 months 19 days ago) Command Line: ./bintree Executable: /home/matthew/Testbed/trees/binary/bintree Control Group: /user.slice/user-1000.slice/session-1.scope Unit: session-1.scope Slice: user-1000.slice Session: 1 Owner UID: 1000 (matthew) Boot ID: 82a18962ecc34109965530967f12150b Machine ID: 69d27b356a94476da859461d3a3bc6fd Hostname: home.localdomain Message: Process 24164 (bintree) of user 1000 dumped core. Stack trace of thread 24164: #0 0x0000000000400680 bintree_fetch (bintree) #1 0x0000000000400a7e main (bintree) #2 0x000000316fc1ffe0 __libc_start_main (libc.so.6) #3 0x0000000000400589 _start (bintree)
您可以直接调用coredumpctl来获取保存的内核列表。