常见问题_站点出现严重的句柄泄漏问题

1.       句柄泄漏问题


1.1问题描述


现网正在运行的IIS虚拟目录存在严重的句柄泄漏问题,一般一周句柄会增长到1万多

1.2修复方法

(1)将.NET版本由4.0切换为2.0,并优化代码中所有非托管类型的处理

(2)将代码中的日志记录由NLog修改为Log4net

1.3问题原因

原因1:使用NLog第三方dll方式记录日志时导致FILE类型的句柄泄露。

原因2:.NET FrameWork 4.0中clr.dll存在大量线程未释放句柄,以及存在泛型导致资源未释放的问题

1.4问题分析


1.4.1现象分析

1)现网只有一个访问量非常少的站点句柄泄漏

2)现网有两种操作系统的服务器,server 2008没有句柄泄漏问题,Server
2003有句柄泄漏问题,且2003的3台服务器中,1台服务器出现泄漏的概率比较高,另外2台出现泄漏的概率比较低

推测:可能是操作系统引起的问题,可能是服务器其他软件引起的问题!但是部署在该服务器上还有其他站点,不存在句柄泄漏,可能是代码问题。

验证环境问题:确认现网ASP的小版本号是否一致,因为ASP的小版本号过低引起句柄泄漏的案例存在,确认现网小版本号是完全一致的,排除(C:\WINDOWS\Microsoft.NET\Framework)

1.4.2代码问题排查

1) 邀请外部评审进行代码走查,删除冗余代码

2) 分析现网IIS日志,删除冗余代码,确认代码中可能存在的死循环或者其他问题

3)
在测试环境进行压力测试,重新问题,并同时使用DebugDiag工具监控的dump日志,日志显示使用NLog第三方dll方式记录日志时导致FILE类型的句柄泄露、.NET
FrameWork 4.0中clr.dll存在大量线程未释放句柄,以及存在泛型导致资源未释放的问题。

4)修改上述问题后重新在测试环境进行压力测试,第一阶段使用100路进行压力测试,第二阶段使用50路进行压力测试,第三阶段停止压力

数据显示随着压力减少句柄在逐渐释放

5)部署现网观察,句柄泄漏问题消失(在问题排查期间通过重启应用连接池的临时方案解决句柄数增加的问题)

常见问题_站点出现严重的句柄泄漏问题,布布扣,bubuko.com

时间: 2025-01-03 22:50:04

常见问题_站点出现严重的句柄泄漏问题的相关文章

内核对象&句柄&泄漏&检测

今天看到这个问题如何评价王垠的 <讨厌的 C# IDisposable 接口>? - 王垠(人物),答案被歪到windows 内核对象和句柄,答案中谈的太浅显而且有误.翻出陈年老文章(此文成于2012年,只在公司内部分享过),大部分内容来自Windows内核原理 1句柄和句柄泄露 在Windows编程过程中,很多时候我们都要和句柄打交道,比如窗体句柄,内核对象句柄,GDI句柄,Windows Multimedia库中的多种句柄等等,以及其他更多未曾使用过的句柄类型.句柄(Handle)是Win

机器学习中常见问题_几种梯度下降法

一.梯度下降法 在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便寻找到最优的参数.在求解机器学习参数的优化算法中,使用较多的是基于梯度下降的优化算法(Gradient Descent, GD). 梯度下降法有很多优点,其中,在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,这使得梯度下降法能在很多大规模数据集上得到应用.梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点. 基本思想可以这样理解:我们从山

实战之授权站点漏洞挖掘-git信息泄漏

1.危害 攻击者可以利用该漏洞下载git文件夹里的所有内容.如果文件夹内有敏感信息比如站点源码.数据库账户密码等,攻击者可能直接控制服务器. 2.利用 使用工具GitHack GitHack.py http://www.openssl.org/.git/ 3.防御 及时删除.git文件夹 发布页面时不要上传.git文件夹. 原文地址:https://www.cnblogs.com/-lyr/p/12118441.html

捉虫记2:windows程序句柄泄露的上下文环境

作为程序员,开发程序是基本功,而调试程序也是必不可少的技能之一.软件在主体功能开发完成后会经历各个阶段的测试,才会被发布.在测试过程中,出现较多的可能就是内存泄漏,句柄泄漏,异常崩溃等属于非功能型的软件Bug.而Windows作为一个相当成熟的平台,对于软件的调试也支持很到位.今天想要记录的是这次调查的一个模块的句柄泄漏问题. 关于句柄泄漏的文章网上很多,很多关于调试的书籍中也有说明,而且有些也比较详细.之前也解决过这类的问题,所以毫不在意.先介绍一下基本情况:工作机是Windows 7 64b

教程2:如何找到内存泄漏dotmemory

在本教程中,我们将看到如何使用dotmemory定位和固定在你的应用程序的内存泄漏.但在开始之前,让我们在一个内存泄漏是一致的. 内存泄漏是什么? 根据维基百科,内存泄漏是由于不正确的内存管理时,”一个对象是存储在内存中,但不能被运行代码访问.”此外,“内存泄漏加起来的时间,如果他们不清理,系统最终耗尽内存.” 实际上,如果我们将严格按照上述定义,“经典”的内存泄漏是不可能的网络应用程序.垃圾收集器(GC)完全控制内存释放并删除所有的对象不能被访问的代码.此外,在应用程序关闭时,GC完全释放由应

易语言超文本浏览框取真实句柄(可消息句柄)

很多朋友想做网页 鼠标键盘后台消息的软件,但是苦于找不到超文本浏览狂的真实句柄. 如果你用  超文本浏览框.取窗口句柄()  那么你取到的是图1的句柄,这个句柄是无法操作的 图中2的句柄才是真正可以发送消息和模拟操作的句柄,也是用窗口助手真正查到的句柄 具体操作看下图. 用的是精易模块的窗口枚举所有子窗口命令 然后匹配出类名为"Internet Explorer_Server"的那个句柄就是真实句柄了. 方案二,一个最最简单的方法就是直接调用精易模块 窗口_取IE浏览框句柄() 原文地

Atitit.http httpclient实践java c# .net php attilax总结

1. Navtree>> net .http1 2. Httpclient理论1 2.1. 自动url转向的控制1 3. Java里面的httpclient1 4. C# .net的httpclient2 4.1.1. .NET 4.5(C#):2 4.2. 对COOKIE和SEIION支持区别3 4.3. 用户对是否自动url转向的控制3 4.4. 对用户代理服务器的支持3 5. Php的httpclient3 6. Node.js4 7. solu解决问题::4 8. ref参考资料4 8

go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 文件操作 func Open(name string) (file *File, err error),*File 是实现了 io.Reader这个接口byte[] 转化为 bytes.Buffer:bytes.NewBuffer([]byte). 一.建立与打开 建立文件函数:func Create(name string) (file *File, err Error)func N

golang编程之文件操作

操作文件是任何编程语言都绕不过,要掌握一门语言,知道如何操作文件是必不可少的,今天学习了下golang对文件操作的支持.    golang对文件的支持是在os package里.我无意将本文写成官方文档的模样,我只是想讨论如何利用这些接口操作文件.    OPEN     熟悉文件系统的人都知道,open是整个文件系统中最复杂的接口之一.熟悉C语言的都知道,C语言中有open和creat,接口如下: view sourceprint? 1.#include <sys/types.h> 2.#