- 博客(631)
- 收藏
- 关注
原创 Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
Linux 上的调试总觉得少了一位总管太监,能分析非托管内存的工具不鸟dotnet, 同样的,能分析dotnet托管内存的工具也不鸟非托管内存,大家各自为政。。。让习惯使用通杀一切的windbg使用者太不可思议了。
2025-03-07 11:10:36
625
原创 Linux系列:如何调试 malloc 的底层源码
对 Win32 级别的 libc 进行源码调试,有助于我们对书籍中那些malloc的底层理论知识有一个很好的眼见为实,也是给Linux上的.NET高级调试打开了一扇窗!
2025-03-04 14:46:13
312
原创 Linux系列:如何用 C#调用 C方法造成内存泄露
部署在 Linux上的.NET程序同样存在非托管内存泄露的问题,这篇文章的例子虽然很简单,希望能给大家带来一些思考和观测途径吧。
2025-03-03 14:08:13
457
原创 记一次 .NET某数字化协同管理系统 内存暴涨分析
EnableWriteXorExecute特性是在.NET7之后默认将0设为1的,在某些开源linux上会因为各种兼容性问题导致各种奇葩的问题发生,这东西我感觉目前还是能禁掉就禁掉吧。
2025-01-20 13:52:27
1369
原创 聊一聊 操作系统蓝屏 c0000102 的故障分析
操作系统的代码固若金汤,我们常人基本上遇不到代码导致的bug,更多的是第三方配件导致的不给力,解决此类问题大多都是修复,更换。。。
2025-01-19 14:19:13
1098
原创 一个超经典 WinForm,WPF 卡死问题的终极反思
作为一名专业的.NET高级调试师,在这个经典卡死的问题溯源上一直没有提供非常好的解决方案,还是有些内疚的,在我的高级调试之旅中还是会不间断的收到类似dump,相信这篇文章之后,不再有人被它所困扰!
2025-01-13 12:11:46
1007
原创 聊一聊 C#异步 任务延续的三种底层玩法
虽然异步任务延续有三种实现方法,但底层都是一个套路,即借助字段玩出的各种花样,当然他们也是有一些区别的,即对任务是否用单独的线程调度,产生了不同的意见分歧。
2025-01-09 14:56:14
990
原创 为什么 .NET8线程池 容易引发线程饥饿
可以肯定的是减少callback重入队列次数可以尽可能的避免线程饥饿,但怎么说呢?.NET8的线程池综合性能绝对比.NET6要强悍的多,但.NET8中的设计理念可能也不能达到100%的全域领跑,可能在某些1%的场景下还不如 .NET6 的简单粗暴。
2025-01-07 14:42:35
999
原创 聊一聊 C#异步中的Overlapped是如何寻址的
C#的传统做法大多都是采用传参数的方式来建议映射关系,而本篇中用 malloc 开辟一块私有区域来映射两者的关系也真是独一份,实属无奈!
2025-01-06 11:40:43
1041
原创 记一次 .NET某汗液测试机系统 崩溃分析
分析完这个dump之后其实我挺感慨的,人生也如此dump一样,在真相和假象之间不断的交织穿梭,有些人走出来了,有些人永远留在了里面。。。
2024-12-31 11:16:25
624
原创 记一次 .NET某电商医药网站 CPU爆高分析
说实话像这种生产事故,我以前在公司的项目中也会偶发的遇到,都是赶时间,加班加点写出来的代码,只想把功能写出来早点下班,复杂度高?后面再说吧。。。代码写的太好,容易被老板优化。。。
2024-12-30 11:46:52
857
原创 记一次 .NET某工业视觉软件 崩溃分析
在我的dump分析之旅中曾遇到过一次相似的生产故障,本篇文章主要还是对训练营里这位朋友的有求必应吧,不过说实话,多分析几个像这样的dump,会极大的提升你的高级调试能力。
2024-12-27 11:56:15
587
原创 聊一聊 C#线程池 的线程动态注入 (下)
我们聊到了两种提升线程注入的方法,尤其是第二种让人意难平,面对上游洪水猛兽般的对线程池进行DDOS攻击,下游的线程不顾一切,倾家荡产的去承接,这是一种明知不可为而为之的悲壮之举。
2024-12-25 13:33:19
698
原创 聊一聊 C#线程池 的线程动态注入 (中)
采用主动通知的方式唤醒GateThread可以让每秒线程注入数由原来的1~2个提升到4个,虽然有所优化,但面对上游洪水猛兽般的请求,很显然也是杯水车薪,最终还是酿成了线程饥饿的悲剧,下一篇我们继续研究如何让线程注入的快一点,再快一点。。。
2024-12-24 13:32:17
679
原创 聊一聊 C#线程池 的线程动态注入 (上)
可能有些朋友很感慨,线程的动态注入咋怎么慢?1s才1-2个,难怪会出现线程饥饿。。。哈哈,下一篇我们聊一聊Task.Result下的注入优化。
2024-12-23 13:30:50
788
原创 聊一聊 C#前台线程 如何阻塞程序退出
现在我们知道了前后台线程本质上是 coreclr 弄出来的概念,并非系统线程素有之物。还是那句话,知识不重要,重要的是会使用合适的工具和保有的探索心,这也是在训练营里重度强调的。
2024-12-22 13:08:13
722
原创 聊一聊坑人的 C# MySql.Data SDK
挺意外的是 MySql.Data 项目在 github:https://github.com/mysql/mysql-connector-net 上没开 issue 栏。这就无法让社区开发者介入,真的很奇葩,只能在这里给大家做个预警吧。
2024-12-20 12:31:35
570
原创 记一次 .NET某差旅系统 CPU爆高分析
我的学员没有分析出来,我觉得应该是被 Task.Result 给误导了,真实的dump分析可能会真真假假,假假真真,就像这个社会一样,需要更多的实践历练吧。
2024-12-11 11:57:43
1381
原创 记一次 .NET某hdp智能柜系统 卡死分析
这次生产事故,对一般人来说还是有一定的难度,毕竟这种东西不是几个命令就能弄出来的,还是需要考察你对coreclr 一些底层知识的熟悉度。
2024-11-29 09:18:29
867
原创 AOT漫谈专题(第七篇): 聊一聊给C#打造的节点依赖图
基于上下文的依赖推测。未构造类型的推测。还不知道的一些未知…期待后续的 .NET9, .NET10 有更大的提升吧。
2024-10-24 10:42:38
733
原创 AOT漫谈专题(第六篇): C# AOT 的泛型,序列化,反射问题
在将程序发布成AOT的过程中,总会遇到这样或者那样的坑,这篇算是提供点理论基础给后来者吧,同时 Runtime Directives 这种无侵入的实例化方式,很值得关注哈。
2024-10-23 12:59:11
1225
原创 AOT漫谈专题(第五篇): 如何劫持.NET AOT编译器 进行源码级调试
相信大家现在都知道Visual Studio 托管调试器调试 C# 代码它是当仁不让,缺点在于对非托管部分的查看缺少了手段。WinDbg 非托管调试器调试 C/C++ 是一把利器,但用它调试托管的C#代码,虽然可以用,但在变量显示各方面不是很直观。以劫持的方式对 AOT Compiler 自身进行源码级调试,这本身就是一个很有意思的话题,不断的介入Compiler编译的的各个阶段,相信能给大家深度学习AOT提供了一些不寻常的手段。
2024-10-16 16:45:52
853
原创 AOT漫谈专题(第四篇): C#程序如何编译成Native代码
研究这些东西还是比较麻烦的,主要是官方github上对ilc的介绍也比较有限,更多的还是需要研究源码,术业有专攻,作为一个调试师,更多精力还是耗在市场上的dump中吧。
2024-10-15 11:59:10
837
原创 AOT漫谈专题(第三篇): 如何获取C#程序的CPU利用率
总的来说如果你的AOT使用默认的 WindowsThreadPool,那想获取 cpu利用率基本上是无力回天,当然有达人知道的话可以告知下,如果切到默认的.NET线程池还是有的一拼,即使没有 pdb 符号也可以根据_minThreads和_maxThreads的内容反向搜索。
2024-10-14 10:34:32
860
原创 AOT漫谈专题(第二篇): 如何对C# AOT轻量级APM监控
虽然 .NET AOT 越来越成熟,但目前还是不能对 gcheap 进行sos级的分析,暂时只能手工的挖掘整理,不过我相信在 .NET10 或者 11 上应该能够得到完整的支持,毕竟这势不可挡!
2024-10-12 12:52:25
682
原创 记一次升级系统补丁导致 VS2022 崩溃分析
这次Visual Studio 2022 的启动崩溃罪魁祸首居然是 Windows 的补丁包导致的,这也太不靠谱了吧,不过这个案例也告诉我们有时候掌握一点dump分析能力,还是很容易找到问题的突破口。
2024-10-08 11:37:52
1521
原创 聊一聊 C#中有趣的 SourceGenerator生成器
在研究底层方面,windbg可谓是一把趁手的兵器,这个例子也算是活生生的论证了一把,否则真的不知道从 Roslyn 何处来论证官方给出的流程图,对吧。
2024-09-30 17:17:20
1431
原创 记一次 .NET某上位机视觉程序 卡死分析
这次生产事故还是挺有意思的,为什么 WinForm 中可以存在渲染线程,最后还祸在其身,给我几百例dump分析之旅中添加了一笔色彩!
2024-09-14 10:15:35
896
原创 记一次 .NET某实验室自动进样系统 崩溃分析
这次生产事故彻底破坏了两个语言团队之间的相互合作的信任度,信任重建可就难了,不怕神一样的对手,就怕猪猪一样的队友,放在这里还是挺合适的,哈哈,开个小玩笑。
2024-08-27 12:42:38
404
原创 聊一聊 C# 中让人惶恐的 Bitmap
Bitmap使用不当危害巨大,所以一定要谨记尽早释放的原则,如果真的不幸被吃了很多内存,也一定要明白那些未知的大内存段是不是被 Bitmap 所关联,从而尽早的找到真正的祸根。
2024-08-25 16:18:27
1558
原创 GC终结标记 SuspendEE 是怎么回事
挖掘这个标记的前世今生回头看其实还是挺有意思的,coreclr 居然新增了 m_EETlsData 字段来给 sos 做妥协,哈哈,这彰显了 sos 一等公民的地位。
2024-08-21 11:20:05
371
原创 寻访中国100家.NET中大企业 —— 第二站:苏州行
我曾长期在互联网公司上班,没有人会喊工程师为xxx工,在我dump分析之旅中被人喊为xxx工,起初还挺不适应的,但也扛不住多呀,我就继续沿用这样的称谓吧,安工镜头感非常好,侃侃而谈,分享的经验让我受益匪浅,给人一个邻家大哥哥的感觉。正值暑假,出行的同时带着孩子一起去各地见见世面,扩大下孩子的眼界,苏州之行历时4天,逼迫着自己做了三场采访,广结良缘,乐在其中,哈哈,回头想想挺有意思,豁出去便是重生。而言,所以去的第一件事就是拍照,证明我真的来过,哈哈哈 🤣🤣🤣。到了会议室后,必须先来一场采访,人都有一颗。
2024-08-20 11:08:42
334
原创 记一次 .NET某环境监测系统 崩溃分析
这次生产事故挖了点新东西,有点好奇的是现在工控行业也开始用 Avalonia 替代 WPF 了吗?不过现阶段稳定性和 WPF 是没法比的,期待未来更健壮的版本吧。
2024-08-09 09:32:24
472
原创 记一次 .NET某智慧出行系统 CPU爆高分析
这次生产事故分析还是非常有意思的,一个看似阻塞的问题也会引发CPU爆高,超出了一些人的认知吧,对,其实它就是经典的现象,大家有任何dump问题可以找我,一如既往的免费分析。
2024-08-08 10:32:13
1039
原创 如何用 WinDbg 调试Linux上的 .NET程序
最新版本 的WinDbg真的让人很兴奋,可以将自己伪装成 GDB 来和远程的 GDBServer 打通来实现对 Linux 上 .NET程序进行调试,这样就可以继续使用熟悉的WinDbg 命令,在这个版本中我觉得 WinDbg 不再是 WinDbg,而是 XDbg 了,画个简图如下:简图有了,接下来就要付出实践了。本想在 CentOS7 上安装 .NET8,不大好装,这里就用一个现存的 .NETCore 3.1 吧,测试代码如下:代码非常简单,就是1s输出一条记录,接下来编译成x64部署到 Centos
2024-07-22 10:23:58
404
原创 记一次 .NET某上位视觉程序 离奇崩溃分析
在大工控领域里,这是我见过第三例bit位翻转导致的程序崩溃,太无语了,恶魔到底是不是旁边的伺服电机?
2024-07-12 10:23:58
727
原创 记一次 .NET某酒业业务系统 崩溃分析
说实话这个dump分析起来还是挺有难度的,需要你对Windows线程池clr源码实现有一个基础了解,否则很难构造出完整证据链。
2024-07-09 11:42:07
783
1
原创 记一次 .NET某网络边缘计算系统 卡死分析
这个卡死事故还是蛮好解决的,如果有一些经验直接用也是能搞定的,重点在于这是一个 Linux的dump,同时又是 .NET上的一个很好玩的场景,故此分享出来。
2024-07-01 13:10:49
997
原创 聊一聊 C# 弱引用 底层是怎么玩的
WeakReference 的内部玩法有很多,更深入的理解还需要对进行深度挖掘,后面有机会再聊吧,有时候dump分析还是挺苦逼的,需要对相关领域底层知识有一个足够了解,否则谈何修复呢?
2024-06-28 11:44:08
1007
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人