在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
什么是Java中的内存泄漏通常,当应用程序不再使用对象时,应该对这些对象进行垃圾回收。但是,如果仍然引用这些对象,则垃圾回收器无法从工作内存中删除这些对象。此外,在应用程序的整个生命周期中,还有一些对象保留在内存中(例如:静态变量)。因此,此类应用程序消耗越来越多的内存,并导致OOM(Out Of Memory)问题。 内存泄漏与生产系统在wso2中,我几乎没有分析某些生产系统中的内存泄漏的经验。生产系统中发生内存泄漏的可能性很高,因为这些系统运行较长时间而没有重启。在这种情况下,即使内存泄漏很小,它也会累积泄漏,最后可能会导致严重的内存泄漏。这样的内存泄漏很难在本地重新创建,但是我们可以尝试通过使系统长时间保持负载运行来尝试复现问题。 内存泄漏的原因内存泄漏的主要原因是不良的编程。
什么是堆转储(heap dump)堆转储是某个特定时间点Java进程内存的快照。触发快照时,堆转储包含Java对象和类。 为什么我们需要分析堆转储堆转储分析有助于找到对象的创建位置,并在源中找到对这些对象的引用。该调查的最终目标是找到消耗过多内存的对象以及正在运行的应用程序中这些对象的存放位置。 如何分析堆转储1.在基线和高流量中捕获堆转储。这意味着当系统运行正常且流量很高时,我们需要进行两个堆转储。 jmap-dump:format=b,file=<file-path><pid> 其中pid:是Java进程ID,我们要捕获其堆转储。 file-path:是堆转储将写入数据的文件路径。 2.在系统崩溃之前捕获堆转储 XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<file-path> file-path:是堆转储将写入的文件路径。 3.确定在步骤1和步骤2之间大小在增长的对象。 几个内存分析工具
参考资料
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13