`
explorer
  • 浏览: 95627 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SleuthQA CodeWatch 跟踪后台服务资源泄漏

阅读更多

某日,一个我编写的Delphi 应用(dll 插件)被发现运行一段时间后,系统的PF 占用其高且下不来。

后在任务管理器中发现此应用所在的exe 在运行期间的句柄计数会稳定累积增加, user对象、GDI对象计数未发现明显异常。

使用SleuthQA CodeWatch( 以下简称 CW) 调试此dll, 过程如下:

 

 

Step1. 准备工作

 

1.1  CW-File-NewProject,选择要分析的模块,即本应用的dll

 

 

 

 

 

1.2 选择模块对应的Host EXE

 

 

Step 2 运行应用,采集信息

 

1.3 CW 主界面,点击执行程序,正常进行操作,CW自动采集EXE执行期间的event。

 

 

Step 3 结束exe, 查看采集的信息

 

3.1 正常退出exe,CW弹出初步结果, 这里可以看到在刚才的运行期间中该DLL发生了3次未预计的操作系统资源泄漏 、1次捕获的内存泄漏

 

 

3.2 这里可以看到3次的资源泄漏其实是-1个window未关闭、1个process handle、1个ThreadHandle未关闭。窗口泄漏的根源发现是在某个单元中创建TTimer未释放,VCL的TTimer其实就是开个窗口接 收WM_TIMER,暂且不表。

 

 

 

3.3 泄漏时的线程栈表明发生在 uExtractor1.pas 181行处,代码片断如下。 此处创建了一个额外的工作exe,如果该工作exe在规定时间内正常退出则会关闭该工作exe的进程、线程句柄;但是如果超时了,会调用另一个公共函数 KillProc 杀掉该exe及其子孙进程,这里范了错误,在杀掉后没有关闭该exe的句柄。

 

 

 

3.4 修改代码即使KillProc 也要关闭 hProcess hThread。 OK! 泄漏问题解决

 

 

总结:

 

1. Dll 的代码一定要谨慎编写,因为申请的系统资源都是隶属于主调exe的,主调exe不退出,中间泄漏的资源操作系统都没办法帮你自动回收;

 

2. CreateProcess后打开的进程句柄一定要释放,即使该程序被另外的地方杀掉了,因为只要一处打开的句柄不关闭,操作系统为该进程维护的内核对象的句柄计数都不会减到0,导致泄漏

 

 

0
0
分享到:
评论

相关推荐

    ndk实现后台服务

    2. 用户体验:后台服务应遵循最佳实践,避免过度消耗系统资源,否则可能导致电池快速耗尽或被系统杀死。 3. 权限要求:根据服务功能,可能需要请求相应的权限,如`INTERNET`、`WAKE_LOCK`等。 4. 安全性:使用NDK时...

    系统后台服务项目详解

    【系统后台服务项目详解】 系统后台服务是操作系统中不可或缺的一部分,它们负责管理和支持系统的各种功能。Windows XP系统中包含了众多的服务,这些服务对于系统的安全性、稳定性、易用性和运行效率有着直接影响。...

    Android-app如何保证后台服务不被杀死

    在Android应用开发中,保证后台服务不被系统自动杀死是一项重要的技术挑战,尤其是在资源有限的移动设备上。本文将深入探讨如何实现这一目标,主要分为提高进程优先级、避免进程被杀死以及进程被杀死后的拉活策略。 ...

    android app 启动后台服务的小demo

    这个“android app 启动后台服务的小demo”显然是一个示例项目,用于演示如何在Android中创建并启动一个服务,特别是在后台播放音乐。 在Android中,服务主要用于以下场景: 1. **后台任务执行**:当需要在后台执行...

    后台服务 之 内存解析

    在探讨“后台服务之内存解析”这一主题时,我们深入剖析了计算机系统中内存管理的核心概念,特别是聚焦于操作系统启动后内存资源的消耗情况。本文将详细解释内存管理的基本原理,以及后台服务如何影响内存使用,同时...

    android 后台服务运行,保持不被干掉

    然而,Android系统为了优化电池寿命和系统资源,可能会在特定条件下停止或杀死后台服务。要让一个后台服务尽可能地保持运行,开发者需要理解Android系统的服务管理机制,并采取一些策略来应对。 首先,了解服务生命...

    人力资源管理后台html模版

    一个美观、易用的人力资源管理后台不仅可以提高工作效率,还能提升员工满意度,促进企业文化的建设。本文将深入探讨如何利用“人力资源管理后台html模版”来构建高效的人力资源管理系统。 一、HTML模版基础 HTML...

    资源泄露检测

    ### 资源泄露检测 #### 一、引言 在软件开发过程中,尤其是使用C/C++进行系统级编程时,资源管理是非常重要的一个环节。不当的资源管理不仅会导致程序性能下降,还可能引发资源泄露等问题,从而影响系统的稳定性和...

    AQTime进行内存泄露和资源泄漏监控.pdf

    AQTime是一款强大的代码分析工具,尤其擅长于内存泄漏和资源泄漏的监控,广泛应用于.NET和JAVA应用程序。它由AutomatedQA公司开发,可与Visual Studio或Embarcadero RAD Studio集成,提供全面的性能和资源调试功能。...

    Android Camera2 后台服务APP

    后台服务长时间运行可能会消耗大量资源,因此优化是必不可少的。这包括合理调度任务,避免无谓的CPU唤醒,以及优化数据处理速度,减少内存占用。 7. **兼容性测试**: Camera2 API虽然在Android 5.0(API Level ...

    护林员管理系统后台服务功能模块设计报告.pdf

    护林员管理系统后台服务功能模块设计报告 护林员管理系统后台服务模块设计报告是关于设计和实现护林员管理系统后台服务功能模块的详细报告。该报告涵盖了模块设计、功能需求、技术架构、数据库设计、接口设计、安全...

    使用后台服务下载文件的例子

    在IT行业中,后台服务下载文件是一项常见的需求,特别是在移动应用或者Web应用中,用户可能希望在后台进行大文件的下载,不影响前台应用的正常使用。本示例将介绍如何实现这样的功能,主要关注Java编程环境下的服务...

    安卓后台服务相关-Android中一键退出应用程序.rar

    本资源“安卓后台服务相关-Android中一键退出应用程序.rar”似乎包含了与实现一键退出应用相关的代码示例,这在某些场景下可能是必要的,比如优化内存占用或者提高用户体验。 首先,我们来深入理解一下Android的...

    Android实现后台服务拍照功能

    "Android实现后台服务拍照功能" Android实现后台服务拍照功能是指在Android...Android实现后台服务拍照功能需要解决预览和拍照的问题,使用AsyncTask或Thread来异步调用拍照方法,并释放Camera资源,避免资源泄露。

    android 后台服务.ppt

    ### Android后台服务详解 #### 一、Service简介 **1.1 Service定义及特点** - **定义**: Service是Android系统中的后台服务组件,主要用于执行长时间运行的任务或操作,如后台音乐播放、数据下载等。 - **特点**:...

    后台服务器开发

    - **内存泄漏定位**:掌握使用`valgrind`等工具进行内存泄漏检测的方法。 - **动态与静态链接**:理解两者差异,动态链接利于资源节省,静态链接则更独立稳定。 - **C/C++特性**:精通宏定义、位操作、指针计算、...

    针对Android资源泄漏的基准测试集的构造与评测.pdf

    【程序分析】资源泄漏的分析通常涉及程序运行时的行为跟踪、内存分配和释放的检查,以及对程序执行路径的深入理解。通过基准测试,可以揭示工具在处理复杂和多样化资源管理场景时的能力。 【研究价值】ResLeakBench...

    Java资源泄露静态分析.pdf

    【Java资源泄露静态分析】 Java编程中的资源泄露是影响软件性能的重要问题,如果处理不当,会导致软件性能大幅度下降。在Java语言中,资源通常是指那些封装了操作系统底层资源的对象,如文件句柄、Socket连接、...

    资源泄露检测工具Bear.exe

    资源泄露是一种常见的问题,尤其是在长期运行的应用程序中,它可能导致系统性能下降甚至崩溃。资源泄露检测工具对于预防和解决这类问题至关重要。本文将深入探讨“Bear.exe”,一个专门用于VC(Visual C++)资源内存...

    如何让一个应用程序一直在后台运行? -

    4. **服务应用程序**:若要创建一个真正的后台服务,需要使用`ServiceController`类和`ServiceBase`类(在`System::ServiceModel::ServiceHost`中)。服务在特定的上下文中启动,并且可以在系统启动时自动运行,不受...

Global site tag (gtag.js) - Google Analytics