内存泄漏分析_调查内存泄漏第2部分–分析问题

内存泄漏分析

这个小型系列的第一个博客介绍了如何创建一个非常泄漏的示例应用程序,以便我们可以研究解决服务器应用程序上基于堆的问题的技术。 它展示了Producer-Consumer模式的一个大问题,即消费者代码必须能够至少与生产者一样快(甚至不是更快)从队列中删除项目。 博客以我开始的示例代码结尾,然后坐了下来,同时它泄漏了足够的内存以进行调查。 现在该进行调查了。

如果您阅读本博客的第1部分 ,您将知道泄漏代码是应用程序1的一部分,该应用程序使用Producer Consumer模式在虚拟数据库中记录了股票/股票定单。 编写示例代码包含一个非常明显的缺陷,即OrderRecord无法跟上OrderFeed 。 这意味着Order队列变得越来越大,直到最后,应用程序用完了堆空间并崩溃为止。 问题是,看我的简单代码,问题应该很明显,但是如果您以前从未看过代码,并且它是巨大的,复杂的工业强度代码,又没有简单的监视线程来监视队列大小,该怎么办?或其他内部零件? 那你怎么办呢?

他们是发现泄漏应用程序问题所需的三个步骤:

  1. 转储泄漏的服务器堆。
  2. 使用堆转储生成报告。
  3. 分析报告。

您可以使用多种工具来创建堆转储文件。 这些包括:

  1. 控制台
  2. 可视化
  3. eclipse内存分析器工具(MAT)

使用jconsole进行堆转储

jconsole连接到您的应用程序。 单击MBeans选项卡,然后打开com.sun.management包。 然后,单击HotSpotDiagnostic 。 打开“ Operations然后选择dumpHeap 。 现在,您将看到dumpHeap操作,该操作dumpHeap两个参数p0p1 。 在p0编辑框中键入堆转储的文件名,然后按dumpHeap按钮。

投资1

使用jvisualvm进行堆转储

连接到示例代码后,右键单击左侧“应用程序”窗格中的应用程序,然后选择“堆转储”。

请注意,如果您与泄漏的服务器具有远程连接,则jvisualvm将转储文件存储在远程计算机的/tmp目录中(假设它是Unix机器)。 您将必须将该文件通过FTP传输到您的计算机上以进行进一步分析。

投资2

使用MAT进行堆转储

尽管jconsole和jvisualvm是JDK,MAT或内存分析器工具的一部分,但它是基于eclipse的工具,您可以从eclipse org下载

当前版本的MAT需要在您的PC上安装1.6 jdk。 如果您使用的是Java 1.7,请放心,它将为您安装1.6,并且不会破坏您计算机的其余部分和默认的1.7版本。

投资3

使用MAT时,只需单击“获取堆转储”并按照说明进行操作即可。

投资4

远程连接

这里要注意的是,如果您想弄清楚生产服务器倒塌的原因,那么您可能必须使用JMX进行远程连接,为此,您需要以下命令行选项,我从我以前的博客重复过:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

何时进行堆转储

这需要一点思考和一点运气。 如果过早获得堆转储,那么您将看不到问题,因为它们被合法的,非泄漏的类实例掩盖了; 但是,不要等待太久,因为进行堆转储需要内存,因此进行堆转储的行为可能会导致应用程序崩溃。

投资5

最好的主意是将jconsole附加到您的应用程序并监视其堆,直到看起来即将崩溃为止。 这很容易发现,因为三个堆部分的指示器都是绿色的:

投资6

分析堆转储

这就是MAT自身的用途,因为它旨在分析​​堆转储。 要打开并分析堆转储,请选择“ File | Open Heap Dump File | Open Heap Dump 。 选择堆转储文件后,现在将为您提供三个选择,如下所示:

投资7

选择: 泄漏可疑报告 。 现在,MAT将流失几秒钟,然后生成如下所示的页面:

投资8

饼图表明,在这种情况下,存在一个主要的泄漏嫌疑人。 您可能会认为这是一个修复程序,毕竟这是示例代码,您期望什么? 好吧,是的,在这种情况下,它很明显。 怀疑“ a”占用98.7MB,而内存中的其余对象使用其他1.5MB。 在现实情况中,您确实会得到可疑的泄漏饼图,这是事实。

接下来要做的是更深入地挖掘……

投资9

该报告的下一部分(如上所示)告诉我们,有一个LinkedBlockingQueue正在使用98.46%的内存。 要对此进行进一步调查,请单击Details>>

投资10

这表明问题确实出在我们的orderQueue ,可通过我以前的博客中的三个对象访问: OrderFeedOrderRecordOrderMonitor并且正如我们从代码中知道的那样,其中包含一堆Order对象。

就是这样了; MAT告诉我们,该示例代码具有一个LinkedBlockingQueue ,它用尽了所有示例应用程序的堆空间,从而导致了巨大的问题。 它并没有告诉我们为什么会这样,您真的不能期望它会发生。 就像阿加莎·克里斯蒂 ( Agatha Christie )的赫尔克里·波洛Hercule Poirot)所说的那样,要使用“ ze little grey cell”……

参考: 调查内存泄漏第2部分–在Captain Debug的Blog博客上分析我们的JCG合作伙伴 Roger Hughes 的问题 。

翻译自: https://www.javacodegeeks.com/2013/12/investigating-memory-leaks-part-2-analysing-the-problem.html

内存泄漏分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】广东开放大学 应急管理 形成性考核

选择题 题目:()是突发公共事件应急管理工作的最高行政领导机构。 题目:以下突发公共事件中,属于公共安全事件的是()? 题目:我们赖以生活的价值是天生的,包括真…

c语言2164错误,美能达C203253353复印机常见错误故障代码介绍

《美能达C203253353复印机常见错误故障代码介绍》由会员分享,可在线阅读,更多相关《美能达C203253353复印机常见错误故障代码介绍(2页珍藏版)》请在人人文库网上搜索。1、美能达C203253353复印机常见错误故障代码介绍柯尼卡美能达C203/253/353复印机常见…

【渝粤教育】广东开放大学 电路分析基础 形成性考核 (59)

选择题 题目:电路如图所示,Ua( )V,Ub( )V 题目:实际电流源开路时,该电流源内部 题目:电压和电流的参考方向关联的含义是 题目:用万用表测量电阻时…

将Java Flight Recorder与OpenJDK 11结合使用

Java Flight Recorder(JFR)曾经是Oracle JDK的商业附加组件。 由于它是与Java Mission Control一起最近开源的,因此使用OpenJDK 11的每个人现在都可以使用此出色的工具免费对Java应用程序进行故障排除。 JFR以前是专有解决方案,对…

【渝粤教育】广东开放大学 计量经济学 形成性考核 (21)

选择题 题目:计量经济学基下列( )学科的分支学科。 题目:经济计量模型的因变量一定是( )。 题目:描述微观主体经济活动中变量关系的计量经济模型是( )。 题目&#xff1a…

根号n向下取整的c语言编程,【向上取整/向下取整】C语言向上或向下取整 函数...

C语言有以下几种取整方法:1、直接赋值给整数变量。如:int i 2.5; 或 i (int) 2.5;这种方法采用的是舍去小数部分2、C/C中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。3、使用floo…

【渝粤教育】广东开放大学 人际沟通实务 形成性考核 (49)

选择题 题目:很久以前,有一个放羊的孩子,由于顽皮,明明没有狼出现,他偏喊:“狼来了,狼来了!”村里的男女老少听到他的呼喊都赶来帮忙,结果发现上当了,都十分恼火。之后这…

【渝粤教育】广东开放大学 国际金融 形成性考核 (48)

选择题 题目: 汇率变化对经济的影响,表现在 ( )。 题目:中间汇率是指( )的平均数。 题目:20世纪70年代以后,各国外汇储备逐渐走向多元化。 题目:本币对外升值后,资本流出…

【渝粤教育】广东开放大学 客户服务管理 形成性考核 (39)

选择题 题目:客户关系管理(Customer Relationship Management,CRM)最早产生于( ),由美国的Gartner Group提出 题目:下列对CRM的基本特点的描述,错误的是( &am…

jooq映射原理_JOOQ事实:从JPA批注到JOOQ表映射

jooq映射原理JOOQ是一个简洁的框架,它解决了我在使用高级动态过滤查询时遇到的一个长期问题。 尽管Hibernate和JPA附带了一个有用的Criteria API(我已经使用了很长一段时间),但是您可以使用这些API进行操作有一些可以理解的限制。…

c语言开发工具程序代码是什么文件,【C语言】开发工具--GCC使用入门

来自: 51CTO GCC使用入门通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编…

【渝粤教育】广东开放大学 文学创意写作 形成性考核 (58)

选择题 题目:“熟读唐诗三百首,不会吟诗也会吟”,说明阅读对于写作的作用之重要。 题目:从写作者的主观角度来看,文本思想体现着写作者的写作意图和写作目的。 题目:所谓结构,简单说就是文本内部…

【渝粤题库】广东开放大学标准文献检索与应用 形成性考核

选择题 题目:按文献出版的类型分:图书、期刊、 。 题目:按文献载体种类分:印刷型文献、缩微型文献、机读型文献、 、实物型。 题目:检索的手段包括 题目:检索系统的类型&am…

无服务器安全性:将其置于自动驾驶仪上

Ack :本文是从个人经验以及从无服务器安全性的其他多个来源学到的东西的混合。 我无法在这里列出或确认所有这些信息; 但是,应该特别感谢The Register , Hacker Noon , PureSec以及Serverless Status和Serverless&…

c语言构造报文,构造一个缓冲区溢出的C语言的例子

满意答案wk05122013.06.01采纳率:45% 等级:12已帮助:15719人#include #include #include void function(char *str){char buffer[16];strcpy(buffer, str);}void evilfunc(){printf("Am I Evil?\n");}int main(int argc, char*…

【渝粤题库】陕西师范大学152113 统计学 作业

《统计学》作业 一、单项选择题 1、“统计”一词的三种含义是( )。 A. 统计调查、统计整理、统计分析 B. 统计工作、统计资料、统计学 C. 统计信息、统计咨询、统计监督 D. 统计理论、统计方法、统计技能 2、社会统计的研究对象是( &#xff…

【渝粤题库】陕西师范大学180212 定价理论与策略 作业(专升本)

《价格理论与实务》作业 一、单选题 1、当一切商品的价值共同表现在充当一般等价物的商品上时,此时的价值形式就是( )。 A.简单价值形式 B.扩大的价值形式 C.一般价值形式 D.货币价值形式 2、各种商品价格之间相互衔接…

android自动退出对话框,Android开发 在用EditText对话框Dialog退出后实现输入盘的退出...

前言在使用继承的Dialog的方式实现自定义Dialog,如果这个Dialog我们还添加了EditText就会发现一个问题。在输入盘显示后,Dialog退出输入盘不会退出。网上有一些奇怪的解决办法,最奇怪的是去根据Touch事件判断Touch坐标来确定是否点击了空白在…

【渝粤题库】陕西师范大学200481 高级英语(一)

《高级英语(一)》作业 I. Explain the italicized words in English 1.The very act …was for me a far greater adventure than any trip or any reportorial assignment I’d previously taken. 2.Others were using little red telephones that hung on the facades of gro…

mongodb插入速度每秒_MongoDB事实:商品硬件上每秒插入80000次以上

mongodb插入速度每秒在尝试一些时间序列集合时,我需要一个大型数据集来检查我们的聚合查询在增加数据负载的情况下不会成为瓶颈。 我们解决了5000万份文档,因为超出此数目我们仍然会考虑分片。 每次事件如下所示: {"_id" : Objec…