chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

典型CPU故障應急處理實戰(zhàn)

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2025-08-13 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

線上CPU 100%故障應急處理實戰(zhàn):3分鐘內(nèi)快速定位問題的終極指南

真實案例背景:凌晨2點,監(jiān)控告警瘋狂響起,電商網(wǎng)站訪問緩慢,用戶投訴激增。服務器CPU使用率飆升至100%,你有3分鐘時間找到問題根源,否則將面臨巨大的業(yè)務損失...

作為一名有著8年運維經(jīng)驗的老司機,我經(jīng)歷過無數(shù)次深夜被電話叫醒的"驚喜"。今天分享一次典型的CPU 100%故障處理全過程,希望能幫你在關(guān)鍵時刻快速定位問題。

故障現(xiàn)象:用戶體驗急劇下降

時間線回顧

? 02:15 - 監(jiān)控告警:服務器CPU使用率持續(xù)超過95%

? 02:16 - 用戶反饋:頁面加載超過10秒

? 02:17 - 運營通知:訂單量斷崖式下跌

? 02:18 - 開始緊急排查...

關(guān)鍵指標異常

# 系統(tǒng)負載異常高
load average: 8.5, 7.2, 6.8 # 正常應該在2以下
# CPU使用率
%Cpu(s): 98.2 us, 1.2 sy, 0.0 ni, 0.6id
# 內(nèi)存使用正常
KiB Mem : 16GB total, 2GB free

第一步:快速定位CPU消耗大戶(30秒內(nèi))

使用top命令進行初步排查

# 按CPU使用率排序,實時刷新
top -o %CPU

# 輸出示例
PID  USER  PR NI  VIRT  RES  SHR S %CPU %MEM   TIME+ COMMAND
12847 www  20  0 2.2g  1.8g  12m R 89.5 11.2  145:32 java
8934  mysql 20  0 1.6g  800m  32m S 8.2  5.1  23:45 mysqld
3421  nginx 20  0 128m  45m  8m  S 1.2  0.3   2:34 nginx

關(guān)鍵發(fā)現(xiàn):Java進程(PID 12847)占用89.5%的CPU!

深入分析Java進程內(nèi)部線程

# 查看Java進程內(nèi)部線程CPU使用情況
top -H -p 12847

# 輸出關(guān)鍵信息
PID  USER  PR NI  VIRT  RES  SHR S %CPU %MEM   TIME+ COMMAND
12851 www  20  0 2.2g  1.8g  12m R 45.2 11.2  89:23 java
12856 www  20  0 2.2g  1.8g  12m R 44.3 11.2  78:45 java
12863 www  20  0 2.2g  1.8g  12m S 2.1 11.2  5:34 java

重要線索:兩個線程(12851、12856)消耗了近90%的CPU資源!

第二步:精確定位問題代碼(2分鐘內(nèi))

獲取Java線程堆棧信息

# 將線程ID轉(zhuǎn)換為16進制(Java堆棧中使用16進制)
printf"0x%x
"12851 # 輸出:0x3233
printf"0x%x
"12856 # 輸出:0x3238

# 獲取Java進程完整堆棧
jstack 12847 > /tmp/java_stack.txt

# 在堆棧中查找對應線程
grep -A 20"0x3233"/tmp/java_stack.txt

堆棧分析結(jié)果

"pool-2-thread-1"#23prio=5os_prio=0tid=0x... nid=0x3233runnable
 java.lang.Thread.State: RUNNABLE
    at com.company.service.OrderService.calculateDiscount(OrderService.java:245)
    at com.company.service.OrderService.processOrder(OrderService.java:189)
    at com.company.controller.OrderController.submitOrder(OrderController.java:67)
    - locked <0x000000076ab62208> (a java.lang.Object)

"pool-2-thread-2"#24prio=5os_prio=0tid=0x... nid=0x3238runnable 
 java.lang.Thread.State: RUNNABLE
    at com.company.service.OrderService.calculateDiscount(OrderService.java:245)
    - waiting to lock <0x000000076ab62208> (a java.lang.Object)

關(guān)鍵發(fā)現(xiàn)

1. 問題定位到OrderService.calculateDiscount方法的245行

2. 存在鎖競爭問題,多個線程在爭奪同一個鎖資源

3. 線程狀態(tài)顯示為RUNNABLE但實際在等待鎖

第三步:代碼層面問題分析

查看問題代碼

// OrderService.java 第245行附近
publicsynchronizedBigDecimalcalculateDiscount(Order order){
 // 問題代碼:在同步方法中執(zhí)行了耗時的外部API調(diào)用
 try{
   // 調(diào)用第三方優(yōu)惠券驗證API - 耗時3-5秒
   CouponValidationResultresult=thirdPartyApi.validateCoupon(order.getCouponCode());
   
   // 復雜的折扣計算邏輯
   for(inti=0; i 

問題根因分析

1.鎖粒度過大:整個方法使用synchronized,導致所有折扣計算串行執(zhí)行

2.耗時操作在鎖內(nèi):第三方API調(diào)用在鎖保護范圍內(nèi),嚴重影響并發(fā)性能

3.復雜計算邏輯:大量循環(huán)計算進一步加劇了鎖競爭

第四步:緊急處理方案(1分鐘內(nèi)執(zhí)行)

臨時解決方案:限流 + 緩存

# 1. 緊急重啟應用(如果可接受短暫中斷)
systemctl restart your-app

# 2. 開啟Nginx限流(降低并發(fā)壓力)
# /etc/nginx/conf.d/rate-limit.conf
limit_req_zone$binary_remote_addrzone=order:10m rate=10r/s;

location /api/order {
  limit_req zone=order burst=20 nodelay;
  proxy_pass http://backend;
}

# 重載Nginx配置
nginx -s reload

# 3. 臨時禁用優(yōu)惠券功能(業(yè)務降級)
# 在配置中心快速切換feature flag
curl -X PUT http://config-center/api/features/coupon-validation 
 -d'{"enabled": false}'

第五步:根本性修復方案

代碼重構(gòu):異步化 + 細粒度鎖

@Service
publicclassOrderService{
 
 privatefinalRedisTemplate redisTemplate;
 privatefinalCouponValidationService couponService;
 
 // 移除synchronized,改為細粒度鎖控制
 publicCompletableFuturecalculateDiscountAsync(Order order){
   returnCompletableFuture.supplyAsync(() -> {
     StringlockKey="discount_calc_"+ order.getUserId();
     
     // 使用Redis分布式鎖,避免單機鎖競爭
     returnredisTemplate.execute(newRedisCallback() {
       @Override
       publicBigDecimaldoInRedis(RedisConnection connection){
         try{
           // 嘗試獲取鎖,超時時間1秒
           BooleanlockAcquired=connection.setNX(
              lockKey.getBytes(),"1".getBytes()
            );
            connection.expire(lockKey.getBytes(),5);// 5秒過期
           
           if(lockAcquired) {
             returndoCalculateDiscount(order);
            }else{
             // 獲取鎖失敗,返回默認折扣
             returngetDefaultDiscount(order);
            }
          }finally{
            connection.del(lockKey.getBytes());
          }
        }
      });
    });
  }
 
 privateBigDecimaldoCalculateDiscount(Order order){
   // 1. 先檢查緩存
   StringcacheKey="discount_"+ order.getCouponCode();
   BigDecimalcachedDiscount=(BigDecimal) redisTemplate.opsForValue().get(cacheKey);
   if(cachedDiscount !=null) {
     returncachedDiscount;
    }
   
   // 2. 異步調(diào)用第三方API,設(shè)置超時時間
    CompletableFuture apiCall =
      couponService.validateCouponAsync(order.getCouponCode())
        .orTimeout(2, TimeUnit.SECONDS) // 2秒超時
        .exceptionally(ex -> {
          log.warn("優(yōu)惠券驗證超時,使用默認策略", ex);
         returnCouponValidationResult.defaultResult();
        });
   
   try{
     CouponValidationResultresult=apiCall.get();
     BigDecimaldiscount=calculateFinalDiscount(result, order);
     
     // 3. 緩存結(jié)果,避免重復計算
      redisTemplate.opsForValue().set(cacheKey, discount, Duration.ofMinutes(10));
     
     returndiscount;
    }catch(Exception e) {
      log.error("折扣計算異常", e);
     returngetDefaultDiscount(order);
    }
  }
}

性能監(jiān)控改進

// 添加方法級別的性能監(jiān)控
@Around("@annotation(Timed)")
publicObjectlogExecutionTime(ProceedingJoinPoint joinPoint)throwsThrowable {
 longstart=System.currentTimeMillis();
 Objectproceed=joinPoint.proceed();
 longexecutionTime=System.currentTimeMillis() - start;
 
 // 超過1秒的方法記錄告警
 if(executionTime >1000) {
    log.warn("方法執(zhí)行時間過長: {} ms, 方法: {}",
        executionTime, joinPoint.getSignature());
  }
 
 returnproceed;
}

第六步:效果驗證與長期監(jiān)控

修復前后對比

指標 修復前 修復后 改善幅度
CPU使用率 98% 25% ↓ 73%
響應時間 8-12秒 200-500ms ↓ 95%
并發(fā)處理能力 10 TPS 200 TPS ↑ 1900%
系統(tǒng)負載 8.5 1.2 ↓ 86%

建立預警機制

# Prometheus告警規(guī)則
groups:
- name: cpu_alerts
 rules:
 - alert: HighCPUUsage
 expr: cpu_usage_percent > 80
 for: 2m
  annotations:
   summary:"服務器CPU使用率過高"
   description:"CPU使用率已達到{{$value}}%,持續(xù)超過2分鐘"
  
 - alert: JavaThreadBlocked
 expr: jvm_threads_blocked_count > 10
 for: 1m
  annotations:
   summary:"Java線程阻塞數(shù)量異常"
   description:"阻塞線程數(shù)量:{{$value}}"

業(yè)務影響與價值總結(jié)

直接收益

?故障處理時間:從平均30分鐘縮短到3分鐘

?用戶體驗提升:頁面響應時間從10秒降至0.5秒

?業(yè)務損失避免:預估避免每小時50萬元的訂單損失

技術(shù)債務清理

? 重構(gòu)了23個類似的同步方法

? 建立了完整的性能監(jiān)控體系

? 制定了代碼review檢查清單

經(jīng)驗總結(jié):運維老司機的5個黃金法則

1. 建立分層監(jiān)控體系

# 系統(tǒng)層監(jiān)控
- CPU/Memory/Disk/Network基礎(chǔ)指標
- Load Average和進程狀態(tài)

# 應用層監(jiān)控 
- JVM堆內(nèi)存、GC狀況、線程狀態(tài)
- 接口響應時間、錯誤率、TPS

# 業(yè)務層監(jiān)控
- 關(guān)鍵業(yè)務指標實時追蹤
- 用戶行為數(shù)據(jù)異常檢測

2. 掌握快速定位工具鏈

# CPU問題定位三板斧
top → jstack → 代碼分析

# 常用命令組合
ps aux | grep java     # 找到Java進程
top -H -p       # 查看進程內(nèi)線程
jstack  | grep -A 10 # 分析線程堆棧

3. 制定標準化應急預案

?2分鐘:問題確認和初步定位

?5分鐘:實施臨時解決方案

?30分鐘:根因分析和永久修復

?1小時:復盤總結(jié)和預防措施

4. 重視代碼性能review

?鎖使用原則:鎖粒度最小化,鎖持有時間最短化

?異步化改造:耗時操作必須異步化處理

?緩存策略:合理使用多級緩存避免重復計算

5. 建立知識庫和工具箱

每次故障處理后都要沉淀:

?故障案例庫:典型問題的診斷和解決步驟

?腳本工具箱:自動化診斷和修復腳本

?監(jiān)控儀表板:可視化的系統(tǒng)健康狀態(tài)

寫在最后

作為運維工程師,我們就是系統(tǒng)的"醫(yī)生"。面對CPU 100%這樣的"急癥",需要的不僅是技術(shù)能力,更重要的是冷靜的分析思路和系統(tǒng)性的解決方案。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11186

    瀏覽量

    221175
  • 服務器
    +關(guān)注

    關(guān)注

    13

    文章

    9994

    瀏覽量

    90062

原文標題:線上CPU 100%故障應急處理實戰(zhàn):3分鐘內(nèi)快速定位問題的終極指南

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CPU典型故障剖析

    CPU典型故障剖析 電腦故障急救系列之一:CPU典型
    發(fā)表于 01-05 16:01

    CPU常見故障處理

    CPU常見故障處理    1.質(zhì)量問題導致的故障   我們經(jīng)常遇到的電腦故障,雖然無奇不有,但還是那幾個重要的硬件,比如:
    發(fā)表于 01-05 16:06

    CPU常見故障處理

    CPU常見故障處理一、CPU常見故障處理   1.質(zhì)量問題導致的
    發(fā)表于 03-16 10:14

    eps應急電源常見故障和維修

    復位信號是不是正常,復位脈沖有沒有正確送到CPU芯片的復位腳。4、eps應急電源中數(shù)據(jù)總線、地址總線、控制總線的任何一根開路或短路都可引發(fā)故障,可以通過測試平行總線的對地 電阻 比較某路有沒有
    發(fā)表于 02-28 14:12

    【修復】消防應急故障檢測及修復

    DIY&分享—GravityShare之前拆解的一款消防應急照明燈使用的時候出現(xiàn)故障了,只要接上市電就會故障指示燈常亮而且斷掉市電之后照明燈閃一下就熄滅了,這次就來進一步對這款應急燈進
    發(fā)表于 05-24 16:33

    EJA智能雙法蘭差壓變送器的典型故障處理

    摘要:針對EJA 智能雙法蘭差壓變送器的具體應用情況,介紹了其典型故障的詳細處理方法。實踐證明:只有正確運用和維護,才能保證儀表的長期穩(wěn)定運行。關(guān)鍵詞智能變送器
    發(fā)表于 01-18 23:14 ?43次下載

    設(shè)備故障應急處理的方法與技巧

    論述掌握設(shè)備故障應急處理方法對企業(yè)生產(chǎn)的重要性,通過大量實例介紹設(shè)備搶修過程中常用的幾種故障應急處理
    發(fā)表于 12-29 16:33 ?20次下載

    主動數(shù)據(jù)庫在聯(lián)鎖故障應急處理中的應用

    根據(jù)計算機聯(lián)鎖故障應急處理系統(tǒng)的功能要求,提出了用于計算機聯(lián)鎖故障應急處理的主動數(shù)據(jù)庫模型,定義
    發(fā)表于 02-25 14:51 ?8次下載

    常見CPU故障處理方法

    常見CPU故障處理方法 ●頻率有時自動降低開機后本來166MHz的CPU
    發(fā)表于 01-12 10:21 ?1059次閱讀

    筆記本啟動故障修復實戰(zhàn)

    筆記本啟動故障修復實戰(zhàn) 同學使用的一臺IBM T23筆記本電腦,一個月前出現(xiàn)了偶爾不能啟動的故障,由于出現(xiàn)故障的頻率不高所以并未
    發(fā)表于 01-23 11:21 ?712次閱讀

    視頻系統(tǒng)的故障排除和應急處理

    視頻系統(tǒng)的故障排除和應急處理 系統(tǒng)安全注意事項   設(shè)備在日常使用中要注意保持清潔和防塵,而且切忌勤開勤關(guān)。比如:在開啟系
    發(fā)表于 02-21 09:12 ?849次閱讀

    KGPS型可控硅中頻電源典型故障處理

    KGPS型可控硅中頻電源典型故障處理(電源技術(shù)存在的問題總結(jié))-KGPS型可控硅中頻電源典型故障處理
    發(fā)表于 09-24 09:15 ?19次下載
    KGPS型可控硅中頻電源<b class='flag-5'>典型</b><b class='flag-5'>故障</b><b class='flag-5'>處理</b>

    常見的CPU故障有哪些

    中央處理器簡稱CPU,是計算機系統(tǒng)的執(zhí)行單元,基本功能為處理指令、執(zhí)行操作、控制時間、處理數(shù)據(jù)。那么常見的CPU
    的頭像 發(fā)表于 01-17 15:41 ?1.4w次閱讀

    消防應急燈常見故障問題及處理方法介紹

    消防應急燈常見故障問題及處理方法介紹 我們經(jīng)常接觸到的一些公共場所,比如大學、寫字樓、大型商場、休閑娛樂俱樂部,就會看到很多消防應急燈。這種燈的主要用途往往被我們忽視,以為它們的作用只
    發(fā)表于 12-28 09:56 ?1.8w次閱讀

    消防應急燈的主要故障及排除方法介紹

    【大成智慧】消防應急燈的主要故障及排除方法介紹 應急燈指的是電源發(fā)生故障時,正常照明無法使用的情況下啟動的照明燈。比如說因為火災導致正常照明系統(tǒng)失效時,消防疏散照明燈,消防
    的頭像 發(fā)表于 07-13 16:35 ?1.2w次閱讀