程序在多个处理器上并行运行,并在 RH7.3 或 SUSE 11.3 下通过 NFS 将日志写入中央主机。如果程序崩溃或挂起,那么日志文件的尾部就会丢失,并且我们缺乏有关崩溃位置和原因的信息。
Shell 同步没有效果。安装模式有async
一个强有力的理由:在同步模式下,加载初始数据和卸载结果的时间增加了 10 倍,从几分钟增加到几小时。有时flush()
插入到程序中可能会有所帮助,但当位置不确定时很难做到。
那么,是否有可能在进程终止时强制 NFS 客户端无条件刷新其缓冲区(无论如何)?
答案1
一旦输出进入实际 NFS 客户端的缓冲区,它就应该到达服务器 - 恐怕您会丢失通常的流缓冲区中的数据。尝试使用 修改缓冲属性setvbuf()
。
您可能还想为崩溃的应用程序启用核心转储,以便您可以调试一些东西 - 请参阅如何在我的 Linux C++ 程序中启用核心转储和prctl(PR_SET_DUMPABLE, ...)