针对腾讯云 CVM CPU 使用率长期 100% 的问题,排查核心在于定位高占用进程及线程。首先登录服务器使用 top 命令按 CPU 排序找到占用最高的进程 PID。接着使用 top -Hp 进程号查看该进程下具体线程的 CPU 占用情况,找出占用最高的线程 ID。将线程 ID 转换为十六进制,最后通过 jstack 命令导出进程堆栈信息,搜索该十六进制线程 ID 定位到具体代码行。常见原因包括死循环、频繁 GC、死锁或未优化的数据库查询,需根据堆栈日志进行针对性优化或重启服务。
如何排查 CPU 占用 100%
如何排查 CPU 占用 100% 线上后台报警 CPU 占用 100%,CPU 占用过高,本文介绍一下如何排查 CPU 占用过高原因。步骤 1. top 输入 top 命令,找到占用 CPU 最高的进程。按 Shift+P 键排序:可以看到 CPU 占用最高的 pid 是 92129。步骤 2. top -Hp pid 查看指定进程内线程信息,其中 pid 是第一步的 pid。代码语言:javascript AI 代码解释 top-Hp92129 找到占用最高的线程 pid 为 92156,然后转成十六进制,使用公式转换:代码语言:javascript AI 代码解释 printf'%x'92156 输出结果是:167fc 步骤 3. jstack 命令 使用 jstack 命令分析进程状态,为了方便查询,将分析结果输入到一个文件中,jstack pid > x.txt 其中 pid 是步骤 1 的进程号。代码语言:javascript AI 代码解释 jstack92129>x.txt 打开 x.txt 文件,在文件中查询步骤 2 转换的十六进制数:找到非 Jdk 代码,也是自己写的代码,就能找到问题的根源了。
服务器 CPU 占用 100% 问题排查全流程:从现象到根治的深度实践
一、现象描述:CPU 过载的"症状"与"病因" 当服务器出现 CPU 使用率持续 100% 时,表面现象是系统响应迟缓、服务超时增加,但背后可能隐藏着多种致命病因:服务器 CPU 占用 100% 问题排查全流程 急性症状:死循环代码、内存泄漏引发的频繁 GC、正则表达式回溯炸弹 慢性病变:不合理线程池配置、未优化的数据库查询、第三方 API 调用超时堆积 外部感染:DDoS 攻击流量、加密货币挖矿木马、爬虫滥用 典型场景还原:某电商系统在促销期间突发 CPU 告警,通过 top 命令发现 Java 进程 PID12345 占用 980%CPU(逻辑核心数*100%)。进一步观察 loadaverage 高达 60,远超物理核心数 16,表明系统已处于严重过载状态。二、诊断步骤:快速定位问题根源 1.使用 top/htop 定位异常进程 运行 top 命令,观察:CPU 占用最高的进程 (按 Shift+P 按 CPU 排序)。进程状态:D(不可中断睡眠,可能是 IO 阻塞)、R(运行中)、Z(僵尸进程)。用户态 vs 内核态:%us 高可能是应用代码问题,%sy 高可能是系统调用频繁。
线上 CPU 飙升 100% 问题排查,一篇足矣
对于互联网公司,线上 CPU 飙升的问题很常见 (例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本 1 分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。线上系统突然运行缓慢,CPU 飙升,甚至到 100%,以及 Full GC 次数过多,接着就是各种报警:例如接口超时报警等。此时急需快速线上排查问题。三、问题排查 不管什么问题,既然是 CPU 飙升,肯定是查一下耗 CPU 的线程,然后看看 GC。3.1 核心排查步骤 1.执行"top"命令:查看所有进程占系统 CPU 的排序。极大可能排第一个的就是咱们的 java 进程 (COMMAND 列)。PID 那一列就是进程号。2.执行"top -Hp 进程号"命令:查看 java 进程下的所有线程占 CPU 的情况。3.执行"printf "%x\n 10"命令 :后续查看线程堆栈信息展示的都是十六进制,为了找到咱们的线程堆栈信息,咱们需要把线程号转成 16 进制。
FAQ
问:如何快速定位占用 CPU 最高的进程?
答:登录服务器后执行 top 命令,默认按 CPU 使用率排序,排在第一行的进程即为占用 CPU 最高的进程,记录其 PID 号。
问:找到进程后如何查看具体是哪个线程占用高?
答:使用 top -Hp 进程号命令查看该进程下所有线程的 CPU 占用情况,找到占用最高的线程 ID,并将其转换为十六进制。
问:Java 应用如何通过堆栈定位代码问题?
答:使用 jstack 进程号 > 文件导出堆栈信息,在文件中搜索转换后的十六进制线程 ID,即可找到对应的代码行和线程状态。