• winBdb 调试CPU100%


    https://www.cnblogs.com/wang-xiaohui/p/5521375.html

    路径 :C:MyLocalSymbols;SRV*C:MyLocalSymbols*http://msdl.microsoft.com/download/symbols

    加载sos:  .load C:WindowsMicrosoft.NETFramework64v4.0.30319SOS.dll

    procdump 抓取命令: procdump64.exe -ma -c 30 -s 3 -n 2 -e 1 -f "" 5960

                     参数说明:  -c CPU 百分比    -s  超过3秒  -n  截取两次    5960  PID

    人个观点:分析线上问题的第一步,是先从监控软件中(比如zabbix,性能计数器)和系统日志获取信息。观察CPU使用率,CPU LOAD,内存,网络连接数,线程数,响应时间等各种性能指数。

    线上的各种性能指数的变化,都有其内在的联系。比如,内存上涨过快同时也会导致CPU 升高。CPU升高,导致服务器性能下降,响应时间慢,网络连接数上升。

    通过观察各种指标,然后再定位具体问题。明确了问题方向后,再通过Windbg 分析Dump验证和查找问题的根源。

    常用命令

    命令很多,把从网上了解到的和用过的一些命令做一次整理,MSDN 对SOS调试命令的说明: http://msdn.microsoft.com/zh-cn/library/bb190764.aspx

    基础命令:
    .load Psscor4/amd64/amd64/psscor4.dll 加载psscor4
    .load SOS/SOS.dll 
    .sympath 设置符号路径
    .cls 清屏 
    version 查看版本信息
    lm 列出加载模块
    !help 显示命令帮助
    !help EEHeap 显示EEHeap命令帮助
    !EEVersion 显示公共语言运行时版本

    内存状态:

    !EEHeap -GC 显示托管堆统计信息
    !EEHeap -loader 显示加载程序数据结构统计信息
    !DumpHeap -stat 显示垃托管堆各类型统计信息
    !DumpHeap -type Free -stat 显示所有碎片类型统计信息
    !DumpHeap -type System.String -min 150 -max 200 显示所有System.String类型 -min -max 字节统计信息
    !DumpHeap -min 85000 -stat 显示大对象统计信息
    !DumpHeap -mt 选项仅列出与指定的 MethodTable 结构对应的那些对象
    !DumpHeap -mt 00000000022245b0 -min 85000 查看MT 00000000022245b0中大对象
    !DumpHeap -stat 023e1000 033db630 按地址统计
    !DumpArray 显示数组对象
    !DumpObj (!do) 显示有关指定地址处的对象的信息
    !ObjSize 显示指定对象的大小
    !DumpStackObjects (!dso) 显示在当前线程内找到的所有托管对象
    !GCRoot 显示有关对指定地址处的对象的引用(或根)的信息。
    !CLRUsage 显示托管堆统计信息(GC堆大小,提交内存,虚拟内存),psscor4的扩展命令
    !DumpMT 显示有关指定地址处的方法表的信息。
    !DumpMT -MD 显示有关指定地址处的方法表所有方法的列表。
    !address -summary 显示最大可用区域
    !vmstat 最大可用区域是 MAXIMUM 列中的最大值

    线程调用:

    !ThreadPool 显示有关托管线程池的信息,包括队列中工作请求的数目、完成端口线程的数目和计时器的数目
    !Threads 显示进程中的所有托管线程
    !Threads -live 选项显示与活动线程关联的线程
    !Threads -pecial 选项显示由 CLR 创建的所有特殊线程
    !ThreadState 显示线程的状态。 value 参数为 Threads 报告输出中的 State 字段的值。
    ~54s 转到54线程
    !CLRStack 提供当前托管代码的堆栈跟踪。
    !CLRStack -p 选项显示托管函数的参数。
    !CLRStack -l 选项显示有关帧中的局部变量的信息。
    !DumpStack 显示堆栈跟踪 包括非托管。 
    !DumpStack -EE 命令仅显示托管函数。
    !EEStack 对一个进程中的所有线程运行 DumpStack 命令。
    k 显示当前线程的call stack
    kb 显示当前线程的call stack
    ~*kb 显示所有线程的call stack 可以 寻找线程中触发GC的函数(mscorwks!SVR::GCHeap::GarbageCollectGeneration)
    !ASPXPages 显示当前处理的HttpContext,psscor4的扩展命令
    !SyncBlk 显示同步块

    其它:
    !runaway 显示线程cpu时间
    vertarget 查看系统运行时间
    !PrintException (!pe) 显示在当前线程上引发的最后一个异常
    !address 命令显示某一地址上的页信息
    !SaveModule 将加载到内存中指定地址的图像写入指定文件,lm 列出的
    !SaveModule 081f0000 d:\commandobject.dll 
    !FinalizeQueue 显示所有已进行终结注册的对象。
    !GCHandles 显示有关进程中的垃圾回收器句柄的统计信息。

    S 可以搜索内存 在内存中搜索sina.com: s –u 0012ff40 L?8000000 “sina.com”
    r 显示寄存器的信息
    d 显示内存地址上的值 使用d命令显示esp寄存器指向的内存,默认为byte: d esp
    用dd命令直接指定054efc14地址,第二个d表示用DWORD格式: dd 054efc14

    域,程序集,类
    !DumpDomain 枚举在指定的 AppDomain 对象地址内加载的每个 Assembly 对象。若在调用 DumpDomain 命令时不提供任何参数,则将列出过程中的所有 AppDomain 对象
    !DumpAssembly 显示有关程序集的信息。DumpAssembly 命令将列出多个模块(如果存在)。
    !DumpModule  显示有关指定地址处的模块的信息。 可以使用 DumpDomain 或 DumpAssembly 命令检索模块的地址
    !DumpModule [-mt] 选项显示模块中定义的类型和模块所引用的类型
    !FindAppDomain 确定指定地址处的对象的应用程序域

    !IP2MD <Code address> 显示已 JIT 编译的代码中指定地址处的 MethodDesc 结构。
    !DumpMD <MethodDesc address>
    !U <MethodDesc address> | <Code address> 显示由方法的 MethodDesc 结构指针或方法体内的代码地址指定的托管方法的反汇编(带有批注)

  • 相关阅读:
    Oracle FGA审计记录的清理步骤
    UVa11488-Hyper Prefix Sets(trie树)
    配置Log4j(非常具体)
    poj1190生日蛋糕
    zju1610Count the Colors
    【例9.3】求最长不下降序列
    P1364 医院设置
    P1629 邮递员送信
    P1476 休息中的小呆
    P1330 封锁阳光大学
  • 原文地址:https://www.cnblogs.com/niceletter/p/11307447.html
Copyright © 2020-2023  润新知