国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析

這篇具有很好參考價值的文章主要介紹了記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、背景

起因:

自監(jiān)控應(yīng)用凌晨告警:Pod 內(nèi)存使用率大于80%(規(guī)格為1c1G)。內(nèi)存緩慢增長,持續(xù)到早上內(nèi)存使用率停止在81%左右。

疑點:

此模塊是一個輕任務(wù)模塊(基于go開發(fā)),請求量很低并且數(shù)據(jù)量非常少,平常內(nèi)存占用一直以來都在100MB左右,出現(xiàn)內(nèi)存不足的概率極小,而且運行了幾個月無故障。

初步定位:

登錄平常查看指標(biāo),確實有一個節(jié)點內(nèi)存異常,但另一個節(jié)點正常(這模塊有個特性是主備模式,同一時間只有一個節(jié)點工作,通過日志確定異常的節(jié)點正是工作節(jié)點)。

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

二、初步分析過程

登錄k8s查看內(nèi)存情況,通過 kubectl top pod 查看內(nèi)存占用果然已經(jīng)有800MB+,但理論上這模塊不應(yīng)該占用這么多內(nèi)存(截圖時間點不一樣,有部分回收)。

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

?繼續(xù)登錄pod內(nèi),通過 cat /sys/fs/cgroup/memory/ 查看內(nèi)存統(tǒng)計 (注意,在pod中使用 free -m 等類似的命令只能統(tǒng)計到宿主機(jī)的內(nèi)存信息,固無用)

# cd  /sys/fs/cgroup/memory/
# cat memory.usage_in_bytes
顯示輸出 962097152(即約917MB,即將超過1GB限額,超過則會激活OOM Kill)

# cat memory.stat  后輸出如下圖

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

?其中的?rss?標(biāo)識當(dāng)前應(yīng)用進(jìn)程實際使用內(nèi)存量,55017472 = 約52MB,此數(shù)據(jù)證實了一般的設(shè)定:這個應(yīng)用一般占用都在100MB以內(nèi)。

三、懷疑監(jiān)控指標(biāo)不準(zhǔn)確?

通過了解到,激活自監(jiān)控告警的指標(biāo)是通過k8s的?container_memory_working_set_bytes?指標(biāo)超過80%告警。

通過查閱k8s源碼 promethus.go 的?Memory.WorkingSet 相關(guān)引用發(fā)現(xiàn),此參數(shù)是通過計算?Memory.Usage -?total_inactive_file?得出(即本案例是?962097152 - 111620096 = 811MB)

?(其中的?Memory.Usage 即為memory.usage_in_bytes文件中的值:962097152?

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

按照此情況看,數(shù)據(jù)取值確實沒問題,同時,關(guān)注到一個指標(biāo)??total_active_file?(795275264 = 75.8MB),此參數(shù)加上rss剛好與已用內(nèi)存接近,源碼中未找到此指標(biāo)的相關(guān)信息,通過查閱官方資料發(fā)現(xiàn),此參數(shù)認(rèn)為是一個不能被計算為可用內(nèi)存的值。

也就是說 k8s 作者們認(rèn)為?此active_file內(nèi)存不認(rèn)定為可用內(nèi)存(官方地址為:https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#active-file-memory-is-not-considered-as-available-memory )

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

此參數(shù)作為文件緩存是否要被計算進(jìn)已用內(nèi)存中,github上的討論已經(jīng)有了6年之久仍然是Open狀態(tài) (地址為: ?https://github.com/kubernetes/kubernetes/issues/43916)。

四、應(yīng)用分析

此應(yīng)用只有日志才用到寫文件的操作,是否是日志文件導(dǎo)致的file cache呢? 進(jìn)入到日志文件目錄 ,通過 > xxx.log 清理文件后,再次?cat memory.stat

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

其中的 total_active_file 立即縮小,在通過之前的命令查看內(nèi)存占用,立即恢復(fù)正常,也就是?日志文件導(dǎo)致的?total_active_file 增長從而導(dǎo)致Pod內(nèi)存使用量增大。

五、回溯代碼 & 修復(fù)措施

此應(yīng)用使用了 zap日志框架,通過配置?MaxSize 設(shè)定日志輪轉(zhuǎn)文件大小為1G,在故障時日志文件大小已經(jīng)達(dá)到了?889M。

記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析,kubernetes,golang,容器

日志一直要達(dá)到1G才會激活輪轉(zhuǎn),此前系統(tǒng)將此cache住,但是k8s認(rèn)為此內(nèi)存無法被利用,就導(dǎo)致了內(nèi)存一直在增長,直到產(chǎn)生告警。

解決方案:

為保證Pod 不被 OOM Kill,通過修改MaxSize 修改文件大小進(jìn)行輪轉(zhuǎn)(比如改為200-300M),file cache即可在日志輪轉(zhuǎn)后釋放。

文章轉(zhuǎn)載自:mikevictor

原文鏈接:https://www.cnblogs.com/mikevictor07/p/17968696

體驗地址:引邁 - JNPF快速開發(fā)平臺_低代碼開發(fā)平臺_零代碼開發(fā)平臺_流程設(shè)計器_表單引擎_工作流引擎_軟件架構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-800427.html

到了這里,關(guān)于記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準(zhǔn)確分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • kubernetes(k8s)為容器和 Pod 分配內(nèi)存資源

    kubernetes(k8s)為容器和 Pod 分配內(nèi)存資源

    展示如何將內(nèi)存請求(request)和內(nèi)存限制(limit)分配給一個容器。 我們保障容器擁有它請求數(shù)量的內(nèi)存,但不允許使用超過限制數(shù)量的內(nèi)存。 創(chuàng)建新的命名空間 編輯yaml文件 配置文件的 args 部分提供了容器啟動時的參數(shù)。 “–vm-bytes”, “150M” 參數(shù)告知容器嘗試分配 15

    2024年02月15日
    瀏覽(109)
  • 記一次Redisson連接k8s環(huán)境Redis報UnknownHostException-域名解析錯誤問題解決

    記一次Redisson連接k8s環(huán)境Redis報UnknownHostException-域名解析錯誤問題解決

    一直聽說Redisson分布式鎖好用,終于在項目上使用了!在本地測試完畢,一上測試環(huán)境,運維就反饋服務(wù)沒起來,拉日志一看,是以下報錯 主要報錯信息是 于是乎,上github看了一下,發(fā)現(xiàn)這還是一個比較熱門dns解析失敗的問題,好多人都遇到了同樣的問題。想著開源項目,這

    2024年02月04日
    瀏覽(26)
  • K8S 1.27 新特性 Pod 無需重啟調(diào)整CPU內(nèi)存資源

    如果您已經(jīng)部署了指定 CPU 或 Memory 資源的 Kubernetes pod,可能已經(jīng)注意到更改資源值涉及重新啟動 pod。直到現(xiàn)在,這一直是運行工作負(fù)載的破壞性操作。 在 Kubernetes v1.27 中,添加了一個新的 alpha 功能,允許用戶在不重啟容器的情況下調(diào)整分配給 Pod 的 CPU 或 memory 資源的大小。

    2024年02月11日
    瀏覽(27)
  • k8s故障排查個案:當(dāng)Pod內(nèi)存持續(xù)增長,OOM問題如何解決?

    k8s故障排查個案:當(dāng)Pod內(nèi)存持續(xù)增長,OOM問題如何解決?

    pod 運行一段時間后,內(nèi)存持續(xù)增長,甚至 oom 的情況. 容器化過程中,我們經(jīng)常會發(fā)現(xiàn) kubernetes 集群內(nèi) pod 的內(nèi)存使用率會不停持續(xù)增長,加多少內(nèi)存吃多少內(nèi)存,如果對 cgroup 內(nèi)存的構(gòu)成不是很清楚的情況下,單純看監(jiān)控看不出什么問題。 經(jīng)過一番查閱,目前總結(jié)出大致有

    2024年02月22日
    瀏覽(31)
  • k8s自定義Endpoint實現(xiàn)內(nèi)部pod訪問外部應(yīng)用

    k8s自定義Endpoint實現(xiàn)內(nèi)部pod訪問外部應(yīng)用

    endpoint除了可以暴露pod的IP和端口還可以代理到外部的ip和端口 使用場景 公司業(yè)務(wù)還還沒有完成上云, 一部分云原生的,一部分是實體的 業(yè)務(wù)上云期間逐步實現(xiàn)上云,保證各個模塊之間的解耦性 比如使用云數(shù)據(jù)庫或者實體數(shù)據(jù)庫服務(wù)器啥的,因為像數(shù)據(jù)庫實現(xiàn)容器化的話在

    2024年01月25日
    瀏覽(26)
  • 【Kubernetes 系列】一文帶你吃透 K8S 應(yīng)用pod結(jié)點

    【Kubernetes 系列】一文帶你吃透 K8S 應(yīng)用pod結(jié)點

    作者:半身風(fēng)雪 上一節(jié):創(chuàng)建K8s集群項目 簡介:上一節(jié)我們一起學(xué)習(xí)了,如何去部署一個K8S 的應(yīng)用程序,這一節(jié),我們主要講解一下,K8S 應(yīng)用的框架結(jié)構(gòu)。 本節(jié)我將和大家一起學(xué)習(xí)Kubernetes 應(yīng)用中的pod結(jié)點 了解 Kubernetes Pod。 了解 Kubernetes 工作節(jié)點。 對已部署的應(yīng)用故障排

    2023年04月08日
    瀏覽(710)
  • k8s企業(yè)級應(yīng)用系列(二):對象管理及Pod原理

    k8s企業(yè)級應(yīng)用系列(二):對象管理及Pod原理

    本節(jié)介紹對象的相關(guān)概念和管理機(jī)制。只有了解了這些機(jī)制,我們才能輕松的對k8s資源進(jìn)行編排。 1 對象 Object k8s對象 即是對應(yīng)用程序、工作負(fù)載、存儲、網(wǎng)絡(luò)等資源的抽象表示,如 image、pod、node、volume、service 等。集群中每個對象都有一個 名稱 來標(biāo)識其在 同類資源中 的

    2024年04月14日
    瀏覽(105)
  • k8s進(jìn)階之路-pod探針:容器內(nèi)的監(jiān)控機(jī)制,檢測應(yīng)用是否存活

    k8s進(jìn)階之路-pod探針:容器內(nèi)的監(jiān)控機(jī)制,檢測應(yīng)用是否存活

    配合Pod重啟策略:? RestartPolicy 應(yīng)用程序是否啟動完成: 3.startupProbe啟動探針1.16:排他性 ? ? ? ? ?如果三個都配置了,會優(yōu)先啟動,會禁用前兩個反饋成功后,才會啟動以下兩個 應(yīng)用啟動成功后: 1.LivenessProbe存活探針--故障自動恢復(fù): ? ? ? ? 如果容器掛掉了,會檢測是

    2024年02月19日
    瀏覽(42)
  • 【Go】K8s 管理系統(tǒng)項目[Jenkins Pipeline K8s環(huán)境–應(yīng)用部署]

    【Go】K8s 管理系統(tǒng)項目[Jenkins Pipeline K8s環(huán)境–應(yīng)用部署]

    考慮到實際工作中前后端可能是不同的同學(xué)完成,一般Api部分完成后改動會比較小,web部分改動會比較頻繁.于是將api和web分了2個pipeline實現(xiàn) docker目錄存放鏡像構(gòu)建相關(guān)文件 k8s-plantform-api 存放api部分代碼 Jenkinsfile用作pipeline配置 yaml用作生成k8s下k8s-plantform-api相關(guān)資源 1.1.1 docker目

    2023年04月08日
    瀏覽(39)
  • 【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器

    【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器

    在上一篇文章中,我們學(xué)習(xí)了針對容器設(shè)置啟動時要執(zhí)行的命令和參數(shù)、定義相互依賴的環(huán)境變量、為容器設(shè)置環(huán)境變量,三種設(shè)置方式,本篇文章,我們將繼續(xù)學(xué)習(xí)數(shù)據(jù)的傳遞。 有兩種方式可以將 Pod 和 Container 字段傳遞給運行中的容器: 環(huán)境變量 卷文件 這兩種呈現(xiàn) Pod

    2024年01月25日
    瀏覽(526)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包