当前位置: 首页 > 面试题库 >

使用logrotate进行垃圾收集器日志(loggc)文件旋转无法正常工作

浦泳
2023-03-14
问题内容

在Linux logrotate命令中使用JVM垃圾收集日志选项时,遇到一个奇怪的问题。执行旋转操作时,它将填充文件的第一行NUL(^
@)值,该值作为JVM的参数给出。

可以说这是java调用(Test.class位于/ home / test /中):

java -Xloggc:/home/test/test.log -cp / home / test /测试

此文件的logrotate配置如下:

/home/test/test.log {
旋转56
missingok
notifempty
copytruncate
nocreate
nomail
}

我还每分钟都有一个crontab条目记录日志,以进行测试:

  • / 1 * * / usr / sbin / logrotate -f /etc/logrotate.d/gcLog

我得出的结论是,JVM以追加模式进行写入,并保留了某种偏移量,用于在相关文件中写入下一行,即使该文件被logrotate截断了(我可能是错的)。

我的下一个想法是尝试将stdout重定向到test.log文件。我使用了这个java调用,并为logrotate和cron保留了相同的配置:

java -verbose:gc -cp / home / test /测试> /home/test/test.log

再一次,当test.log被logrotate截断时,新创建的文件在第一行填充了NUL(^ @)值。

不用说,使用Google找不到任何有用的东西。我发现了另一个与stackoverflow相关的问题,但是我无法设置Java Script
Wrapper,所以这行不通。

有人遇到过这个问题吗?知道为什么会这样吗?更好的解决方法或解决方案吗?我需要尝试将对应用程序的调用传递到一些读取输出的脚本,也许还要看一下Tomcat记录和在catalina.out中旋转stdout的方式(这里也将提供一些帮助)


问题答案:

我们在运行Jboss7和Java6的地方遇到了同样的问题,GC文件中出现了NULL,并且它们一直在增长。

解决方案是只将GC记录到stdout,然后 stdout 附加 到文件中:

简单的例子:

java -verbose:gc >> console.log

显然,使用append(>>)可以删除Java“指针”到文件中的某个位置。额外的好处是不必在每次服务器重启时重置GC日志,因此随着时间的推移,我们可以获得一些统计信息。

至少IBM PMAT工具在解析带有GC输出的sysout时没有问题。

最简单的解决方案有时是最好的:)

尽管我希望Java支持旋转GC日志,但正如我之前看到有人在讨论的那样:html" target="_blank">http :
//mail.openjdk.java.net/pipermail/hotspot-runtime-
dev/2011-April/002061.html



 类似资料:
  • 问题内容: 我已配置Java将垃圾回收信息转储到日志中(详细GC)。我不确定日志中的垃圾回收项是什么意思。这些条目的示例发布在下面。我在Google上四处搜寻,但找不到可靠的解释。 我有一些合理的猜测,但我正在寻找答案,这些答案提供了对条目中数字含义的严格定义,并有可靠的依据。引用sun文档的所有答案的自动+1。我的问题是: PSYoungGen指的是什么?我认为这与上一代(年轻人)有关,但是究竟

  • 问题内容: 是否可以在Sun JVM中滚动垃圾收集器日志? 目前,我使用以下命令生成日志: 但是我必须使用fifo队列和rotatelogs手动轮换它们以创建每天的新日志。我希望对此有更好的解决方案。 也许有一种方法可以从java内部访问此日志条目,以便将它们重定向到log4j? 编辑:使用fifo队列的解决方案还不够好,因为如果从该队列中读取的进程(例如rotatelogs)读取速度变慢,则会减

  • 问题内容: 有人可以解释一下G1垃圾收集器的工作原理吗?我还无法在任何地方找到任何全面,易于理解的描述。 谢谢 问题答案: 收集器将堆分成固定大小的区域,并跟踪这些区域中的实时数据。它将一组指针(“记住的集”)保留在区域内和区域外。当认为有必要使用GC时,它将首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这意味着一步就可以收集整个区域:如果进入一个区域的指针数量为零,则无需对该区域进行标

  • 我有一个非常大的不可变的密钥集,不适合存储在内存中,还有一个更大的引用列表,必须只扫描一次。如何在RAM中完成标记阶段?我确实有一个可能的解决方案,稍后我会写下来作为答案(不想破坏它),但也许还有其他我没有想到的解决方案。 我将试图重申这个问题,使其更“真实”: 你在Facebook工作,你的任务是找出哪些用户从未创建过带有表情符号的帖子。你所拥有的只是活动用户名列表(大约20亿),以及帖子列表(

  • 问题内容: 我正在寻找详细描述python垃圾回收如何工作的文档。 我对在哪个步骤中完成操作很感兴趣。这三个集合中有哪些对象?在每个步骤中删除哪些对象?参考循环使用什么算法? 背景:我正在实施一些必须在短时间内完成的搜索。当垃圾收集器开始收集最旧的一代时,它比其他情况“慢很多”。它花费了比计划的更多时间。我正在寻找如何预测何时收集最老的一代以及需要多长时间。 很容易预测何时使用和收集最老的一代。也

  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。 即使在机器学习应用程序等海量数据应用程序的情况下,ZGC 也具有高性能和高效工作。它确保在处理数据时不会因垃圾收集而长时间停顿。它支持 Linux、Window