Java应用程序延迟减少和缺陷

更新时间: 2024-06-28 10:15:29来源: 粤嵌教育浏览量:71

减少延迟对java开发人员来说是一个新的挑战,所以我需要最佳的工具来解决它。有许多可用的工具,既有开源的也有付费的。

 

在本文中,介绍与大型生产应用程序的内存分析相关的挑战,以及如何克服这些挑战。

 

挑战

1.大型应用程序的JVM堆内存占用相当大,分析如此大的堆转储需要大量内存来运行分析器工具,并且在普通的笔记本电脑上通常很慢。

2.大型堆转储消耗等量的磁盘空间。如果没有足够的磁盘,堆转储命令将失败,或者在最坏的情况下,填满根分区并使运行它的主机崩溃。

3.堆转储是一个世界末日事件。进行堆转储会暂停应用程序中的所有活动,这可能导致服务的运行状况检查失败,并可能导致服务被终止,从而难以获取堆转储文件。

 

解决办法

1.在大型堆转储的情况下,最好使用像AWS EC2这样的具有足够内存和磁盘空间的基于云的资源。

2.为了解决磁盘空间问题,如果应用程序运行在一些云资源上,那么它通常有单独的存储附加到它。在进行堆转储之前,可以增加单独的存储。

3.检查是否使用定期运行状况检查来监控应用程序,例如,它是否是负载平衡器的一部分。在这种情况下,需要将它从服务机队中取出,以避免在堆转储命令启动后被终止。

4.以一定的时间间隔获取多个堆转储,以捕获服务状态的变化。

 

改进

1.最大的元凶之一是内存中的缓存,这导致了过多的保留堆,从而导致频繁的垃圾收集和延迟影响。

2.内存分析给出了一个主要的线索,关于用于数据检索的数据索引是如何被使用的。结果是,完整的索引被装载在JVM堆中,也存储在tmpfs上,因此使用了两倍的所需内存,这是不必要的,还会导致频繁的垃圾收集。

 

结论

分析任何大规模生产应用程序的内存都是至关重要的。在应用程序中缓存数据可能是有用的,但是应该密切监视,以监视随着时间的推移是否有任何降级。

堆转储分析是一个强大的工具。如果使用正确的机器和工具,它会变得很痛苦。注意生产应用程序的运行状况检查例程,同时采用堆转储来成功收集这些例程。

免费预约试听课