日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

性能指標 | CPU飆高排查實戰

來源: 責編: 時間:2024-06-28 17:11:16 158觀看
導讀問題發現前段時間我們新上線了一個應用,由于流量一直不大,集群的每秒查詢率(QPS)大約只有 5。接口的響應時間大約在 30 毫秒左右。最近我們接入了新的業務,業務方提供的數據顯示,日常的 QPS 預計可以達到 2000,而在大促期間

問題發現

前段時間我們新上線了一個應用,由于流量一直不大,集群的每秒查詢率(QPS)大約只有 5。接口的響應時間大約在 30 毫秒左右。aGo28資訊網——每日最新資訊28at.com

最近我們接入了新的業務,業務方提供的數據顯示,日常的 QPS 預計可以達到 2000,而在大促期間峰值 QPS 可能會達到 1 萬。aGo28資訊網——每日最新資訊28at.com

為了評估系統的性能水平,我們進行了一次壓力測試。測試在預發布環境進行。在壓力測試過程中,我們觀察到當單臺服務器的 QPS 達到約 200 時,接口的響應時間沒有明顯變化,但是 CPU 利用率迅速上升,直到達到極限。aGo28資訊網——每日最新資訊28at.com

圖片圖片aGo28資訊網——每日最新資訊28at.com

壓力測試結束后,CPU 利用率立即下降。aGo28資訊網——每日最新資訊28at.com

隨后我們開始排查是什么原因導致了 CPU 的突然飆升。aGo28資訊網——每日最新資訊28at.com

排查與解決

在壓力測試期間,登錄到機器后,我們開始排查問題。aGo28資訊網——每日最新資訊28at.com

本案例的排查過程使用了阿里開源的 Arthas 工具。如果沒有 Arthas,也可以使用 JDK 自帶的命令進行排查。aGo28資訊網——每日最新資訊28at.com

在開始具體排查之前,可以先查看 CPU 的使用情況。最簡單的方法是使用top命令直接查看:aGo28資訊網——每日最新資訊28at.com

top - 10:32:38 up 11 days, 17:56,  0 users,  load average: 0.84, 0.33, 0.18Tasks:  23 total,   1 running,  21 sleeping,   0 stopped,   1 zombie%Cpu(s): 95.5 us,  2.2 sy,  0.0 ni, 76.3 id,  0.0 wa,  0.0 hi,  0.0 si,  6.1 stKiB Mem :  8388608 total,  4378768 free,  3605932 used,   403908 buff/cacheKiB Swap:        0 total,        0 free,        0 used.  4378768 avail Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   3480 admin     20   0 7565624   2.9g   8976 S  241.2 35.8 649:07.23 java   1502 root      20   0  401768  40228   9084 S   1.0  0.5  39:21.65 ilogtail   181964 root      20   0 3756408 104392   8464 S   0.7  1.2   0:39.38 java   496 root      20   0 2344224  14108   4396 S   0.3  0.2  52:22.25 staragentd   1400 admin     20   0 2176952 229156   5940 S   0.3  2.7  31:13.13 java   235514 root      39  19 2204632  15704   6844 S   0.3  0.2  55:34.43 argusagent   236226 root      20   0   55836   9304   6888 S   0.3  0.1  12:01.91 systemd-journ

可以清楚的看到,進程 ID 為 3480 的 Java 進程占用了較高的 CPU,可以初步推斷是應用代碼執行過程中消耗了大量的 CPU 資源。接下來,我們需要進一步排查是哪個線程、哪段代碼導致了這種情況。aGo28資訊網——每日最新資訊28at.com

首先,我們需要下載 Arthas 工具:aGo28資訊網——每日最新資訊28at.com

curl -L https://arthas.aliyun.com/install.sh | sh

啟動:aGo28資訊網——每日最新資訊28at.com

./as.sh

使用 Arthas 命令 "thread -n 3 -i 1000"查看當前"最忙"(耗 CPU)的三個線程:aGo28資訊網——每日最新資訊28at.com

圖片圖片aGo28資訊網——每日最新資訊28at.com

通過上述堆棧信息可以看出,占用 CPU 資源的線程主要是在 JDBC 底層的 TCP 套接字讀取上阻塞。經過連續執行多次分析,發現很多線程都在這個地方卡住。aGo28資訊網——每日最新資訊28at.com

進一步分析調用鏈后發現,這個問題源自于我代碼中的數據庫 insert 操作,其中使用了 TDDL 來創建 sequence。在 sequence 的創建過程中,需要與數據庫進行交互。aGo28資訊網——每日最新資訊28at.com

根據對 TDDL 的了解,它每次從數據庫查詢 sequence 序列時,默認會獲取 1000 條,并在本地進行緩存,直到使用完這 1000 條序列之后才會再次從數據庫獲取下一個 1000 條序列。aGo28資訊網——每日最新資訊28at.com

考慮到我們的壓測 QPS 僅約為 300 左右,不應該導致如此頻繁的數據庫交互。然而,通過多次使用 Arthas 進行查看,發現大部分的 CPU 資源都耗費在這里。aGo28資訊網——每日最新資訊28at.com

因此,我們開始排查代碼問題。最終,發現了一個非常簡單的問題,即我們的 sequence 創建和使用存在著明顯的缺陷:aGo28資訊網——每日最新資訊28at.com

public Long insert(T dataObject) {    if (dataObject.getId() == null) {        Long id = next();        dataObject.setId(id);    }    if (sqlSession.insert(getNamespace() + ".insert", dataObject) > 0) {        return dataObject.getId();    } else {        return null;    }}public Sequence sequence() {    return SequenceBuilder.create()        .name(getTableName())        .sequenceDao(sequenceDao)        .build();}/** * 獲取下一個主鍵ID * * @return */protected Long next() {    try {        return sequence().nextValue();    } catch (SequenceException e) {        throw new RuntimeException(e);    }}

因此,我們每次執行 insert 語句時都重新構建了一個新的 sequence 對象,這導致本地緩存被清空。因此,每次都需要從數據庫重新獲取 1000 條 sequence,但實際上只使用了一條,下次又會重復這個過程。aGo28資訊網——每日最新資訊28at.com

為了解決這個問題,我們調整了代碼,在應用啟動時初始化了一個 Sequence 實例。這樣,在后續獲取 sequence 時,不會每次都與數據庫交互。而是首先檢查本地緩存,只有在本地緩存用盡時才會再次與數據庫交互,獲取新的 sequence。aGo28資訊網——每日最新資訊28at.com

public abstract class BaseMybatisDAO implements InitializingBean {        @Override        public void afterPropertiesSet() throws Exception {            sequence = SequenceBuilder.create().name(getTableName()).sequenceDao(sequenceDao).build();        }    }

通過實現 InitializingBean 接口,并重寫其中的 afterPropertiesSet()方法,在該方法中進行 Sequence 的初始化。aGo28資訊網——每日最新資訊28at.com

完成以上代碼修改后,提交并進行驗證。根據監控數據顯示,優化后數據庫的讀取響應時間(RT)明顯下降。aGo28資訊網——每日最新資訊28at.com

圖片圖片aGo28資訊網——每日最新資訊28at.com

sequence 的寫操作 QPS 也有明顯下降:aGo28資訊網——每日最新資訊28at.com

圖片圖片aGo28資訊網——每日最新資訊28at.com

于是我們開始了新的一輪壓測,但是發現 CPU 的使用率仍然很高,壓測的 QPS 還是無法達到預期。因此,我們決定重新使用 Arthas 工具查看線程的情況。aGo28資訊網——每日最新資訊28at.com

圖片圖片aGo28資訊網——每日最新資訊28at.com

發現了一個 CPU 消耗較高的線程堆棧,主要是因為我們在使用一個聯調工具時,該工具預發布狀態下默認開啟了 TDDL 的日志采集(盡管官方文檔中描述預發布狀態下默認不會開啟 TDDL 采集,但實際上確實會進行采集)。aGo28資訊網——每日最新資訊28at.com

在該工具打印日志時,會進行數據脫敏操作,脫敏框架使用了 Google 的 re2j 進行正則表達式匹配。aGo28資訊網——每日最新資訊28at.com

由于我的操作涉及到大量的 TDDL 操作,而默認情況下會采集大量 TDDL 日志并進行脫敏處理,這導致了較高的 CPU 消耗。aGo28資訊網——每日最新資訊28at.com

因此,通過在預發布環境中關閉對 TDDL 的日志采集,可以有效解決這個問題。aGo28資訊網——每日最新資訊28at.com

總結

這篇總結回顧了一次線上 CPU 飆高問題的排查過程,雖然問題最終解決起來并不復雜,但排查過程中卻有其獨特的教育意義。aGo28資訊網——每日最新資訊28at.com

之前經驗豐富的我按照慣例進行了排查,初始階段并未發現明顯問題,錯誤地將數據庫操作增加歸因于流量上升所致的正常情況。aGo28資訊網——每日最新資訊28at.com

通過多方查證(例如使用 arthas 查看序列獲取情況,以及通過數據庫查詢最新插入數據的主鍵 ID 等方法),最終確認問題出在 TDDL 的序列初始化機制上。aGo28資訊網——每日最新資訊28at.com

解決了這個問題后,本以為問題徹底解決,卻又遭遇到 DP 采集 TDDL 日志導致 CPU 飆高的情況,最終再次解決問題后系統性能有了顯著提升。aGo28資訊網——每日最新資訊28at.com

因此,這個經歷再次驗證了“事出反常必有妖”,排查問題確實需要有耐心和系統性。aGo28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-97280-0.html性能指標 | CPU飆高排查實戰

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 為什么會 Js 但是依然不會寫 Node?原因竟是這三點...

下一篇: 如何獲取請求的進度,并展示給用戶看?

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼‍‍‍‍‍‍‍‍‍‍東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一
  • 榮耀Magicbook V 14 2021曙光藍版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
  • 由于成本持續增加,筆記本產品價格預計將明顯上漲

    根據知情人士透露,由于材料、物流等成本持續增加,筆記本產品價格預計將在2021年下半年有明顯上漲。進入6月下旬以來,全球半導體芯片缺貨情況加劇,顯卡、處理器
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內容審核等。此前,T
Top 主站蜘蛛池模板: 和顺县| 龙山县| 淮滨县| 托里县| 建瓯市| 全南县| 罗山县| 丰台区| 丽水市| 和硕县| 上杭县| 安塞县| 沭阳县| 卢氏县| 临城县| 怀宁县| 利辛县| 罗田县| 开封县| 班玛县| 迭部县| 墨江| 曲周县| 托克托县| 永城市| 寿宁县| 应用必备| 右玉县| 千阳县| 明星| 丘北县| 遂溪县| 新建县| 龙胜| 公安县| 肃北| 安溪县| 玉溪市| 平定县| 建德市| 惠水县|