小鱼塘

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. c#
  3. 正文

c#程序在用户电脑卡住怎么排查?

2月 18, 2023 82点热度 0人点赞 0条评论
内容纲要

背景

一个用户反馈PC 客户端很卡,开始想可能用户内存不足导致,因为太多用户使用古老的机器,于是我远程排查一下

过程

  1. 查看系统配置
  2. 内存12G,CPU4核,配置也算ok
  3. 通过用户软件挂越久越明显,卡的时候查看内存,软件自身的内存不高。
  4. 退出软件问题就会没有
  5. 软件卡的时候点击界面无响应

看到这里就无从下手,因为挂几天才能出现,只能等用户下次反馈了,于是赶紧百度+google看一下一般这种情况怎么处理。

网上解决办法
通过procdump 生成dump文件,然后通过windbg 分析。
这个我们也可以手动生成dump,在任务管理器中通过对卡进程右键生成dump文件。

file

排查思路

其实这个思路很简单,我们只要在卡的时候生成dump文件,然后看主线程调用堆栈,因为卡住肯定是主线程调用某个函数导致卡住,所以一定义卡住时候生成dump,这里建议procdump因为可以设置命令,设置进程cpu 大于多少,然后卡了几秒来自动生成,这样子方便偶尔出现的卡,对于反复卡断,手动也可以(手动生成dump比较大)。

我的解决办法

  1. 打开vs 工程并对应版本的源代码
  2. 直接拖动dump到vs代码
  3. 点击运行诊断分析
  4. 自动跳到对应代码地方,这里就可以开始你自己分析,为什么会调用这个函数卡住
    1. 死循环
    2. 里面有阻塞IO
    3. 死锁
    4. 通过堆栈看一下对象,得到很多信息分析

总结

这个方法比windbg方便一些,对于我们这种用windbg不多人,方便很多。我只要知道哪个函数有问题。

标签: 卡断 排查
最后更新:2月 18, 2023

小鱼儿

爱研究技术,爱玩LOL

点赞
< 上一篇

COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

湘ICP备18005349号