最近,碰到了一个线上CPU服务器很高的问题,并且也相当紧急,接到这个任务后,我便想到C#性能分析利器,Windbg. 终于在折腾半天之后,找出了问题,成功解决,这里就和大家分享一下碰到的问题. 问题1:安装Windbg,是否还需要符合文件? 答:我看到网上很多教程,都说需要装符号文件,才能调试,我便以为也是,但是一去查,发现符号文件,要不就说不维护了,也下载不过来,最后想到可能是网络的问题,最后通过FQ解决.更加坑的是,安装好符号文件后,还有各种报错,后面索性就不搞符号文件了,就直接来分析dum…
可以分为如下步骤: ①通过 top 命令查看 CPU 情况,如果 CPU 比较高,则通过 top -Hp 命令查看当前进程的各个线程运行情况. 找出 CPU 过高的线程之后,将其线程 id 转换为十六进制的表现形式(printf "%x" ),然后在 jstack 日志中查看该线程主要在进行的工作(jstack -F -l > /tmp/jstack.log). 这里又分为两种情况: 1: 如果是正常的用户线程,则通过该线程的堆栈信息查看其具体是在哪处用户代码处运行比较消耗 CP…
Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意设置了一个CPU占用很高的场景: 排查问题,步骤: 1. ps -mp [替换为进程ID PID] -o THREAD,tid,time 发现线程6322.6323占用CPU很高,时间也很长. 2. printf “%x” [线程ID TID] 把TID转换为16进制. 3. jstack [进程I…
今天下午有段时间访问园子感觉不如以前那么快的流畅,上Web服务器一看,果然,负载均衡中的1台云服务器CPU跑高. 上图中红色曲线表示的是CPU占用率.正常情况下,CPU占用率一般在40%以下. 这台云服务器是2台主力Web服务器(承担了80%以上的访问量)中的1台,8核CPU/8G内存,用的是阿里云的临时磁盘云服务器,之前一直表现出色,今天怎么突然CPU跑高呢?难道临时磁盘云服务器的CPU也有问题?向阿里云提交工单,得到的反馈是云服务器所在的物理机表现良好. 为了尽快解决问题,我们在负载均衡中新…
1.排查现网服务器cpu飙高问题的思路 1.查看java进程id ps -ef|grep java 2.使用top -Hp 进程id 查看cpu比较高的线程 3.执行jstack 进程id > threadStack进程id.log 命令 4.使用printf %x  线程的PID 命令,将线程的将线程的PID转为十六进制 5.在jstack导出的文件中查找第4步得到的十六进制线程pid 可以用vim的查找功能/0x1234,或是grep 0x1234 -A 20 根据线程堆栈跟踪代码,解决问题…
我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件,系统进程,应用软件和病毒木马四个方面来介绍CPU资源使用率为什么会达到那么高,以帮助大家排除服务器CPU使用率高的种种疑惑. 一.硬件因素 以下分别从CPU温度,CPU超线程,硬件配置,硬件驱动和待机方面分析. 情况1. CPU温度过高如果CPU风扇散热不好,会导致CPU温度太高(CPU温度多少正…
服务器cpu过高修复:操作系统内核bug导致修改系统内核参数/etc/sysctl.conf添加下面2条参数:vm.dirty_background_ratio=5vm.dirty_ratio=10…
原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/2fee7b91-fc6e-4e96-838a-b6926b422368 线上服务器CPU彪高的调试方式 1. 使用TOP获取对应的CPU彪高的进程ID 2. top -p 8948 -H 查看8948进程所对应的所有线程,查看引起CPU彪高的线程PID,此处为9037 3. jstack 8948 >/home/xi…
这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场景模拟 当我们真碰到这个问题的时候应该怎么排查呢? 先用一段程序创建几个线程,将其中一个线程设置成高 CPU 使用率的. public static void main(String[] args) { for (int i = 0; i < 10; i++) { Thread thread = n…
我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线程分别占用的cpu呢 所以在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了 最后的解决方法: 1.找到java进程对应的pid. 找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾…