我在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服务器。
查看Eclipse Memory Analyzer (https:/www.eclipse.orgmat),我过去用它成功地找到了几次内存泄漏,但需要一些时间来熟悉它。
我可以给你的另一个建议是用Apache JMeter创建基准测试(https:/jmeter.apache.org。)或其他工具,让你重现性能内存问题,并找出导致你问题的执行路径。
要知道AWS不喜欢有人针对他们的服务执行性能渗透测试(https:/aws.amazon.comaup。)