如何检测由于磁盘已满而导致的未处理异常



我的应用程序遇到了一个磁盘已满错误,不知怎么的,由于磁盘已满,抛出了一个未处理的异常,导致调用set_terminate()处理程序。

正常情况下,我会在我的日志文件中得到某种堆栈跟踪,这样我就可以看到出了什么问题,然而,在这种情况下,由于磁盘已满,没有记录堆栈跟踪,并且不清楚程序是否由于缺乏磁盘空间而终止。

读取我可以从最后写入磁盘的内容中读取的内容,似乎正在写入std::clog,它已设置为进入磁盘(已满的磁盘)。

我想知道使用operator<<写入clog是否会导致抛出异常,如果是这样,可能会抛出什么异常?

此外,我对如何改进我的应用程序的想法很感兴趣,以便在将来再次出现这种情况时,我可以更新我的应用程序,以便更好地跟踪到底是什么出了问题,以便我可以知道磁盘已满,而不是应用程序的其他缺点。

然而,关键问题是检测故障,否则,如何减轻的想法是没有用的。

在Linux中,您可以使用文件名[在一个特殊的目录?]来创建你在哪里的踪迹-因为文件只使用"i节点空间",通常有很多。

另一个选项是创建一个大(ish)文件作为"紧急日志存储"—如果磁盘已满,则打开紧急日志存储,并写入该文件。将其设置为几兆字节,在现代磁盘上没有人会注意到,但它为您提供了足够的空间来转储您所在位置的上下文。

我不知道代码本身会发生什么,但我想解决如何处理这种异常的问题。

本质上,在这种问题上,更多的日志记录将是有用的。但是,您必须考虑日志记录机制是否存在问题。您可能需要一个不依赖磁盘的备用日志/报告系统。

你可以继续添加冗余层,但在我看来,一个在特殊情况下失败的主服务器,加上一个在更多异常情况下失败的备份,对大多数应用程序来说已经足够好了。如果数据弹性是最重要的,那么你当然会监控你的资源并在应用程序处理时减轻(发出操作员警告或任何你选择的后备机制-例如备份假脱机空间等)。

一般来说,all ways upnearly always up的成本在开发成本和时间上也遵循80/20规则。

相关内容

  • 没有找到相关文章

最新更新