我使用Java,并使用sl4j/log4j进行日志记录。出于好奇,我想知道写太多日志是否会导致Java OutOfMemory错误?
这里什么太多了? 嗯,说 10 分钟内 100 mb 的日志,同时进行过多的数据库操作(我知道这些信息不足以给出精确的答案,但即使我不是在寻找精确的答案,只是想知道一般情况下这可以吗?情况永远不会到来)。
此外,我的日志记录过程不是异步的。
最佳答案
您收到堆已耗尽的错误,对吧?不是 PermGen 错误?
显然,日志记录库没有泄漏,但毫无疑问,如果您编写了一些在很短的时间内创建大量字符串的代码,您可能会耗尽内存。您可能会认为这会导致永久错误,因为很难想象您的日志记录对象足以解雇堆。
过多的数据库操作是典型的 OOME 罪魁祸首:尤其是返回大型结果集。我不会称之为内存泄漏。泄漏通常会在长时间运行后导致故障。如果您有一个包含一百万条记录和 20 列的表,并尝试在查询中返回该表,那么该表将一直运行,直到堆耗尽并崩溃,这是第一次,没有泄漏或引用问题。
How to avoid OOM (Out of memory) error when retrieving all records from huge table?
关于java - 写入太多日志会导致 OutOfMemory 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737260/