精华内容
下载资源
问答
  • 资源泄露检测

    2014-12-18 12:33:06
    资源泄露检测 C C++开发者必备修养。 开发者必看。
  • 资源泄漏如何处理 使用Java监视器查找资源泄漏 查找缓慢的资源泄漏是使应用程序服务器长时间保持正常运行的关键。 在这里,我解释了如何使用Java监视器来发现缓慢的资源泄漏,以及如何验证它们是否是实际泄漏,而不...

    资源泄漏如何处理

    使用Java监视器查找资源泄漏

    查找缓慢的资源泄漏是使应用程序服务器长时间保持正常运行的关键。 在这里,我解释了如何使用Java监视器来发现缓慢的资源泄漏,以及如何验证它们是否是实际泄漏,而不仅仅是额外的预分配到某些HTTP连接器或数据库池中。 如果执行这些步骤,则可以摆脱定期重新启动,并真正开始依赖服务器。

    缓慢的资源泄漏是一个问题,因为它们迫使您定期重新启动应用程序服务器。 反过来,这意味着您必须始终盯着服务器,因为它们可能随时崩溃。 最终,您不能依赖遭受缓慢资源泄漏的服务器。 跟踪和解决缓慢的资源泄漏需要时间和耐心。 一旦完成几次,这并不是很难做到的。

    您还需要一个监视工具,该工具可以显示过去几周甚至几个月内来自服务器的统计信息。 如果在服务器上启用了更长的数据存储,则可以使用Java监视器来执行此操作。 要在Java监视器中启用此功能,请首先开始对服务器使用Java监视器 。 在带有服务器图形的页面上,可以通过切换到“ 1周”或“ 1个月”视图来启用更长的数据,如下所示。

    开关

    第一步是查看过去一周中服务器的数据。 为了发现资源泄漏,我发现绘制一周的数据比查看Java监视器标准的两天的数据要好。 峰平滑了,这些图让我看看例如内存使用随时间如何发展。

    为了预测即将发生的中断和缓慢的资源泄漏,我寻找两种模式。 首先要检查的模式是资源使用量不会随时间增加,而是随着流量的日趋增加和减少而增加和减少。 当一天的流量减少后,我预计资源使用量将回落到名义水平。 我检查资源使用率是否每次都回落到同一水平。

    请注意,我故意使用诸如“资源”之类的模糊术语。 在实践中,我查看所有图的内存,文件描述符以及HTTP连接器和数据库连接池。 所有这些都是缓慢的资源泄漏的候选者。

    当我看到资源似乎在增长的时候,我切换到数据的每月视图,甚至年度视图。 这将压缩图中的数据,并使缓慢的资源泄漏更容易发现。

    这是资源使用情况可疑更改的示例。 在这种情况下,系统上的垃圾收集器突然变得更加活跃。 此时,系统或系统负载没有变化。

    慢1

    我要注意的第二种模式是服务器重启重启后资源分配急剧下降。 重新启动应用程序服务器时,如果资源使用量显着下降,则可能表明资源泄漏缓慢。 重新启动之后,通常会像重新启动之前那样降低资源使用量,因为所有池和缓存都开始为空。

    这是一个与重启相关的资源使用变化的示例,该变化并不表示有问题。 重新启动后一段时间(甚至几天),资源使用情况发生了变化,但随后又恢复到正常水平并停留在该水平。

    慢3

    这是另一个。 甚至更加可疑,因为重新启动后资源使用率并未恢复。 它只是掉下来并停留下来。 这几乎肯定是一个问题。

    慢5

    一旦确定资源使用模式可疑,就必须确认这实际上是一个缓慢的泄漏。 很有可能是缓存或池中填充了更多缓存,从而随着时间的推移提高了资源使用率,而没有实际泄漏。 在这一步中,我将遍历线程和数据库池的图以及HTTP会话的图。 我试图从那里的图表来解释提高的资源使用情况。

    例如,在这里我们看到了JVM中活动的线程,线程数量有些奇怪的下降。 这些下降表明系统重新启动。

    慢2

    但是,如果将该图与同一台服务器上的HTTP连接器池图进行比较,我会发现HTTP连接器池中预分配的线程数同样会上下波动。

    慢4

    这可能意味着没有缓慢的资源泄漏。 最有可能的是,池中的额外线程保持状态,从而导致其他资源也增加。 我可能会记下具体注意此服务器的信息,但我还没有开始深入研究资源泄漏。

    只有当我无法解释从池中分配的额外资源和活动HTTP会话的数量时,我才真正开始挖掘。 如下所述: 如何找到资源泄漏缓慢的根本原因

    解决缓慢的资源泄漏

    我们研究了如何较早发现缓慢的内存泄漏。 在那里,我们看到了如何发现缓慢的资源泄漏,以及如何将其与预期的池增长行为区分开。

    在这里,我想解释一下如何确定缓慢的资源泄漏的根本原因,以及最终如何解决它们。 修复缓慢的资源泄漏几乎总是需要更改代码,因此,如果您无法更改代码,则无法修复缓慢的资源泄漏。 在这种情况下,您将必须找到可以的人。

    识别缓慢资源泄漏的根本原因的过程类似于发现快速泄漏的过程。 主要区别是时间对您不利。 对于快速泄漏,您可以轻松地进行几次迭代,而缓慢的泄漏则可能需要数周或数月才能显现出来。 迭代可能是一年的四分之一。 为了更快地泄漏,您可以快速更改代码并“实时查看其运行状况”。 对于较慢的泄漏,这仅意味着您将永远找不到真正的问题。

    要遵循的步骤是:

    1. 确定泄漏的资源(完成,是的!)
    2. 收集有关该资源的证据
    3. 撰写关于什么是问题的论文,看看证据是否支持您
    4. 向您认识的人展示您的分析结果,从而将您的证据撕成碎片
    5. 设计并实施修复

    请注意,我们通常通常只快速执行步骤3,然后将所有精力花在步骤5上,却发现真正的问题是其他问题。 我应该知道,因为我犯错的次数比我愿意承认的还要多。

    一旦知道泄漏了哪些资源(例如内存,文件描述符,CPU周期,线程),便开始收集有关泄漏的证据。 该证据来自多个来源。 如果泄漏的资源仅在您的代码中很少使用,则应用程序源代码是开始收集的好地方。 如果这是在各处(例如内存)使用的东西,那么查看源代码通常很耗时,并且效率不高。 因此,这是我要寻找证据的备忘单:

    • 记忆
      --->堆转储
    • 文件描述符
      ---> Java监视器的线程池图以及lsof或sockstat
    • 中央处理器
      --->线程转储
    • 线程数
      ---> Java监视器的线程池图和线程转储
    • 数据库连接
      --->在JDBC驱动程序上启用资源泄漏检测

    收集证据时,保持开放的态度非常重要。 得出关于正在发生的事情的结论是很诱人的。 相反,只需查看很酷的证据并消除可能的问题。

    至关重要的一步是向不惧怕挑战您的人提供您的证据和思路。 此步骤是为了防止您在分析中犯错误,并且必须等待几周才能发现自己是错误的。 在这个阶段,只是点头和鼓掌的人可能弊大于利,不管这个人的意图多么好。 找到合适的人,并告诉该人您需要严格的审查。

    一旦您的分析克服了这一挑战,您就可以最终开始考虑解决方案。 该解决方案需要包括两个部分:1)它需要以一种使系统为您提供有关刚刚发现的问题的证据的方式来改进日志记录和监视,以及2)它需要实际解决该问题。

    如果您的解决方案不正确,改进的日志记录将为您提供新的新证据,以供您进行第二次(可能是最终的!)迭代。

    参考: Java-Monitor博客上的JCG合作伙伴 Kees Jan Koster处理缓慢的资源泄漏。

    翻译自: https://www.javacodegeeks.com/2013/09/dealing-with-slow-resource-leaks.html

    资源泄漏如何处理

    展开全文
  • AQTime (有x64、win32的)进行内存泄露资源泄漏监控http://wenku.baidu.com/view/9aa1c2afdd3383c4bb4cd2c1.html x64下载:http://downlite.net/lp.php?c=oc&n=AutomatedQA.AQTime.v6.21.400.x64.Cracked....

    AQTime (有x64、win32的)进行内存泄露和资源泄漏监控
    http://wenku.baidu.com/view/9aa1c2afdd3383c4bb4cd2c1.html

    x64下载:http://downlite.net/lp.php?c=oc&n=AutomatedQA.AQTime.v6.21.400.x64.Cracked.WORKING-BRD

     

    Windows Leaks Detector(好象只有win32)
    http://sourceforge.net/projects/winleak/?source=dlp

    转载于:https://www.cnblogs.com/dkblog/archive/2013/06/08/3125778.html

    展开全文
  • 防止资源泄漏

    千次阅读 2015-06-05 15:00:06
    查看编译后的exe程序是否有资源泄漏:任务管理器->查看->选择列->GDI对象 如GDI对象一直增加,则有资源泄漏。会出现LoadBitmap失败直接导致崩溃,程序绘图出现异常(主要是窗口自绘出现异常),程序内存持高不下...

    查看编译后的exe程序是否有资源泄漏:任务管理器->查看->选择列->GDI对象

    如GDI对象一直增加,则有资源泄漏。会出现LoadBitmap失败直接导致崩溃,程序绘图出现异常(主要是窗口自绘出现异常),程序内存持高不下等等。    

           GDI资源泄漏主要是指申请的GDI资源没有释放,导致程序占用的GDI资源越来越多,内存的占用也越来越多,从而导致程序出现异常。在Windows中有HPEN、HBRUSH等GDI对象,MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen、CBrush、CFont、CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类。对于通过Create-XXXXX动态创建的GDI对象资源一定要进行销毁,比如CreateCompatibleDC()、CreateCompatibleBitmap()、CreateIndirectFont()、CreateSolidBrush()、CreatePen()等,在使用结束后一定要调用对应的Delete-XXXXX接口将GDI对象资源给释放掉


    GDI对象使用和防止资源泄漏资料参考:http://www.cnblogs.com/nearu/archive/2009/06/08/1498898.html 如下:

    在windows系列上做编程,gdi是一个很重要的技术点,有很多程序在运行多次后出现异常,除了众所周知的内存泄漏外,gdi资源泄漏也是一个很直接的原因.总结如下:
    1.Create出来的gdi对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放. 
    这里的Create指的是以它为开头的gdi函数,比如,CreateDIBitmap,CreateFont等等, 最后都要调用DeleteObject来释放

    2.Create出来的dc要用DeleteDC来释放,Get到的要用ReleaseDC释放. 

    3.确保释放DC的时候DC中的各gdi对象都不是你自己创建的;确保个gdi对象在释放的时候不被任何dc选中使用;
    假如我们要使用gdi函数画图,正确的步骤应该如下: 
    a.创建一个内存兼容dc(CreateCompatibleDC) 
    b.创建一个内存兼容bitmap(CreateCompatibleBitmap) 
    c.关联创建的内存兼容dc和bitmap(SelectObject) 
    d.画图 
    e.BitBlt到目的dc上 
    f.断开内存兼容dc和bitmap关联(SelectObject) 
    g.销毁内存兼容bitmap 
    h.销毁内存兼容dc 
    由于SelectObject在选入一个新的gdi对象的时候会返回一个原来的gdi对象(假如成功的话),所以需要在步骤c的时候保存返回值,在步骤f的时候当作入口参数使用.还有,步骤g和步骤h实际上顺序可以随意,因为他们两个此刻已经没有关系了,但是为了结构清晰,我建议按照 "先Create的后释放,后Create的先释放 "的原则进行. 
    关于步骤f,可能会有争议,因为即使省略这一步,步骤g和步骤h看起来照样可以返回一个成功的值.但实际上可能并没有执行成功,至少boundschecker会报告有错,错误信息大致是说,在释放dc的时候还包含有非默认的gdi对象,在释放gdi对象的时候又说这个gdi对象还被一个dc在使用.所以,我建议保留步骤f. 
    4.关于在打印机上使用BitBlt 
    有时候在内存兼容dc里面已经做好图了,但在使用BitBlt的时候却会失败.这个时候,首先确认创建的内存兼容dc和bitmap是不是使用打印机的dc,如果确认无误,还是执行BitBlt失败,那80%可能是内存兼容bitmap太大了,请按如下方法再试试: 
    创建另外一个内存兼容dc2和一个比较小的内存兼容biimap2,大概是1000*1000吧,然后把dc里面的内容分成块(1000*1000),把每一块BitBlt到dc2上面,再从dc2里面BitBlt到打印dc上.有人可能会有这样的疑问:那为什么不直接把dc里面的内容分几次BitBlt到打印机上呢?有区别吗?答案是肯定的,如果dc里面的bitmap太大,哪怕你想BitBlt一个10*10的区域到打印机上都会失败. 


    展开全文
  • .NET虽然拥有强大易用的垃圾回收机制,但并不是因为这样,你就可以对资源管理放任不管,其实在稍不注意的时候,可能就造成了资源泄露,甚至因此导致系统崩溃,到那时再来排查问题就已经是困难重重。 一、知识点简单...
  • Java资源泄露

    千次阅读 2017-12-26 11:10:05
    1. 正常情况下的资源泄露  FileOutputStream fos = newFileOutputStream(new File("test.txt"));  ...  fos再也没有被关闭。 2. 异常情况下的资源泄露  1)   FileOutputStream fos = ...



    1. 正常情况下的资源泄露

        FileOutputStream fos = newFileOutputStream(new File("test.txt"));

        ...


        fos再也没有被关闭。


    2. 异常情况下的资源泄露

        1) 

        FileOutputStream fos = newFileOutputStream(new File("test.txt"));

        fos.write(7);          //  write()发生异常,导致fos.close()没有被执行。

        fos.close();


        2)

        FileOutputStream fos1 = newFileOutputStream(new File("test1.txt"));

        FileOutputStream fos2 = newFileOutputStream(new File("test2.txt"));


        fos1.close();         // close()发生异常,导致fos2没有close。—— close()会调用flush(),所以可能抛出异常。

        fos2.close();



    Java的try/catch的异常机制,是一种checked exception机制。目的是用来报告程序执行时出现的错误。
    当异常发生时,程序不能继续执行,会退出。在这样的情况下探求“资源泄露”,意义不大,是舍本逐末的做法。


      








    展开全文
  • 内存泄露&&资源泄漏及解决

    千次阅读 2011-09-25 15:16:16
    new/malloc的,不释放,是内存泄露, COM接口不Release的,是内存泄露。...创建的线程,Socket,GDI对象等,不close是资源泄露。 使用工具: 1)BoundsChecker :(http://www.compuware.com/)(首选B
  • 如何检测资源泄露

    2019-07-05 07:40:47
    Window上我们常见的资源泄露包括内存和对象句柄泄露, 下面讨论下对各类泄露的检测方法。关于内存泄漏,我以前写过2篇文章:C++中基于Crt的内存泄漏检测,基于WinDbg的内存泄漏分析用上面提到的方法检测泄露很多时候...
  • 基于扩展状态机对资源泄漏故障进行描述,给出了资源泄漏缺陷状态机,定义了缺陷的状态、状态迁移图和状态转换表。设计和实现了资源泄漏检测算法。该算法在对控制流进行遍历的过程中,按照资源泄漏缺陷状态机给出的...
  • C++总结4——内存泄露/资源泄露

    千次阅读 2017-07-16 15:21:37
    内存泄露/资源泄露现象 1.malloc/new动态申请的内存,忘记写free/delete,导致内存泄露; 2.调用默认的赋值运算符重载函数,发生浅拷贝现象,导致内存泄露 3.在构造函数中new,但是程序运行过程中抛出异常,未...
  • 如何检测资源泄漏

    2018-01-31 14:38:33
    Window上我们常见的资源泄露包括内存和对象句柄泄露, 下面讨论下对各类泄露的检测方法。 用上面提到的方法检测泄露很多时候太麻烦,所以有时候我们会考虑用工具 VLD: Visual Leak Detector源于Code ...
  • 由于程序使用的资源都是有限的,如果程序使用的资源超出限制,有可能 导致程序崩溃,分享几个程序资源使用...如果使用的socket资源和popen资源超过1024个,那么使用的时候很有可能造成资源泄漏。这个时候很有可能...
  • 内存泄露/资源泄露现象 1.malloc/new动态申请的内存,忘记写free/delete,导致内存泄露。 2.调用默认的赋值运算符重载函数,发生浅拷贝现象,导致内存泄露。如下图: 3.在构造函数中new,但是程序运行过程中抛出...
  • 针对Android资源泄漏的基准测试集的构造与评测.pdf
  • 深聊测开领域之:Testcase中资源泄露

    千次阅读 2021-01-13 10:00:39
    1 引言2 何为资源泄露2.1 资源泄露定义2.2 TestCase 中资源泄露3 避免资源泄露3.1 如何避免资源泄露3.2 自动化执行顺序 1 引言 执行测试时离不开测试用例,测试用例辅佐执行测试,这就好比皇帝与宰相,需要的是...
  • Java Resource Leaks Monitor,用于Java资源泄露检测。 当程序库的作者向用户提供一个使用后需要释放资源的类,通常都苦恼如何保证用户的这个行为。Java的类不像C++拥有析构函数,对于库的提供者,C++程序员面对上述...
  • 人工智能有助于城市检测代价高昂的水资源泄漏.pdf
  • Netty资源泄露检测ResourceLeakDetector

    千次阅读 2018-04-28 19:38:30
    资源泄露 ByteBuf不再使用后(没有引用),没有调用release,导致ByteBuf资源一直被占用无法回收。检测原理原理:每次创建ByteBuf时,创建一个虚引用对象A指向该ByteBuf对象,如果正常调用release()操作,则虚引用...
  • 自动资源释放-使用对象管理资源,解决资源泄露问题自动资源释放-使用对象管理资源,解决资源泄露问题自动资源释放-使用对象管理资源,解决资源泄露问题
  • 线上golang grpc服务资源泄露问题排查

    千次阅读 2020-04-02 18:37:13
    前几天告警群里报出一个go服务grpc接口出现很多超时现象,排查发现是服务有内存泄露与cpu占用高的问题,在这里将排查的过程记录一下,给大家...正常情况下不会有这么高的资源占用,可能是服务有资源泄露的问题,资...
  • 资源泄露的检查

    2011-02-16 08:11:00
    回顾与学习下资源泄露的检查方法
  • MFC 资源泄露引起的问题

    千次阅读 2013-07-31 10:15:57
    MFC开发软件,注意内存泄漏和资源泄漏,此篇文章来谈谈资源泄漏引起的问题  1:资源泄漏引起的现象:  程序长时间运行,系统界面出现花屏现象,这就应该是资源泄漏  2:诊断方法:  可以打开资源管理器,...
  • vld-2.3-资源泄漏检测

    2017-09-08 22:07:31
    内存泄漏、内存越界是最常见的内存问题之一。 内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉。但是对于长时间运行的程序,其破坏力是惊人的,...
  • topic/golang-nuts/cCdm0Ixwi...资源泄露是指,未到指定的时间,内存资源不释放 package main import ( "time" "fmt" "runtime" ) func main() { var ms runtime.MemStats ...
  • 超强大的资源检测工具,可以实时跟踪程序使用的Bitmap, Brush,Pen,DC, MemDc,Font,Region,Palette等。并且能够显示具体的资源如: Bitmap:能显示内存中的Bitmap图像。 Brush: 画刷的颜色 。 。 。
  • 1、一个资源,很多人用,如果大家都不delete,必定造成资源泄露 2、如果多个人进行delete,必定导致未定义行为。 3、因此,只能有一个delete,而且必须是最后一个使用者进行delete。 4、那么问题来了,我怎么知道...
  • Wince GDI资源泄露可能原因 在网上找了很多人的博客来看,在各种论坛里面看高手的回复,把Wince GDI资源泄露的可能原因总结了一下 (1)不要用CDC做直接用HDC (2)OnEraseBkgnd擦除背景函数没用,只有...
  • 2 资源泄漏 2.1 内存泄漏 2.1.1 示例 问题描述 通过 malloc 等函数动态申请的内存在使用后必须相应地调用 free 等函数释放,否 则这块内存就不能被再次使用,出现内存泄漏,示例如下: 示例一: `在这里...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 210,195
精华内容 84,078
关键字:

资源泄漏