gpt4 book ai didi

java - 线程转储和内存转储仅在特定时间点有意义?

转载 作者:行者123 更新时间:2023-11-30 06:56:40 24 4
gpt4 key购买 nike

据我了解,Java 线程转储是所有线程的转储,描述了 JVM 中的每个线程正在做什么或每个线程的状态在特定的时间点。同样,内存转储表示内存在特定时间点的健康状况。

是否有任何工具提供了一种方法来获取一个小时或更长时间的内存或线程转储,以便我可以分析一个小时的状态?

我没有在 jconsole、jvisualvm 或 dynatrace 中看到任何方法。也许有办法,但我没有找到?

最佳答案

至于内存转储:定期转储内存需要一个非常非常大且非常非常快的文件系统。所以不,我不建议这样做。最好根据 gc Activity 或其他条件定义一些触发器。

关于 Stack-Traces:如果您面临竞争条件,您的(大量多线程?)应用程序卡住或对所有用户变慢的阶段,我发现收集一些(3-5)线程转储很有帮助定期偏移 3 到 5 秒(我们从 5 分钟开始,随着系统变得更加稳定,将其减少到 30 米),然后将这些快照相互比较以确定可能的干扰。

虽然第一次迭代涉及 jstack,但它后来演变为基于 JMX 的 java 应用程序访问并同时提取数据库锁定信息。

所以您的问题可以由衷地回答:“视情况而定”。仅当您看到 OutOfMemoryError 时才应提取内存转储。线程转储在可能存在高流量/卡住/线程拥塞时很有用。

关于java - 线程转储和内存转储仅在特定时间点有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com