CPU扛不住了

简介: 这是一篇根据生活编撰的一个小故事,讲述了一个比较少见的服务器问题——CPU利用率过高。文中包含了从CPU过高告警,到一步步定位到导致CPU过高的代码的追溯过程。前面是故事,最后面是定位的总结,根据需要酌情使用。声明:故事很小,如有雷同,纯属虚构。

前言

这是一篇根据生活编撰的一个小故事,讲述了一个比较少见的服务器问题——CPU利用率过高。文中包含了从CPU过高告警,到一步步定位到导致CPU过高的代码的追溯过程。

前面是小故事,算是场景引入,如无兴趣可绕过从后记部分开始。郑重声明:故事很小,如有雷同,纯属虚构。


正文

“快看看,CPU利用率爆红了,看着要扛不住了!”小P打电话吼道,小P是服务器的监控。

“什么鬼?”,正准备睡觉的小码爬了起来,小码是系统的开发者。

我一个没多少计算的应用服务怎么就扛不住了,一定是其他服务导致的!”小码嘀咕道。


开机!

登录VPN!

打开finalShell,ssh服务器一气呵成。

看着自己娴熟的操作,小码的嘴角漏出了一丝丝骄傲。

top # Linux系统下,可以查询当前正在运行任务,包含CPU利用率、内存等信息,类似于Windows任务管理器

啪,回车的声音依然清脆,仿佛在迎合着小码的自信。

“我丢@@@”CPU使用率排行第一个是一个Java应用,进程ID 136018,“不会吧...”,嘴角微微抖了一下。

ps -aux | grep xxx-manager.jar #说明:查询服务的进程,xxx-manager.jar是服务包名,端口也可

果然,136018!136018!136018...通过多次仔细比对CPU利用率top1的进程号和自己服务的进程号,确定是小码负责的服务!小码后背一下凉了半截。

“赶快排查排查,趁服务还没宕机”

top -H -p 136018  #说明:-H开启线程模式,-p指定服务进程号

然后找到疯狂占用CPU的线程ID: 136086

printf %x 136086 #说明:此命令是将10进制转换为16进制,因为jstack中线程ID是16进制。136086转换后是0x21396

jcmd Thread.print > jstack.out # 说明:jcmd是jdk自带的分析工具,此命令会将当前jvm栈信息输出到jstack.out文件中。

最后,vim进入jstack.out文件,搜索0x21396,找到线程栈信息,就看到了业务代码。

业务伪代码

for(int i = 0; i < 65535, i++){

methodB(i)

}

void methodB(int i){

for(int j = 0 ; j < 10086; j++){

...

}

}


"这...",循环调用了一个方法methodB,该方法里面还有个循环,类似于循环嵌套循环。外层遍历次数6万+,嵌套循环次数1万+,MD这一个来回就是6亿多次。再看看接口调用方,是页面初始化加载...

“我......”,小码看着祖传代码陷入沉思,“难怪号称宇宙第一块的CPU都扛不住了”。


正在思考解决办法的时候...,“醒醒...小码!你电话响了!”,同事叫醒了呼呼大睡的小码。

看着午睡宝上面一滩口水,小码心里庆幸到:“哦,原来是一场梦啊!”。

“电话!小码!你的电话!!”

来不及去回味残余的一丝丝侥幸,小码赶快看了看手机:【13个未接来电,来自客户老总】。

“我丢@@@”,不会真扛不住了吧...


后记

本文通过一个小故事,讲述了一个比较少见的问题-CPU利用率过高的问题,包含了发现CPU过高告警,到找到导致CPU过高的代码的追溯过程。

定位步骤:

1.首先查看CPU高占用率的进程号,根据进程号查询CPU高占用率的线程ID,使用top命令。

2.快照当前服务端栈信息,线程ID转为16进制在栈信息文件里查找对应线程栈,即可找到导致CPU疯狂飙升的代码了。

3.然后根据需要,进行业务或者算法上面的调整优化。

最后

相关文章
|
人工智能 IDE 开发工具
如何快速提升编码效率: GitHub Copilot的入门教程(下)
如何快速提升编码效率: GitHub Copilot的入门教程
|
18天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6818 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
3天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
605 138
|
3天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1145 0
|
10天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1165 1
|
13天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1271 3
|
11天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
969 5
|
9天前
|
人工智能 自然语言处理 安全
Vibe Coding 实战:别盲目跟风,先分清 vibe coding 适合什么场景
本文系统总结vibe coding实战经验:明确其适用场景(原型、小工具、标准化模块),剖析5步落地流程(场景判定→结构化提示词→目录初始化→分模块生成→自动化校验),指出四大常见误区,并推荐适配工具Trae。强调“场景匹配+规则前置”是提效关键,避免盲目套用。
803 1