当前位置: 首页 > news >正文

SOCKET句柄泄露带来的内存灾难

前些时候游戏莫名其妙出现大量内存泄露,我感到很诧异,当然一般情况下游戏的内存管理是极其严苛的,出现如此大量的内存泄露到底是怎么回事?

句柄滥用导致的内存泄露会多夸张呢,尤其SOCKET,在某些客户端系统下,短短5个小时可以吃掉5GB以上内存,有甚者达到6GB,并且进程内存查看非常完好,并无激增,那内存去哪了?看看我们的排错过程。

1|0排错过程:

1、首先我们第一反应还是内存泄露,但是观察进程发现占用非常合理,并没有丝毫的激增情况,甚至运行周期后还会出现下降的情况,此类情况用资源管理器和性能管理器可以进行排错,从而进一步确定不是游戏本身所申请的内存泄露。

这里包含 MALLOC,NEW等方式。

为了安全期间,采用VLD进行内存泄露排错,预计结果和我猜测的一样,并无激增或泄露。

此处步骤必须,用于排除激增或可能存在激增的内存问题,在LINUX下有其他库请自己查找,至于此地由于是客户端泄露,采用的VLD库用于内存泄露排错。

2、其次我们发现是系统在申请并归属于该进程的一块内存区域,就像共享内存一样,此时已经初步认定为句柄未释放导致的内存泄露,那么如何定位?

首先要让内存产生泄露,然后请出PCHunter,启动后找到游戏目标进程,右键查看进程句柄。

此时可以看到句柄数已经非常异常,数量高达1182个之多,有些进程甚至过万,这是明显的异常,除非一般的服务端进程,通常情况下句柄数不会达到如此之数。

然后要定位是什么句柄导致的系统内存激增,通过数量分析发现有一项神奇过多:

File \Device\Afd 0x00000B38 0xFFFFE0005183E070 30 32758

此处的 \Device\Afd  为关键,该类型代表为SOCKET句柄,此处已经彻底定位到原因,是SOCKET创建句柄但未释放导致的异常。

3、以上方法已经定位到基本错误,确定是SOCKET,但是怎么知道是哪里呢,这就要监控所有SOCKET创建的地方,我这里是因为使用了第一个第三方的PING库,而这个库代码只创建SOCKET不关闭SOCKET。

所以产生以上问题,简单解决只要关闭不使用SOCKET即可解决,重点在于定位是异常难的,所以特写此文。

转自:SOCKET句柄泄露带来的内存灾难 - koangel - 博客园

相关文章:

  • 浪潮服务器安装Windows Server 2008 R2蓝屏
  • Linux服务器安装Windows虚拟机
  • AD域的详细介绍
  • 网络连接的三种模式:桥接模式,NAT模式,仅主机模式
  • 蓝牙怎么区分单模和双模_双十二无线外设怎么选,手把手教你选购无线外设圆梦无线桌面...
  • 学习5g通信心得体会_从IoT到5G I-IoT:下一代基于IoT的智能算法和5G技术
  • c++大作业迷宫游戏 规定时间内完成_小学生做作业磨蹭的7个原因及对策(老师转给家长)...
  • pyqt联动多层级下拉框_pyqt5-下拉框联动效果
  • python人工智能 动漫生成_使用Python来看看动漫中的你
  • 形容等待时间长的句子_形容“等待时间长”的成语有哪些?
  • ueditor统计字数中文_百度UEditor修改右下角统计字数包含html样式
  • gan怎么输入一维数据_GAN生成图像综述
  • c语言switch流程图_零基础学C语言——预编译
  • ibatis spring框架升级到5.x_Java SSM 框架面试,附答案!!!
  • 弹性理论法研究桩基受力计算公式_浅谈桩基础沉降计算方法
  • “大数据应用场景”之隔壁老王(连载四)
  • Git 使用集
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Js基础知识(四) - js运行原理与机制
  • k8s如何管理Pod
  • Linux快速复制或删除大量小文件
  • PAT A1017 优先队列
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • text-decoration与color属性
  • webpack+react项目初体验——记录我的webpack环境配置
  • 百度地图API标注+时间轴组件
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 猴子数据域名防封接口降低小说被封的风险
  • 计算机常识 - 收藏集 - 掘金
  • 将回调地狱按在地上摩擦的Promise
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 免费小说阅读小程序
  • 前端性能优化--懒加载和预加载
  • 入门到放弃node系列之Hello Word篇
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 小试R空间处理新库sf
  • 一、python与pycharm的安装
  • 最简单的无缝轮播
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 我们雇佣了一只大猴子...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​学习一下,什么是预包装食品?​
  • #数学建模# 线性规划问题的Matlab求解
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (数据结构)顺序表的定义
  • (算法设计与分析)第一章算法概述-习题
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)mysql使用Navicat 导出和导入数据库
  • .NET gRPC 和RESTful简单对比
  • .net mvc actionresult 返回字符串_.NET架构师知识普及