通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用!

内存,内存,内存...

内存是Java的关键部分,尤其是内存管理。 作为开发人员,内存管理不是您要定期执行的操作,也不是您要手动执行的操作。 Java的一大优点是它能够为您处理内存模型。 当不使用对象时,Java会通过清理来帮助您。

但这也是问题开始的地方。 使用Java,也许您的应用程序不再使用对象,但是如果您不告诉虚拟机您不再使用它,则它不会清除它。 这是内存泄漏 。 我们都看过他们。 对象开始在您的堆中累积,您的应用程序停止运行。

内存泄漏通常是由于编程不当而导致的-通常是在开发人员未释放对对象的所有引用的情况下。 如您所知,Java中的类似对象被放到集合或映射中,因此如果您不从集合中删除特定的数据集,问题就会变得更加复杂。 收集的东西越多,您损失的空间就越大。

当Java为您管理内存模型,或者创建/销毁未使用的对象时,它将它们放入堆中。 该堆始终具有一定的大小,并具有最大可用空间。 如果内存管理不善,堆的空间将用完。 集合加起来,然后JVM崩溃。

诊断泄漏

传统上,有两种主要的内存泄漏诊断方法:堆转储和分析器。

第一个是堆转储,基本上可以让您查看哪个对象持有对集合的引用。 它可以使您对导致问题的对象有一个很好的了解,但它不会告诉您谁在访问集合,而谁没有访问集合。 它告诉您集合的位置,但不告诉您使用它的人的特征。 堆转储通常也非常大,以GB为单位,并且大堆转储很繁琐。 分析和打开堆转储,然后阅读并确定问题,需要大量资源。

第二种方法是堆转储和探查器的组合,可以使您更接近一点,但不多。 内存探查器会尝试帮助您分析堆转储。 他们拥有实时数据,现在您知道是谁在创建对象,但是您仍然没有真正导致泄漏的原因。

假设我有一个雇员对象。 员工对象被放入集合中,探查器将告诉您创建它的人。 探查器没有告诉您的是谁将其放入集合中以及从集合中将其删除。 探查器告诉您对象的诞生,而不是泄漏的原因。 无论如何,这可以帮助您缩小范围,但是您需要应用程序的扎实知识才能使探查器真正地帮助您确定原因,然后仍然需要大量时间和资源来查找泄漏。

我们从很多人那里听到了。 许多公司尝试使用这些工具,但是每隔几天他们的应用就会崩溃。 那他们怎么办? 他们重新启动JVM或CLR。 他们的应用再次崩溃,然后重新启动。 应用程序管理是一场噩梦,因为他们无法找到或修复其内存泄漏。

堆转储和事件探查器都可以在开发和预生产中提供帮助,但是一旦您的应用大量使用,事件探查器就无法使用。 探查器会引入大量开销,堆转储几乎会停止生产中应用程序的所有处理。 基本上,您需要使该JVM / CLR上的应用程序脱机才能完成所有工作。

随着当今应用程序的发展,这些繁琐的过程变得越来越难维护。 随着应用程序变得越来越复杂,堆越来越大,最终,这些方法并没有减少它。

AppDynamics和内存泄漏

迄今为止,我们的方法一直是提供全面的事务快照,尤其是明显的代码问题,可以使您深入了解问题的根源。 为了有效地隔离和解决内存泄漏,事务和代码路径分析至关重要。

这带给我们AppDynamics的一些有趣的发展。 我们为公司提供了一种直接识别内存泄漏根本原因的方法。 您可以自动检测泄漏,确定是谁在创建泄漏,以及导致该泄漏的代码路径或业务交易。 您可以在此处了解更多信息。

这有好处吗? 减少停机时间并降低MTTR。 我们很兴奋。 希望你也是。

通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用!

翻译自: https://www.javacodegeeks.com/2016/10/apm-non-java-guru-leak.html

非Java专家的APM:什么泄漏?相关推荐

  1. apm java_非Java专家的APM:什么泄漏?

    apm java 通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序. 开始免费试用! 内存,内存,内存... 内存是Java的关键部分,尤其是内存 ...

  2. 在java中会存在内存泄漏吗?

    ● 请问,在java中会存在内存泄漏吗?请简单描述一下. 考察点:内存 参考回答: Java中的确存在Java的内存泄漏, 并且事态可以变得相当严重 Java garbage collector自动释 ...

  3. 码出高效:java开发手册_Java 11手册:Java专家分享他们在Java 11方面的最佳和最差的经验

    码出高效:java开发手册 Java 10标志着Java生态系统新时代的开始,但最新版本证明仍有一些里程碑可言. Java 11是Oracle新的六个月周期中的第一个LTS版本. 您可以在此处下载Ja ...

  4. 非Java程序员转行Java-day01-入门基础

    1.学习大纲介绍 课件中的代码及资料:提取码:yexw 学习中的依赖包及安装文件:提取码 :8par 2.数据流向分析 2.1.应用型软件开发本质 增删改查(非常重要,5星) 2.2.大型网站演变历史 ...

  5. Java专家系列:CPU Cache与高性能编程

    认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引 ...

  6. java布道师_初探第10代Java帝国:11位Java专家道出了他们最喜欢的功能

    Java 10发布后.我们第一时间与11位Java专家讨论了一波.顺便深入挖掘了他们在Java 10中最喜欢的功能和对未发布的JDK11版本的一些看法. " Java 10对Java 9来说 ...

  7. 启动非java虚拟机方式下运行matlab

    在非java虚拟机下运行matlab据说可以扩大内存,启动非java虚拟机下运行 matlab的方法有: 一. 1.右建点matlab快捷方式,选属性 2.在"目标"中添加-noj ...

  8. 建议大家使用Java 8 的日期、时间,而非java.util.Date

    建议大家使用Java 8 的日期.时间,而非java.util.Date. 详细原因见:如何在Java 8中愉快地处理日期和时间 总结一下就是, java.util.Date 太乱,如 月份从0开始. ...

  9. Maven-打包的时候丢失非.java的文件

    之前用eclipse没有问题,后来把项目放到同事的idea上,程序运行报错,后来追溯到classpath下,发现缺少一个包,整个包都没有,这个包下的文件都是.xml文件,看到有人说maven默认打.j ...

最新文章

  1. 重点:怎样正确的使用QThread类(注:包括推荐使用QThread线程的新方法QObject::moveToThread)...
  2. python基础(part10)--函数
  3. php接口数据加密、解密、验证签名【转】
  4. 自定义input[type=file]的兼容样式
  5. mysql空值判断函数_MySQL中的ifnull()函数判断空值
  6. Windows Server上用命令来起停IIS站点
  7. 另类方法激活你的Winodws 2008
  8. 软件设计师中级下午题
  9. 视听杂志视听杂志社视听编辑部2022年第6期目录
  10. jle汇编_汇编跳转指令集
  11. 从js给html的form表单赋值,js获取form表单数据和form表单赋值
  12. 中国没有乔布斯,美国没有史玉柱
  13. CAS票据之ST与TGT过期策略详细说明
  14. PART 2.1 风控模型种类变量选择范围变量衍生特征交叉
  15. 关于oracle怎么保证读一致性
  16. C++编译器无法捕捉到的8种错误
  17. c4.5决策树算法 c语言,决策树(三):C4.5算法和CART算法
  18. 用Java写简单的购物小票
  19. 合规与竞争压力剧增,Tether自救进行时 |链捕手
  20. 数据结构学习笔记(王道)

热门文章

  1. Redis进阶之主从复制
  2. 学会它,可以替你写100行 200行 300行……的代码
  3. jQuery动画与事件概念以及语法
  4. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
  5. jquery sleep函数
  6. js 时间戳转换成时间_JavaScript 时间戳转成日期格式
  7. Redis学习之缓存穿透、缓存击穿和缓存雪崩详解
  8. mybatis多表新增如何获取主键ID
  9. jpa避免n+1_JPA技巧:避免N + 1选择问题
  10. 通过OAuth 2.0和Okta使用安全的服务器到服务器通信构建Spring Boot应用