了解大规模应用中的堆和线程转储(Heap-dump)。

问题描述 投票:0回答:1

我在Youtube以及Pluralsight上看了一些Java Profilers(JVisualVM,JProfiler,YourKit)的教程。我在Youtube上看了一些Java Profilers的教程(JVisualVM, JProfiler, YourKit, YourKit)以及Pluralsight,对如何检查heap-dump和如何找到内存泄漏有了一点了解。但这些教程都是初级的。

我的疑问是,当我在heap-dump中分析时,我只看到了3种类型的对象 char[], java.lang.String and java.lang.Object[] 这几乎覆盖了所有的内存(总是超过70%)。但我的应用程序中没有任何一个。同样的方式,在线程转储中,我看到HTTP-8080请求(我使用的端口),这导致我到 Runnable()'s run method or Java Concurrent Package 而不是我的项目中的任何特定代码。

我也和一些朋友讨论了这个问题,也分析了他们的应用(没有面临任何内存泄漏和性能方面的问题),但他们的结果几乎是一样的。

你们能不能帮忙了解一下如何在JVisualVM中分析大型应用的堆和线程转储?任何视频,博客,任何东西都会有帮助。

我使用OpenJDK-11,AWS ECS-Docker和Tomcat作为Web服务器。

java-11 heap-dump jvisualvm thread-dump
1个回答
0
投票

查看Eclipse Memory Analyzer (https:/www.eclipse.orgmat),我过去用它成功地找到了几次内存泄漏,但需要一些时间来熟悉它。

我可以给你的另一个建议是用Apache JMeter创建基准测试(https:/jmeter.apache.org。)或其他工具,让你重现性能内存问题,并找出导致你问题的执行路径。

要知道AWS不喜欢有人针对他们的服务执行性能渗透测试(https:/aws.amazon.comaup。)

© www.soinside.com 2019 - 2024. All rights reserved.