国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

典型CPU故障應急處理實戰

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

掃碼添加小助手

加入工程師交流群

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

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

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

故障現象:用戶體驗急劇下降

時間線回顧

? 02:15 - 監控告警:服務器CPU使用率持續超過95%

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

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

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

關鍵指標異常

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

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

使用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

關鍵發現:Java進程(PID 12847)占用89.5%的CPU!

深入分析Java進程內部線程

# 查看Java進程內部線程CPU使用情況
top -H -p 12847

# 輸出關鍵信息
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分鐘內)

獲取Java線程堆棧信息

# 將線程ID轉換為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

堆棧分析結果

"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)

關鍵發現

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

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

3. 線程狀態顯示為RUNNABLE但實際在等待鎖

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

查看問題代碼

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

問題根因分析

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

2.耗時操作在鎖內:第三方API調用在鎖保護范圍內,嚴重影響并發性能

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

第四步:緊急處理方案(1分鐘內執行)

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

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

# 2. 開啟Nginx限流(降低并發壓力)
# /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. 臨時禁用優惠券功能(業務降級)
# 在配置中心快速切換feature flag
curl -X PUT http://config-center/api/features/coupon-validation 
 -d'{"enabled": false}'

第五步:根本性修復方案

代碼重構:異步化 + 細粒度鎖

@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. 異步調用第三方API,設置超時時間
    CompletableFuture apiCall =
      couponService.validateCouponAsync(order.getCouponCode())
        .orTimeout(2, TimeUnit.SECONDS) // 2秒超時
        .exceptionally(ex -> {
          log.warn("優惠券驗證超時,使用默認策略", ex);
         returnCouponValidationResult.defaultResult();
        });
   
   try{
     CouponValidationResultresult=apiCall.get();
     BigDecimaldiscount=calculateFinalDiscount(result, order);
     
     // 3. 緩存結果,避免重復計算
      redisTemplate.opsForValue().set(cacheKey, discount, Duration.ofMinutes(10));
     
     returndiscount;
    }catch(Exception e) {
      log.error("折扣計算異常", e);
     returngetDefaultDiscount(order);
    }
  }
}

性能監控改進

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

第六步:效果驗證與長期監控

修復前后對比

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

建立預警機制

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

業務影響與價值總結

直接收益

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

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

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

技術債務清理

? 重構了23個類似的同步方法

? 建立了完整的性能監控體系

? 制定了代碼review檢查清單

經驗總結:運維老司機的5個黃金法則

1. 建立分層監控體系

# 系統層監控
- CPU/Memory/Disk/Network基礎指標
- Load Average和進程狀態

# 應用層監控 
- JVM堆內存、GC狀況、線程狀態
- 接口響應時間、錯誤率、TPS

# 業務層監控
- 關鍵業務指標實時追蹤
- 用戶行為數據異常檢測

2. 掌握快速定位工具鏈

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

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

3. 制定標準化應急預案

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

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

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

?1小時:復盤總結和預防措施

4. 重視代碼性能review

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

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

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

5. 建立知識庫和工具箱

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

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

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

?監控儀表板:可視化的系統健康狀態

寫在最后

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

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

    關注

    68

    文章

    11277

    瀏覽量

    224956
  • 服務器
    +關注

    關注

    14

    文章

    10251

    瀏覽量

    91480

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    CPU典型故障剖析

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

    CPU常見故障處理

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

    CPU常見故障處理

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

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

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

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

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

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

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

    設備故障應急處理的方法與技巧

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

    主動數據庫在聯鎖故障應急處理中的應用

    根據計算機聯鎖故障應急處理系統的功能要求,提出了用于計算機聯鎖故障應急處理的主動數據庫模型,定義
    發表于 02-25 14:51 ?8次下載

    常見CPU故障處理方法

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

    筆記本啟動故障修復實戰

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

    視頻系統的故障排除和應急處理

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

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

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

    常見的CPU故障有哪些

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

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

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

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

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