最近,碰到了一个线上CPU服务器很高的问题,并且也相当紧急,接到这个任务后,我便想到C#性能分析利器,Windbg。

  终于在折腾半天之后,找出了问题,成功解决,这里就和大家分享一下碰到的问题。

  问题1:安装Windbg,是否还需要符合文件?

  答:我看到网上很多教程,都说需要装符号文件,才能调试,我便以为也是,但是一去查,发现符号文件,要不就说不维护了,也下载不过来,最后想到可能是网络的问题,最后通过FQ解决。更加坑的是,安装好符号文件后,还有各种报错,后面索性就不搞符号文件了,就直接来分析dump(Windows转储文件),没想到一式竟然成功了。于是得出结论:windows 10 应该是不需要符号文件了的(我只有win10,并且下载是最新的Windbg,亲测可用)。

  问题2:当时创建完转储文件之后(dump),便开始分析,在使用的命令的时候,进行各种报错,各种解决,也没有解决。最后面发现是下面这个问题。

  答:对于我们有些程序,任务管理器上,进程名称(32),会带有32位的字眼的话,一般情况下是需要用32位的任务管理器的打开的,因为当时没有服务器的权限,别人给我的dump文件是64位的,所以我各种加载,各种报错。后面采用了32位的任务管理器来备份dump,就顺利很多了。

  32位的任务管理器打开路径:C:\WINDOWS\system32\taskmgr.exe。

  当然上面说法也不绝对,因为这个主要是依赖于你的编译器是多少位的,如果你64位编译出来的程序,可能有进程名称那有32位,你也需要用64的任务管理器打开,备份dump才行。

  如果有朋友使用Windbg碰到问题,可以在博客留言,或者加Q:1040350718。

  下面我演示一下,我使用Windbg的分析过程。

  • !runaway  查看当前托管线程已执行时间

    • 找出耗时最大的线程
    •   可以看到是16f4这个线程,耗时最长。
  • 切换到指定的线程    ~~[16f4]s
    • 切换到指定的线程。
  • 查看当前线程的调用堆栈  !clrstack
    • 使用这个命令的时候,可能会有提示说,模块没有加载。
    • 32位:  .load C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
    • 64位:  .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll
    • 用上面的命令加载把sos.dll加载进Windbg中(这是.Net Framework安装目录),即可使用。
  • 在我查看线程的堆栈信息之后,根据自己对系统熟悉,能定位到具体代码了。
  • 当然你也可以通过反编译的方式来定位具体的代码
  • !dumpdomain
  • !savemodule 00007ffb3a4b4128 d:\2\1.dll     导出dll之后,再通过Ilspy来定位代码。  

  

服务器CPU很高-怎么办(Windbg使用坑点)的更多相关文章

  1. 服务器CPU很高,频繁FullGC排查小总结

    可以分为如下步骤: ①通过 top 命令查看 CPU 情况,如果 CPU 比较高,则通过 top -Hp 命令查看当前进程的各个线程运行情况. 找出 CPU 过高的线程之后,将其线程 id 转换为十六 ...

  2. Linux排查Java程序占用CPU很高的解决办法

    Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意 ...

  3. 实际遭遇GC回收造成的Web服务器CPU跑高

    今天下午有段时间访问园子感觉不如以前那么快的流畅,上Web服务器一看,果然,负载均衡中的1台云服务器CPU跑高. 上图中红色曲线表示的是CPU占用率.正常情况下,CPU占用率一般在40%以下. 这台云 ...

  4. 如何优雅排查现网服务器cpu飙高的问题

    1.排查现网服务器cpu飙高问题的思路 1.查看java进程id ps -ef|grep java 2.使用top -Hp 进程id 查看cpu比较高的线程 3.执行jstack 进程id > ...

  5. 服务器CPU使用率高的原因分析与解决办法

    我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...

  6. 服务器cpu过高修复:操作系统内核bug导致

    服务器cpu过高修复:操作系统内核bug导致修改系统内核参数/etc/sysctl.conf添加下面2条参数:vm.dirty_background_ratio=5vm.dirty_ratio=10

  7. 线上服务器CPU彪高的调试方式

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/2fee7b91-f ...

  8. 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...

  9. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

随机推荐

  1. 第02讲:Flink 入门程序 WordCount 和 SQL 实现

    我们右键运行时相当于在本地启动了一个单机版本.生产中都是集群环境,并且是高可用的,生产上提交任务需要用到flink run 命令,指定必要的参数. 本课时我们主要介绍 Flink 的入门程序以及 SQ ...

  2. 使用Hot Chocolate和.NET 6构建GraphQL应用(3) —— 实现Query基础功能

    系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在本文中,我们通过一个简单的例子来看一下如何实现一个最简单的GraphQL的接口. 实现 引入Hot Cho ...

  3. python网络爬虫-python基础(三)

    python安装 Anaconda的python科学计算环境,只需要想普通软件一样安装就可以把python的环境变量.解释器.开发环境都安装到计算机中 除此之外anaconda还提供众多的科学计算的包 ...

  4. vue 快速入门 系列 —— Vue 实例的初始化过程

    其他章节请看: vue 快速入门 系列 Vue 实例的初始化过程 书接上文,每次调用 new Vue() 都会执行 Vue.prototype._init() 方法.倘若你看过 jQuery 的源码, ...

  5. mysql 相关练习题

    /* 自己查询自己 把一张表看成是两张表. 表的设计. SELECT * FROM depart; SELECT d1. NAME '部门', d2. NAME '分部门' FROM depart d ...

  6. IO多路复用原理&场景

    目录 IO多路复用的历史 阻塞 IO 非阻塞 IO IO 多路复用 select poll epoll IO多路复用高效的原因 IO多路复用解决的什么问题 epoll比selector性能一定更好吗 ...

  7. MySql数据存储格式Compact及计算MySql的B+Tree高度

    1.MySql的compact行记录格式 MySql从版本5.1以后默认使用的是compact行记录格式.可以通过执行以下命令查询到Row_format知悉InnoDB行记录格式类型. show ta ...

  8. JVM垃圾收集器(八)

    一.垃圾收集器 有了前面JVM参数的了解下面来看下JVM的垃圾收集器:如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.  JVM(HotSpot)有7种垃圾收集器,7种垃圾收集 ...

  9. SpringBoot使用IDEA设置的外部Tomcat启动

    前言 使用springboot内嵌的tomcat启动是没问题,但是工程是要放到服务器上的tomcat的,所以springboot内嵌的能够启动,但不代表服务器的tomcat能启动起来,我就遇到了这个问 ...

  10. array_intersect_key 取得需要字段 用法

    $need_key = [ 'hash' => 0 ];        $parma = array_intersect_key( $parmas, $need_key );