一:背景 1.讲故事 最近接连遇到了几起2G虚拟地址紧张导致的程序崩溃,基本上90%都集中在医疗行业,真的很无语,他们用的都是一些上古的XP,Windows7x86,我也知道技术人很难也基本无法推动硬件系统和设备的升级,这里蕴含了巨大的人情世故。 写这一篇的目的是想系统化的整理一下如何配置3G开关让程序吃到更多的内存,让程序崩溃的不那么频繁一些,以及如何验证是否成功开启! 二:32位操作系统 1.测试代码 首先大家要有一个理念:就是32bit系统上跑的程序,默认只能吃到2G内存,因为这涉及到公平,用户态吃2G,内核态吃2G,为了方便演示,向一个List塞入5000w的string,大概占用2...

一:背景 1.讲故事 在高级调试的旅程中,经常会有一些朋友问我什么是工作集(内存),什么是提交大小,什么是VirtualSize,什么是WorkingSet。。。截图如下: 既然有很多朋友问,这些用口头也不怎么好描述,刚好上午有时间就系统的聊一下吧。 二:内存术语解读 1.VirtualSize是什么 可能有些朋友知道,内存中的虚拟地址被划分成了三类。 Reserved(预定地址) Committed(提交地址) Free(蛮荒地址) 上面的预定+提交就是我们的VirtualSize,即VirtualSize=Reserved+Committed。 当然口说无凭,得要拿出证据,写一个x8...

很多朋友在做dump分析时,常会遇到这个错误,截图如下: 0:000>.loadC:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll 0:000>!t FailedtoloaddataaccessDLL,0x80004005 Verifythat1)youhavearecentbuildofthedebugger(6.2.14ornewer) 1)thefilemscordacwks.dllthatmatchesyourversionofclr.dllis intheversiondirectoryoronthesymbolp...

  ANQWri2eXZ2G   2023年12月12日   31   0   0 目标机目标机bcbcwindowswindows

一:背景 1.讲故事 前几天有位朋友找到我,说他的程序会偶发性的报存储空间不足,无法处理此命令的错误,让我帮忙看下到底怎么回事,哈哈,人家是有备而来,dump都准备好了,话不多说,直接分析开干。 二:WinDbg分析 1.捕获dump中的异常 一般来讲别人说的只是一个参考,我们需要自己到dump中去验证,可以用!t观察下。 0:000:x86>!t ThreadCount:61 UnstartedThread:0 BackgroundThread:52 PendingThread:0 DeadThread:3 HostedRuntime:no Lock IDOSIDThreadOBJS...

在dump分析中,如果你打开的windbg界面是这样的。 Pathvalidationsummary ResponseTime(ms)Location DeferredSRVC:\mysymbolshttp://msdl.microsoft.com/download/symbols Symbolsearchpathis:SRVC:\mysymbolshttp://msdl.microsoft.com/download/symbols Executablesearchpathis: Windows10Version19045MP(12procs)Freex64 Product:WinNt,su...

一:背景 1.讲故事 这些天计划好好研究下tcp/ip,以及socket套接字,毕竟工控中设计到各种交互协议,如果只是模模糊糊的了解,对分析此类dump还是非常不利的,而研究协议最好的入手点就是用抓包工具wireshark,废话不多说,这篇通过wireshark提取一个小图片作为入手。 二:wireshark图片抓包 1.捕获图片 为了方便演示,我们就用最简单的http上传图片的方式,客户端代码如下: <formmethod="post"action="/Home/Upload"enctype="multipart/form-data"> <inputtype="file...

一:背景 1.讲故事 这段时间分析了几个和网络故障有关的.NET程序之后,真的越来越体会到计算机基础课的重要,比如计算机网络课,如果没有对tcpip协议的深刻理解,解决这些问题真的很难,因为你只能在高层做黑盒测试,你无法看到tcp层面的握手和psh通讯。 这篇我们通过两个小例子来理解一下tcp协议在故障分析中的作用。 二:tcp协议的两个小例子 1.程序突然大量超时 这个故事起源于一位朋友遇到的问题: 起初程序跑的一直都是好好的,但会有偶发性突然无法访问,奇怪的是在故障时手工访问域名时又是正常的,后面又莫名奇怪的好了,请问这是怎么回事? 这种问题朋友虽然抓了dump,但在dump中寻找问...

一:背景 1.讲故事 前些天有位朋友找到我,说他程序中的线程数爆高,让我帮忙看下怎么回事,这种线程数爆高的情况找问题相对比较容易,就让朋友丢一个dump给我,看看便知。 二:为什么会爆高 1.查看托管线程 别人说的话不一定是真,得自己拿数据出来说话,可以用!t命令观察一下便知。 0:000>!t ThreadCount:4683 UnstartedThread:0 BackgroundThread:4663 PendingThread:0 DeadThread:19 HostedRuntime:no Lock DBGIDOSIDThreadOBJStateGCModeGCAllocC...

默认用WinDbg进入到本机内核态会报Thedebuggingsessioncouldnotbestarted:FAILUREHR=0x80004001:FailedtoAttachKernel错误。 根据上图提示Localkerneldebuggingisdisabledbydefault.Youmustrun"bcdedit-debugon"andreboottoenableit.,执行如下两步(管理员模式): bcdedit-debugon shutdown/r/t0 重启电脑后即可打开:

  ANQWri2eXZ2G   2023年12月05日   21   0   0 重启内核态bc重启内核态bc

一:背景 1.讲故事 前些天有位朋友找到我,说他程序中的线程数爆高,让我帮忙看下怎么回事,这种线程数爆高的情况找问题相对比较容易,就让朋友丢一个dump给我,看看便知。 二:为什么会爆高 1.查看托管线程 别人说的话不一定是真,得自己拿数据出来说话,可以用!t命令观察一下便知。 0:000>!t ThreadCount:4683 UnstartedThread:0 BackgroundThread:4663 PendingThread:0 DeadThread:19 HostedRuntime:no Lock DBGIDOSIDThreadOBJStateGCModeGCAllocCo...

  ANQWri2eXZ2G   2023年11月30日   25   0   0 bcasyncSystemAsyncbcSystem

一:背景 1.讲故事 这段时间分析了几个和网络故障有关的.NET程序之后,真的越来越体会到计算机基础课的重要,比如计算机网络课,如果没有对tcpip协议的深刻理解,解决这些问题真的很难,因为你只能在高层做黑盒测试,你无法看到tcp层面的握手和psh通讯。 这篇我们通过两个小例子来理解一下tcp协议在故障分析中的作用。 二:tcp协议的两个小例子 1.程序突然大量超时 这个故事起源于一位朋友遇到的问题: 起初程序跑的一直都是好好的,但会有偶发性突然无法访问,奇怪的是在故障时手工访问域名时又是正常的,后面又莫名奇怪的好了,请问这是怎么回事? 这种问题朋友虽然抓了dump,但在dump中寻找问题...

  ANQWri2eXZ2G   2023年11月30日   19   0   0 IPIP无法访问DNSDNS无法访问

一:背景 1.讲故事 前几天有位朋友找到我,说他的窗体程序有卡死现象,让我帮忙看下怎么回事,解决这种问题就需要在卡死的时候抓一个dump下来,拿到dump之后就可以分析了。 二:为什么会卡死 1.观察主线程 窗体程序的卡死,需要观察主线程此时正在做什么,可以用!clrstack命令观察。 0:000:x86>!clrstack OSThreadId:0x4a08(0) ChildSPIPCallSite 012fe7840000002b[HelperMethodFrame_1OBJ:012fe784]System.Threading.WaitHandle.WaitOneNative(S...

  ANQWri2eXZ2G   2023年11月30日   15   0   0 SQLSQLSystemDataSystemData

一:背景 1.讲故事 最近接连遇到了几起2G虚拟地址紧张导致的程序崩溃,基本上90%都集中在医疗行业,真的很无语,他们用的都是一些上古的XP,Windows7x86,我也知道技术人很难也基本无法推动硬件系统和设备的升级,这里蕴含了巨大的人情世故。 写这一篇的目的是想系统化的整理一下如何配置3G开关让程序吃到更多的内存,让程序崩溃的不那么频繁一些,以及如何验证是否成功开启! 二:32位操作系统 1.测试代码 首先大家要有一个理念:就是32bit系统上跑的程序,默认只能吃到2G内存,因为这涉及到公平,用户态吃2G,内核态吃2G,为了方便演示,向一个List塞入5000w的string,大概占用2G...

  ANQWri2eXZ2G   2023年11月30日   18   0   0 ListList3G3Gwindowswindows

一:背景 1.讲故事 这些天计划好好研究下tcp/ip,以及socket套接字,毕竟工控中设计到各种交互协议,如果只是模模糊糊的了解,对分析此类dump还是非常不利的,而研究协议最好的入手点就是用抓包工具wireshark,废话不多说,这篇通过wireshark提取一个小图片作为入手。 二:wireshark图片抓包 1.捕获图片 为了方便演示,我们就用最简单的http上传图片的方式,客户端代码如下: <formmethod="post"action="/Home/Upload"enctype="multipart/form-data"> <inputtype="file"...

一:背景 1.讲故事 前几个月有位朋友找到我,说他们的的web程序没有响应了,而且监控发现线程数特别高,内存也特别大,让我帮忙看一下怎么回事,现在回过头来几经波折,回味价值太浓了。 二:程序到底经历了什么 1.在线程上找原因 这个程序内存高,线程高,无响应,尼玛是一个复合态问题,那怎么入手呢?按经验推测,大概率是由于高线程数引发的,相信大家都知道每个线程都有自己的栈空间,所以众人拾柴火焰高,可以用!address-summary观察下线程栈空间。 0:000>!address-summary --UsageSummary---------------RgnCount---------...

  ANQWri2eXZ2G   2023年11月30日   15   0   0 System线程池System线程池StackStack

一:背景 1.讲故事 前几天有位朋友微信上找到我,说他的程序会偶发性崩溃,一直找不到原因,让我帮忙看一下怎么回事,对于这种崩溃类的程序,最好的办法就是丢dump过来看一下便知,话不多说,上windbg说话。 二:WinDbg分析 1.到底是哪里的崩溃 对于一个崩溃类的dump,寻找崩溃点非常重要,常用的命令就是!analyze-v,输出如下: 0:006>!analyze-v CONTEXT:6fbdee65-(.cxr0x6fbdee65) eax=55d2ebffebx=5e5f04c0ecx=e8c434e8edx=cf8bc35besi=83008b05edi=75880000...

  ANQWri2eXZ2G   2023年11月24日   25   0   0 System句柄d3d3句柄System

一:背景 1.讲故事 在分析旅程中,总会有几例控制台的意外卡死导致的生产事故,有经验的朋友都知道,控制台卡死一般是动了快速编辑窗口的缘故,截图如下: 虽然知道缘由,但一直没有时间探究底层原理,市面上也没有对这块的底层原理介绍,昨天花了点时间简单探究了下,算是记录分享吧。 二:几个疑问解答 1.界面为什么会卡死 相信有很多朋友会有这么一个疑问?控制台程序明明没有messageloop机制,为什么还能响应窗口事件呢? 说实话这是一个好问题,其实Console之所以能响应窗口事件,是因为它开了一个配套的conhost窗口子进程,用它来承接UI事件,为了方便阐述,上一段定时向控制台输出的测试代码。 ...

  ANQWri2eXZ2G   2023年11月24日   19   0   0 5e5e3dServerServer3d

一:背景 1.讲故事 上一篇我们聊到了Console为什么会卡死,读过那篇文章的朋友相信对conhost.exe有了一个大概的了解,这一篇更进一步聊一聊窗口的特殊事件Ctrl+C底层流转到底是什么样的,为了方便讲述,让chagtgpt给我生成一段Ctrl+C的业务代码。 classProgram { staticvoidMain(string[]args) { Console.CancelKeyPress+=newConsoleCancelEventHandler(CancelKeyPressHandler); Console.WriteLine("按下Ctrl+C试试看!"); whi...

  ANQWri2eXZ2G   2023年11月24日   17   0   0 SystemSystemd3d3bcbc

一:背景 1.讲故事 中秋国庆长假结束,哈哈,在老家拍了很多的短视频,有兴趣的可以上B站观看:https://space.bilibili.com/409524162,今天继续给大家分享各种奇奇怪怪的.NET生产事故,希望能帮助大家在未来的编程之路上少踩坑。 话不多说,这篇看一个.NET程序集泄露导致的CLR私有堆泄露的案例,这个泄露和JsonConvert有关,哈哈,相信你肯定比较惊讶! 二:WinDbg分析 1.到底是哪里的泄露 首先观察一下进程的提交内存的大小,即通过!address-summary观察。 0:000>!address-summary --UsageSummary...

  ANQWri2eXZ2G   2023年11月19日   18   0   0 3d程序集程序集非托管3d非托管

一:背景 1.讲故事 我发现有很多的.NET程序员写了很多年的代码都没弄清楚什么是虚拟地址,更不用谈什么是物理地址以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的联系。 二:地址映射研究 1.找虚拟地址 怎么去找虚拟地址呢?相信很多朋友都知道应用程序用的是虚拟地址,所以从应用程序中取一个就好了,这里就拿notepad举例子吧。 开启一个装有win10的虚拟机,然后打开notepad.exe,使用windbg进行它的内核态调式,参考代码如下: 0:kd>!process00notepad.exe PROCESSffffe0011f9c9840 SessionId...

  ANQWri2eXZ2G   2023年11月05日   22   0   0 d33c虚拟地址3cd3虚拟地址
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~