- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
org.apache.log4j.Hierarchy 包含一个名为 ht 的哈希表,该表不断增长,直到我们在应用程序服务器中遇到 OutOfMemoryError .
ht 有数百万个条目,我不明白为什么。
在 log4.properties 中定义了几个类别,并且我希望对于与类别定义匹配的每个类,此哈希表中都有一次条目。
但是每次创建某个类的新实例时,都会在该哈希表中添加一个新的记录器..因此,我们无法控制它的大小,它会不断增长,直到 JVM 完全饱和为止。
有什么想法吗?是否有任何配置可以避免这种行为?我们应该定期清除这个 ht 吗?
使用 jmap histo 清楚地显示了这种不断的演变..
最佳答案
Log4 保留对其创建的每个记录器的引用。每个记录器都有一个唯一的名称,每次调用获取特定名称的记录器都将返回相同的记录器对象。 org.apache.log4j.Hierarchy.ht
包含先前创建的记录器对象的缓存。这是 log4j 的正常且预期的行为。
最常见的模式是为每个类创建自己的记录器,以该类的名称命名。在这种情况下,记录器的数量自然会受到应用程序中创建记录器的类的数量的限制。
不过,应用程序可以创建具有其他名称的记录器。例如:
for (int ii = 0; ii < 100_000; ++ii) {
Logger logger = Logger.getLogger(String.valueOf(ii));
}
这个无可否认的人为示例创建了十万个以数字 0 到 99,999 命名的记录器。 Log4j 会将每个记录器的副本存储在 ht
表中,以防您多次运行该代码。
LogManager
类有一个函数getCurrentLoggers()
它返回已创建的记录器的枚举。您可以使用它来找出正在创建哪些记录器。也许您的应用程序正在使用不寻常的记录器命名模式来创建特殊的记录器,并且最终会产生大量记录器?
关于java - log4j 层次结构中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29518808/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!