我正在使用Java,并且用于记录sl4j / log4j。出于好奇,我想知道写太多日志是否会导致Java OutOfMemory错误?
这里有什么太多? 嗯,在进行过多的db操作时,说10分钟内有100 mb的日志记录(我知道这个信息不足以获得针点答案,但即使我不是在寻找针点答案,只是想知道一般可以这样做情况来了)。
此外,我的日志记录过程不是异步的。
答案 0 :(得分:2)
您收到堆已用尽的错误,对吧?不是PermGen错误?
显然,日志记录库没有泄漏,但毫无疑问,如果你写了一些代码,在很短的时间内创建了大量的字符串就可以耗尽内存。您会认为这会导致permgen错误,因为很难想象您的日志记录对象足以解决堆。
过多的数据库操作是典型的OOME罪魁祸首:特别是返回大型结果集。我不会称之为内存泄漏。长时间运行后泄漏通常会导致故障。如果你有一个包含一百万条记录和20列的表并尝试在查询中返回它,那么它将一直运行直到堆消失并崩溃,第一次,没有泄漏或引用问题。
How to avoid OOM (Out of memory) error when retrieving all records from huge table?
答案 1 :(得分:1)
我想知道编写太多日志是否会导致Java OutOfMemory错误?
我非常怀疑。
如果您遇到OOME问题,最可能的原因是内存泄漏。你应该有条不紊地进行调查,而不是(基本上)猜测可能的原因。
(如果内存泄漏发生在其中一个日志库中,那将是库中的一个错误。这不是不可能的,但很可能会发现并修复这样的错误很长一段时间前的。)