亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

3天內不再提示

華為云數(shù)據(jù)庫GaussDB(for Cassandra)揭秘:內存異常增長的排查經

科技說i ? 來源:科技說i ? 作者:科技說i ? 2022-12-02 09:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

內存異常增長的排查經歷

背景介紹

華為云數(shù)據(jù)庫GaussDB(for Cassandra)是一款基于計算存儲分離架構,兼容Cassandra生態(tài)的云原生NoSQL數(shù)據(jù)庫;它依靠共享存儲池實現(xiàn)了強一致,保證數(shù)據(jù)的安全可靠。核心特點是:存算分離、低成本、高性能。

問題描述

GaussDB(for Cassandra)自研架構下遇到一些挑戰(zhàn)性問題,比如cpu過高,內存泄漏,內存異常增長,時延高等問題,這些也都是開發(fā)過程中遇到的典型問題。分析內存異常增長是一個比較大的挑戰(zhàn),內存的異常增長對于程序來說是一個致命的問題,因為其可能觸發(fā)OOM,進程異常宕機,業(yè)務中斷等結果,所以對內存進行合理的規(guī)劃使用及控制就顯得尤為重要。通過調整cache容量,bloom過濾器大小,以及memtable大小等等,實現(xiàn)性能提升,讀寫時延改善等效果。

在線下測試過程中發(fā)現(xiàn)內核在長時間運行后,內存只增不減,出現(xiàn)異常增長的情況,懷疑可能存在內存泄漏。

分析&驗證

首先根據(jù)內存使用,將內存分為堆內和堆外兩個部分,分別進行該兩塊內存的分析。確定有問題的內存是堆外內存,進一步對堆外內存分析。引入更高效的內存管理工具tcmalloc,解決內存異常增長問題。下面為具體分析驗證過程。

確定內存異常區(qū)域

使用jdk的jmap命令和Cassandra的監(jiān)控(配置jvm.memory.*監(jiān)控項)等方法,每隔1min采集jvm的堆內內存及進程整體內存。

啟動測試用例,直到內核的整體內存達到上限。分析采集到的堆內內存和進程內存變化曲線,發(fā)現(xiàn)其堆內內存仍保持相對穩(wěn)定,未出現(xiàn)一直持續(xù)上漲,但期間內核的整體內存仍然在持續(xù)上漲,兩者的增長曲線不符。即問題應該發(fā)生在堆外內存。

堆外內存分析驗證

glibc內存管理

使用pmap命令打印進程的內存地址空間分布,發(fā)現(xiàn)有大量的64MB的內存塊和許多內存碎片,該現(xiàn)象與glibc的內存分配方式有關。堆外內存的使用和進程整體的內存增長趨勢相近,初步懷疑該問題是由堆外內存導致。加之glibc歸還內存的條件苛刻,即內存不易及時釋放,內存碎片多,猜測問題和gblic有關系。當內存碎片過多,空閑內存浪費嚴重,最終進程內存的最大使用量會出現(xiàn)超過預期計劃最大值的可能,甚至出現(xiàn)OOM。

tcmalloc內存管理

引入tcmalloc內存管理器,代替glibc的ptmalloc內存管理方式。減少過多的內存碎片,提高內存使用效率,本次分析驗證采用gperftools-2.7源碼進行tcmalloc的編譯。運行相同的測試用例,發(fā)現(xiàn)內存仍在持續(xù)上漲,但是上漲幅度較之前降低,通過pmap打印出該內存地址分布情況,發(fā)現(xiàn)之前的小內存塊和內存碎片顯著減小,說明該工具有一定優(yōu)化效果,印證了前面提到內存碎片過多的猜測。

但是內存異常增長的問題仍然存在,有點像是tcmalloc的回收不及時或者不回收導致。實際上tcmalloc的內存回收是比較"reluctant"的,主要是為了當再次需要內存申請時可以直接使用,減少系統(tǒng)調用次數(shù),提高性能?;诖嗽?,下來進行手動調用其釋放內存接口releasefreememory。發(fā)現(xiàn)效果不明顯,原因暫時未知(可能確實存在沒待釋放的空閑內存)。

手動觸發(fā)tcmalloc的releasefreememory接口

為驗證該問題,通過設置cache容量的方式進行。

1.先設置cache的容量為6GB,然后將讀請求壓起來,使cache的6GB容量填滿

2.修改cache的容量為2GB,為快速是內存釋放,手動調用tcmalloc的releasefreememory接口,發(fā)現(xiàn)沒有效果,推測采用tcmalloc之后,內存仍然一直上漲不下跌的原因可能與該接口的有關。

3.在releasefreememory接口內部的多個地方記錄日志,然后啟動進程再次測試,發(fā)現(xiàn)一處報錯是在進行系統(tǒng)調用madvise時有出現(xiàn)失敗。

代碼位置:

pYYBAGOIraKAFw1_AAB8HgoiHF0667.png

報錯日志信息:

poYBAGOIramAeofYAABlttAwRyM875.png

1.通過該處的調用失敗,分析代碼。發(fā)現(xiàn)tcmalloc的內存釋放邏輯是“round-robin”,即中間有一個span釋放失敗,則后續(xù)待釋放的span被終止,releasefreememory邏輯調用結束。這個就和前面的現(xiàn)象吻合,執(zhí)行完releasefreememory接口后基本沒有效果,發(fā)現(xiàn)每次都是在釋放了幾十MB時,因為該接口的調用失敗導致釋放邏輯終止。

2.再次分析該系統(tǒng)調用madvise失敗原因。通過給內核的該方法打patch,發(fā)現(xiàn)其失敗原因是因為傳入的地址塊對應的內存狀態(tài)是LOCKED狀態(tài)。導致系統(tǒng)調用失敗,報錯為非法參數(shù)。

3.內存為LOCKED狀態(tài),和該狀態(tài)相關的有代碼調用mlock系統(tǒng)方法、系統(tǒng)的ulimit配置。分析相關代碼未發(fā)現(xiàn)異常點。查詢系統(tǒng)ulimit配置,發(fā)現(xiàn)max locked memory為unlimited。修改其配置為16MB,重啟Cassandra進程,再次測試,發(fā)現(xiàn)內存釋放效果顯著。

4.繼續(xù)運行測試,發(fā)現(xiàn)內存持續(xù)上漲的情況消失。在業(yè)務持續(xù)存在的情況下,內存會上漲到最高,不再上漲,保持平穩(wěn),符合內存計劃使用量。業(yè)務壓力減少甚至停止后,內存出現(xiàn)緩慢下降趨勢。

解決&總結

1.引入tcmalloc工具,優(yōu)化內存管理。比較優(yōu)秀的內存管理器有Google的tcmalloc和Facebook的jemalloc等

2.修改系統(tǒng)的max locked memory參數(shù)配置。

合理分配進程需要使用內存的最大值,并預留一定容量,對于不符合預期增長的內存需要進一步分析。內存相關問題和程序相關性較強。系統(tǒng)的關鍵配置需謹慎,要評估其影響。同時排查了類似的所有配置。

增加releasefreememory的命令,后端進行調用,優(yōu)化tcmalloc hold內存不釋放問題。不過releasefreememory命令的執(zhí)行會鎖整個pageHeap,可能導致內存分配請求被hang,所以需要小心執(zhí)行。

后端增加可動態(tài)配置tcmalloc_release_rate的參數(shù),來調整tcmalloc將內存交還給操作系統(tǒng)的頻率。該值的合理范圍是[0-10],0表示永遠不交還,值越大,表示交還的頻率越高,默認值是1。

結語

本文通過分析開發(fā)過程中遇到的內存增長問題,使用更優(yōu)秀的內存管理工具,以及更細粒度的內存監(jiān)控,更直觀的監(jiān)控數(shù)據(jù)庫運行期間的內存狀態(tài),確保數(shù)據(jù)庫平穩(wěn)高性能運行。

審核編輯:湯梓紅

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

    關注

    7

    文章

    3986

    瀏覽量

    67592
  • 華為云
    +關注

    關注

    3

    文章

    2800

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    數(shù)據(jù)庫數(shù)據(jù)恢復—服務器異常斷電導致Oracle數(shù)據(jù)庫故障的數(shù)據(jù)恢復案例

    Oracle數(shù)據(jù)庫故障: 某公司一臺服務器上部署Oracle數(shù)據(jù)庫。服務器意外斷電導致數(shù)據(jù)庫報錯,報錯內容為“system01.dbf需要更多的恢復來保持一致性”。該Oracle數(shù)據(jù)庫
    的頭像 發(fā)表于 07-24 11:12 ?365次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復—服務器<b class='flag-5'>異常</b>斷電導致Oracle<b class='flag-5'>數(shù)據(jù)庫</b>故障的<b class='flag-5'>數(shù)據(jù)</b>恢復案例

    泰國零售巨頭 CJ Express 借助 SAP 內存數(shù)據(jù)庫實現(xiàn)高效數(shù)據(jù)管理

    泰國零售和食品分銷商 CJ Express 借助 SAP 內存數(shù)據(jù)庫及 Datavard 解決方案,有效控制數(shù)據(jù)增長,提升系統(tǒng)性能并降低成本的成功案例。
    的頭像 發(fā)表于 06-13 11:04 ?370次閱讀
    泰國零售巨頭 CJ Express 借助 SAP <b class='flag-5'>內存</b><b class='flag-5'>數(shù)據(jù)庫</b>實現(xiàn)高效<b class='flag-5'>數(shù)據(jù)</b>管理

    HarmonyOS5服務技術分享--數(shù)據(jù)庫使用指南

    ? 華為數(shù)據(jù)庫(CloudDB)在HarmonyOS中的使用指南 ? ??嗨,開發(fā)者朋友們!?? 今天咱們來聊聊華為
    發(fā)表于 05-22 18:29

    華為GaussDB助力統(tǒng)計現(xiàn)代化改革

    2023年8月至2024年5月,華為GaussDB助力國家統(tǒng)計局順利完成第五次全國經濟普查(簡稱“五普”)單位清查和普查登記數(shù)據(jù)采集處理
    的頭像 發(fā)表于 02-12 10:59 ?620次閱讀

    如何保障服務器數(shù)據(jù)庫的安全與穩(wěn)定

    在數(shù)字化時代,服務器數(shù)據(jù)庫承載著企業(yè)和個人的海量關鍵數(shù)據(jù),其安全與穩(wěn)定至關重要。一旦出現(xiàn)安全漏洞或穩(wěn)定性問題,可能導致數(shù)據(jù)丟失、業(yè)務中斷等嚴重后果。以下是一些保障
    的頭像 發(fā)表于 02-12 10:37 ?515次閱讀

    數(shù)據(jù)庫要購買服務器嗎?答案在這里

    數(shù)據(jù)庫通常無需用戶購買服務器,由提供商負責底層硬件維護。用戶可通過Web界面或API配置和管理數(shù)據(jù)庫,根據(jù)需求選擇合適的類型、規(guī)格和策略。在特殊情況下,如性能或安全需求無法滿足,用戶可能需自建
    的頭像 發(fā)表于 01-17 09:55 ?482次閱讀

    避坑指南:服務器數(shù)據(jù)庫購買方法全攻略

    服務器數(shù)據(jù)庫購買方法包含:先明確業(yè)務需求與數(shù)據(jù)庫類型,再挑選信譽好、技術支持強的服務提供商,接著根據(jù)需求配置數(shù)據(jù)庫實例及選擇付費方式。購
    的頭像 發(fā)表于 01-15 10:05 ?738次閱讀

    分布式數(shù)據(jù)庫有哪些類型

    分布式數(shù)據(jù)庫有哪些類型?分布式數(shù)據(jù)庫主要類型包括:關系型分布式數(shù)據(jù)庫、非關系型分布式數(shù)據(jù)庫
    的頭像 發(fā)表于 01-15 09:43 ?790次閱讀

    構建數(shù)據(jù)庫解決方案,基于華為 Flexus X 實例容器化 MySQL 主從同步架構

    華為企業(yè)上節(jié),F(xiàn)lexus X 實例特惠開啟,助力企業(yè)輕松構建高性能數(shù)據(jù)庫系統(tǒng)。專業(yè)團隊技術支持,確保部署無憂,運維高效。選擇華為
    的頭像 發(fā)表于 01-07 17:22 ?849次閱讀
    構建<b class='flag-5'>數(shù)據(jù)庫</b>解決方案,基于<b class='flag-5'>華為</b><b class='flag-5'>云</b> Flexus X 實例容器化 MySQL 主從同步架構

    數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?

    數(shù)據(jù)庫是一種部署在虛擬計算環(huán)境中的數(shù)據(jù)庫,它融合了計算的彈性和可擴展性,為用戶提供高效、靈活的數(shù)據(jù)庫服務。
    的頭像 發(fā)表于 01-07 10:22 ?726次閱讀

    一般企業(yè)購買服務器帶數(shù)據(jù)庫嗎?

    購買服務器是否帶數(shù)據(jù)庫,這主要取決于所選擇的服務提供商及其具體的套餐或服務內容。一般來說,服務器本身是一個提供計算能力、存儲空間和網絡連接資源的虛擬服務器,它本身并不直接包含
    的頭像 發(fā)表于 01-06 10:25 ?672次閱讀

    華為榮登Gartner?數(shù)據(jù)庫挑戰(zhàn)者象限

    近日,全球知名的信息技術研究與顧問公司Gartner?正式發(fā)布了其備受矚目的2024年度《數(shù)據(jù)庫管理系統(tǒng)魔力象限報告》。在這份權威報告中,華為憑借其卓越的表現(xiàn)成功入選挑戰(zhàn)者象限,彰
    的頭像 發(fā)表于 12-31 13:57 ?712次閱讀

    托管可以操作數(shù)據(jù)庫嗎?安全性如何

    托管可以操作數(shù)據(jù)庫。在托管環(huán)境中,開發(fā)者可以通過使用服務提供商提供的API或SDK來連接并操作
    的頭像 發(fā)表于 12-11 13:35 ?503次閱讀

    數(shù)據(jù)庫主機哪個好一點?

    數(shù)據(jù)庫主機哪個好一點?主機和數(shù)據(jù)庫各有優(yōu)勢,選擇哪個更好取決于具體需求。
    的頭像 發(fā)表于 12-04 13:50 ?676次閱讀

    數(shù)據(jù)庫服務器哪個便宜一些?

    服務器的價格區(qū)間相對更廣泛,因為用戶可以根據(jù)實際需求選擇不同配置和性能的服務器。而數(shù)據(jù)庫的價格則更多地依賴于數(shù)據(jù)庫類型和規(guī)格。在相同配置下,
    的頭像 發(fā)表于 11-12 10:55 ?820次閱讀