我应该使用 Linux 的 acct(BSD 进程统计)来跟踪进程行为吗?

我应该使用 Linux 的 acct(BSD 进程统计)来跟踪进程行为吗?

我有一个守护进程 ( slapd),有时会无缘无故地停止。不会发生段错误。日志中没有什么特别的。

因此,我试图用来acct跟踪进程的生命周期,特别是它的退出值。表示man内核确实记录了该值。令人惊讶的是,我的dump-acct没有显示此信息......

我必须通过在print_pacct_record()函数中添加此行来更改源:

(void)fprintf(out, "%4u|", rec->ac_exitcode >> 8);

编辑:此更改已最近添加了主流

但是,我觉得这还不足以发现问题所在。

有没有更好的方法来跟踪程序如何退出?例如,堆栈跟踪会很有趣。 “最后几秒跟踪”会更好。

我想到了strace或者,ltrace但是程序可以运行几天,然后才会“自行停止”。我担心“跟踪”会影响性能。我不知道是否gdb可以提供帮助。

答案1

strace如果您使用该选项并将其输出重定向到文件会怎么样-o

[root@host ~]# strace -o /root/slapd_strace.log slapd --parameters --you --want

答案2

尝试strace在 或 下screen运行tmux。一旦运行,您就可以断开连接,并且仅在需要时重新连接。screen保留一个滚动缓冲区(可能如此tmux),因此您甚至不需要担心重要的线索滚动到页面顶部。

screen -h 1000
strace ...
# disconnect with Ctrl-a d

之后

screen -r

相关内容