服务CPU突然飙到100%,用Arthas三分钟定位到问题代码

前言

那天下午正准备摸鱼,突然收到告警:生产环境某服务CPU使用率100%。

打开监控一看,好家伙,4核全部打满,而且已经持续了好几分钟。赶紧上服务器排查。

第一步:确认是哪个进程

先用top看一眼:

top - 14:32:01 up 89 days, 3:21, 2 users, load average: 4.12, 3.89, 2.15 %Cpu(s): 98.7 us, 1.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.1 si PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12847 app 20 0 4.2g 1.8g 12m S 398 23.1 89:32.15 java

果然是Java进程,PID 12847,CPU占用398%(4核差不多打满)。

第二步:找到具体是哪个线程

top -Hp 12847看这个进程里的线程:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12892 app 20 0 4.2g 1.8g 12m R 99.3 23.1 22:15.32 java 12893 app 20 0 4.2g 1.8g 12m R 99.1 23.1 22:14.89 java 12894 app 20 0 4.2g 1.8g 12m R 98.7 23.1 22:13.45 java 12895 app 20 0 4.2g 1.8g 12m R 98.2 23.1 22:12.78 java

4个线程都在疯狂跑。记下线程ID:12892、12893、12894、12895。

把线程ID转成16进制(jstack用的是16进制):

printf "%x\n" 12892 # 输出:325c

第三步:jstack抓线程堆栈

jstack 12847 | grep -A 30 "325c"

输出:

"pool-3-thread-1" #89 prio=5 os_prio=0 tid=0x00007f8a3c012000 nid=0x325c runnable [0x00007f8a2c1fe000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4803) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) ...(省略N行重复的) at com.xxx.service.ContentService.filterContent(ContentService.java:156)

破案了!是正则表达式在疯狂回溯。

用Arthas更快定位

上面的方法虽然能找到问题,但步骤有点多。后来我学会了用Arthas,真的三分钟就能定位。

安装Arthas

curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar

选择要attach的Java进程,进入Arthas控制台。

thread命令直接看CPU最高的线程

thread -n 3

输出:

"pool-3-thread-1" Id=89 cpuUsage=98.32% deltaTime=983ms time=1345623ms RUNNABLE at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at com.xxx.service.ContentService.filterContent(ContentService.java:156) at com.xxx.controller.ContentController.submit(ContentController.java:42)

一条命令就定位到了,比top + jstack方便太多。

profiler火焰图

如果想更直观地看CPU消耗分布:

profiler start # 等待30秒采样 profiler stop --format html

会生成一个火焰图HTML文件,哪个方法占用CPU多一目了然。

问题根因

找到问题代码后,看了一下:

// ContentService.java:156 public String filterContent(String content) { // 这个正则有问题 String pattern = "(a]表达式导致的CPU 100%问题,通常有以下几个原因: ### 1. 回溯陷阱(Catastrophic Backtracking) 像`(a+)+b`这种嵌套量词,遇到不匹配的字符串时,会产生指数级的回溯。 ### 2. 解决方案 **方案一:优化正则表达式** ```java // 避免嵌套量词 // 坏:(a+)+ // 好:a+ // 使用原子组或占有量词 // 好:(?>a+)+ 或 a++

方案二:设置超时

// Java 9+ 支持 Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input).timeout(1000, TimeUnit.MILLISECONDS);

方案三:换用其他库

<dependency> <groupId>com.google.re2j</groupId> <artifactId>re2j</artifactId> <version>1.7</version> </dependency>

RE2J使用的是线性时间的算法,不会出现回溯问题。

其他常见的CPU 100%场景

死循环

while (true) { // 忘了加退出条件或sleep }

用Arthas的thread -n 3一眼就能看到卡在哪一行。

锁竞争

多个线程疯狂抢锁,虽然不是死锁,但CPU也会打满。用thread -b可以看到阻塞情况。

频繁GC

如果是GC线程占用CPU高,需要用jstat -gcutil或者看GC日志排查。

远程排查小技巧

有时候问题发生在远程服务器上,SSH连上去操作比较麻烦。我现在习惯用星空组网工具把服务器和本地打通,直接在本地IDEA里远程连接Arthas,体验好很多。特别是需要下载火焰图或者heap dump的时候,内网直传比scp快多了。

总结

CPU 100%问题排查流程:

  1. top确认是哪个进程
  2. top -Hp <pid>找到CPU高的线程
  3. jstack或 Arthasthread -n 3看线程堆栈
  4. 根据堆栈定位问题代码

Arthas真的是线上排查神器,强烈推荐还没用过的同学试试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1183724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年热门的/有实力的/质量好的/正规的/高品质的蒸发器厂家权威推荐榜:聚焦节能、高粘度处理与工业废水净化

在化工、制药、食品、环保等诸多工业领域,蒸发器作为核心的浓缩、结晶与分离设备,其性能的优劣直接关系到生产线的效率、能耗与最终产品质量。市场上供应商众多,产品描述琳琅满目,如何从“优质蒸发器”、“专业蒸发…

高精地图车端引擎开发

1.高精地图车端引擎开发 高精地图车端引擎开发是智能驾驶系统中的核心技术之一&#xff0c;主要负责在车辆端高效加载、解析、管理和使用高精地图数据&#xff0c;为感知、定位、规划与控制等模块提供精准的地理空间信息支撑。以下是高精地图车端引擎开发的关键要素和技术要点…

2026年起重电磁铁厂家推荐:山磁智能科技有限公司,正面吊/吊运管坯用/吊运捆扎棒材用/吊运钢管用/吊运中厚钢板坯用/吊运方坏用起重电磁铁全系供应

山磁智能科技(上海)有限公司是一家深耕磁力应用技术研发与制造领域十余年的高科技企业,凭借强大的技术实力与规模化生产能力,成为全球制造业客户信赖的合作伙伴。公司现有现代化厂区110亩,配备精大稀设备140余台,年…

压路机远程监控智慧运维系统解决方案

压路机作为道路建设、机场跑道、水利工程等基础设施建设领域的关键压实设备&#xff0c;其压实均匀性、作业效率、运行可靠性直接影响路基密实度、路面平整度及工程整体质量&#xff0c;是保障施工进度与工程质量的核心装备。传统模式下&#xff0c;压路机多为单机分散作业&…

2026年广州财税记账公司推荐榜:财税公司 /财税代理/ 财税服务 /外包财税 /财税外包 /财税服务外包/ 财税外包公司服务精选

在粤港澳大湾区建设不断深化的背景下,广州作为核心引擎,其市场主体活力持续迸发,对专业、规范的财税服务需求也随之迅猛增长。对于广大中小企业而言,一个可靠的财税合作伙伴不仅是记账报税的助手,更是规避税务风险…

小白指南:elasticsearch安装+Kibana日志展示

从零开始搭建日志分析平台&#xff1a;Elasticsearch Kibana 实战指南 你有没有遇到过这样的场景&#xff1f;线上服务突然报错&#xff0c;几十台服务器的日志散落在各处&#xff0c; tail -f 查到眼花也找不到根源&#xff1b;或者用户反馈某个功能异常&#xff0c;却没人…

2026年资产管理系统软件清单:大型集团+不动产管理优质选择 - 品牌2026

数字化转型进入深水区,大型集团与不动产企业面临资产规模扩容、业态多元叠加、跨域协同加剧等挑战,对资产管理系统的标准化适配、定制化能力、数据安全性及智能化水平提出更高要求。一套优质的资产管理系统,已成为企…

看效果说话:通义千问3-4B生成的80万字长文展示

看效果说话&#xff1a;通义千问3-4B生成的80万字长文展示 1. 引言&#xff1a;小模型也能写“巨著”&#xff1f; 在大模型参数动辄上百亿、千亿的今天&#xff0c;一个仅40亿参数的小模型能否承担起生成超长文本的重任&#xff1f;通义千问3-4B-Instruct-2507给出了肯定答案…

UDS 31服务安全访问机制深度剖析:全面讲解

UDS 31服务安全访问机制深度剖析&#xff1a;从原理到实战的完整指南在一辆现代智能汽车中&#xff0c;诊断接口不仅是维修工具的“入口”&#xff0c;更可能成为黑客攻击的“后门”。随着车辆电子架构日益复杂&#xff0c;如何在开放诊断功能的同时守住安全底线&#xff1f;UD…

2026年北京继承遗嘱纠纷律师服务推荐:合同纠纷 /交通事故纠纷 /房屋买卖纠纷/ 民间借贷纠纷/ 民事离婚纠纷/ 劳动工伤纠纷律师精选

在处理家庭财产传承这一核心事务时,继承与遗嘱纠纷往往涉及复杂的情感纠葛和精密的财产分割,因此寻求专业法律支持至关重要。这类案件不仅考验法律从业者对《民法典》继承编的深刻理解,更考验其沟通谈判、证据梳理乃…

SerialPort入门配置:Linux系统下权限设置操作指南

打通软硬桥梁&#xff1a;Linux下串口权限配置实战全解析 你有没有遇到过这样的场景&#xff1f;精心写好的串行通信程序&#xff0c;烧录到树莓派或工控机上&#xff0c;运行时却报错&#xff1a; Permission denied: could not open port /dev/ttyUSB0明明代码没问题&#…

2026年苏州婚纱摄影机构推荐榜:姑苏区星纳摄影店,苏州婚纱摄影工作室/苏州婚纱摄影拍摄基地/苏州婚纱摄影礼服/苏州婚纱摄影拍摄机构精选

苏州婚纱摄影市场规模已突破15亿元,每年超过20万对新人选择在这座江南古城记录人生重要时刻。苏州婚纱摄影市场正蓬勃发展,数据显示其市场规模已突破15亿元。新人选择婚纱摄影机构时,通常关注苏州婚纱摄影机构的整体…

GIF动图一键录制,只有1M大小,高帧率丝滑效果,使用完全免费!

下载链接 https://pan.freedw.com/s/57wrU8 软件介绍 GIF动图一键录制&#xff0c;只有1M大小&#xff0c;高帧率丝滑效果&#xff0c;使用完全免费&#xff01; 软件特点 高帧率录制&#xff0c;丝滑效果 体积小巧&#xff0c;不占用内存 一键开启录制&#xff0c;操作简…

CosyVoice-300M Lite英文连读问题?语言模型优化实战

CosyVoice-300M Lite英文连读问题&#xff1f;语言模型优化实战 1. 引言&#xff1a;轻量级TTS的现实挑战与优化目标 随着边缘计算和云原生部署场景的普及&#xff0c;对高效、低资源消耗的语音合成&#xff08;Text-to-Speech, TTS&#xff09;系统需求日益增长。CosyVoice-…

安德烈上映后,殷桃“人生角色”又加一,大银幕上绝佳魅力!

入行二十年&#xff0c;殷桃的角色簿上写满了“高光”&#xff1a;从早期纯真美好的东方闻英&#xff0c;到聪慧果敢的骆玉珠&#xff0c;再到温柔坚韧的郑娟。而《我的朋友安德烈》中的李默妈妈&#xff0c;看似平淡&#xff0c;却可能是她构筑“演技人格”中最关键的一块拼图…

【异常】在Windows命令提示符中执行`mysql --version`命令时,系统提示 ‘mysql‘ 不是内部或外部命令,也不是可运行的程序

一、报错内容 C:\Users\xxx>mysql --version mysql 不是内部或外部命令,也不是可运行的程序 或批处理文件。二、报错说明 在Windows命令提示符中执行mysql --version命令时,系统提示’mysql’不是内部或外部命令,这说明你的电脑无法找到MySQL的可执行文件,核心原因是M…

吹塑机PLC数据采集物联网解决方案

随着塑料包装行业智能化与精益制造需求的不断提升&#xff0c;吹塑机作为生产塑料瓶、容器等产品的关键设备&#xff0c;其运行状态与工艺数据直接影响产品质量与生产效率。传统吹塑机管理多依赖人工经验与本地监控管理&#xff0c;存在数据获取滞后、工艺参数不透明、设备状态…

混元翻译模型1.5版:格式化翻译功能详解

混元翻译模型1.5版&#xff1a;格式化翻译功能详解 1. 技术背景与核心价值 随着全球化进程的加速&#xff0c;跨语言沟通需求日益增长&#xff0c;高质量、低延迟的翻译服务成为多语言应用的核心基础设施。传统翻译模型在处理复杂文本结构时往往破坏原始格式&#xff0c;导致…

2026年专升本辅导公司推荐,专业、靠谱的机构盘点赶快收藏! - 工业品牌热点

本榜单依托全维度市场调研与真实学员口碑,深度筛选出五家专升本培训标杆企业,为有志于提升学历的在职人群、宝妈及备考者提供客观依据,助力精准匹配适配的学习伙伴。 TOP1 推荐:浙江春华教育科技有限公司 推荐指数…

深度剖析Elasticsearch中的字段别名与查询优化

如何用好 Elasticsearch 字段别名&#xff1f;一文讲透查询优化与工程实践你有没有遇到过这样的场景&#xff1a;线上系统正在跑得好好的&#xff0c;突然业务说“我们要把userId改成user_id”&#xff0c;几十个微服务都得跟着改&#xff1f;安全团队查日志要用src_ip&#xf…