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

【k8s pod container內(nèi)存指標說明】

這篇具有很好參考價值的文章主要介紹了【k8s pod container內(nèi)存指標說明】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、問題描述

我司平臺研發(fā)的devops平臺底層采用k8s實現(xiàn),k8s自帶cadvisor進行集群指標收集,根據(jù)官網(wǎng),我們選用了container_memory_working_set_bytes(容器的工作集使用量)作為內(nèi)存使用量的觀察項,但隨著后續(xù)使用過程中發(fā)現(xiàn)該指標上升到一定大小后就會維持不變,并不像應(yīng)用實際內(nèi)存使用量,沒出現(xiàn)波動;

來自kubernetes對該問題的討論(討論了5年多了):https://github.com/kubernetes/kubernetes/issues/43916

二、原因分析

??以下是建立在關(guān)閉swap交換分區(qū)的前提下分析

經(jīng)過一系列分析發(fā)現(xiàn)使用container_memory_working_set_bytes不合理,應(yīng)該使用container_memory_rss來表示應(yīng)用實際內(nèi)存使用量;

我最開始受cadvisor git問題欄中描述的影響,里面描述說:k8s kill pod時是根據(jù)該指標使用情況來判斷的,所以下意識認為該指標表示pod實際內(nèi)存使用量;官網(wǎng)說的沒有問題,container_memory_working_set_bytes指標就是k8s來控制pod是否被kill的依據(jù)參考,但不代表container_memory_working_set_bytes接近pod limit后就一定會被kill,這里涉及到下面要詳細分析的pod內(nèi)存分布情況;

  1. 獲取pod內(nèi)存記錄信息
    在cadvisor中,采集應(yīng)用內(nèi)存信息具體實現(xiàn)實際是獲取docker cgroup中memory.stat中的內(nèi)容,下面是通過cat /sys/fs/cgroup/memory/memory.stat獲取到的pod內(nèi)存數(shù)據(jù):
cache 118784
rss 767553536
rss_huge 0
mapped_file 32768
swap 0
pgpgin 215484
pgpgout 28064
pgfault 388710
pgmajfault 0
inactive_anon 0
active_anon 767496192
inactive_file 32768
active_file 86016
unevictable 0
hierarchical_memory_limit 1073741824
hierarchical_memsw_limit 1073741824
total_cache 118784
total_rss 767553536
total_rss_huge 0
total_mapped_file 32768
total_swap 0
total_pgpgin 215484
total_pgpgout 28064
total_pgfault 388710
total_pgmajfault 0
total_inactive_anon 0
total_active_anon 767496192
total_inactive_file 32768
total_active_file 86016
total_unevictable 0
  1. pod內(nèi)存記錄說明
    上面獲取內(nèi)存記錄,主要關(guān)心total_cache、total_rss、total_inactive_anon、total_active_anon、total_inactive_filetotal_active_file
  • total_cache:表示當(dāng)前pod緩存內(nèi)存量
  • total_rss:表示當(dāng)前應(yīng)用進程實際使用內(nèi)存量
  • total_inactive_anon:表示匿名不活躍內(nèi)存使用量
  • total_active_anon:表示匿名活躍內(nèi)存使用量,jvm堆內(nèi)存使用量會被計算在此處
  • total_inactive_file:表示不活躍文件內(nèi)存使用量
  • total_active_file:表示活躍文件內(nèi)存使用量
  1. container_memory_working_set_bytes、container_memory_rss指標的詳細分析

?? 建議先查看最后附錄內(nèi)容,了解cadvisor中每個指標的意義,有助于幫助下面內(nèi)容理解。

  • 容器當(dāng)前使用內(nèi)存量: container_memory_usage_bytes = total_cache + total_rss
  • 容器當(dāng)前使用緩存內(nèi)存: total_cache = total_inactive_file + total_active_file
  • container_memory_working_set_bytes=container_memory_usage_bytes - total_inactive_file為官方源代碼提供,帶入上面兩個公式,容器的工作集的等式可以拆解為:
container_memory_working_set_bytes 
= container_memory_usage_bytes - total_inactive_file
= total_cache + total_rss - total_inactive_file
= total_inactive_file + total_active_file + total_rss - total_inactive_file
= total_active_file + total_rss

即:container_memory_working_set_bytes = total_active_file+ total_rss,其中total_rss為應(yīng)用真實使用內(nèi)存量,正常情況下該指標數(shù)值穩(wěn)定,那為何該指標會持續(xù)上升而且一直維持很高呢?其實問題就出現(xiàn)在total_active_file上;

Linux系統(tǒng)為了提高文件讀取速率,會劃分出來一部分緩存內(nèi)存,即cache內(nèi)存,這部分內(nèi)存有個特點,當(dāng)應(yīng)用需要進行io操作時,會向Linux申請一部分內(nèi)存,這部分內(nèi)存歸屬于操作系統(tǒng),當(dāng)應(yīng)用io操作完畢后,操作系統(tǒng)不會立即回收;
當(dāng)操作系統(tǒng)認為系統(tǒng)剩余內(nèi)存不足時(判斷依據(jù)未深究),才會主動回收這部分內(nèi)存。

這部分內(nèi)存屬于操作系統(tǒng),jvm無任何管理權(quán)限,故也不會把這部分內(nèi)存計算到JVM中。container_memory_working_set_bytes指標升高一部分是應(yīng)用本身JVM內(nèi)存使用量增加,另一部分就是進行了io操作,total_active_file升高;該指標異常一般都是應(yīng)用進行了io相關(guān)操作。

模擬io操作

你可以在pod中創(chuàng)建一個大一點的日志文件,通過 cat 文件名 > /dev/null 將其加載到緩存內(nèi)存中,你會發(fā)現(xiàn)total_active_file升高并且不會被釋放;

刪除加載后的日志文件,模擬系統(tǒng)回收內(nèi)存操作,你會發(fā)現(xiàn)total_active_file降低;
或者執(zhí)行echo 3 > /proc/sys/vm/drop_caches命令,前提是用戶有足夠權(quán)限

三、合理監(jiān)控

關(guān)心應(yīng)用使用內(nèi)存大小用container_memory_rss;
排查pod為何被kill,關(guān)注container_memory_working_set_bytes、total_active_filetotal_inactive_file文章來源地址http://www.zghlxwxcb.cn/news/detail-608720.html

附錄 k8s pod container內(nèi)存指標說明

container_memory_cache表示容器使用的緩存內(nèi)存。
container_memory_mapped_file表示容器使用的映射文件內(nèi)存。
container_memory_rss表示容器的常駐內(nèi)存集(Resident Set Size),即實際使用的物理內(nèi)存量。
container_memory_swap表示容器使用的交換內(nèi)存量。
container_memory_usage_bytes表示容器當(dāng)前使用的內(nèi)存量,包括常駐內(nèi)存和緩存,**緩存部分往往會有很多處于空閑**。
container_memory_working_set_bytes表示容器的工作集,即容器當(dāng)前活躍使用的內(nèi)存量,不包括緩存。
container_memory_max_usage_bytes表示容器歷史上使用過的最大內(nèi)存量。
container_memory_failcnt表示容器內(nèi)存失敗計數(shù),即無法分配所需內(nèi)存的次數(shù)。
container_memory_failures_total表示容器內(nèi)存分配失敗的總次數(shù)。

到了這里,關(guān)于【k8s pod container內(nèi)存指標說明】的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • k8s pod “cpu和內(nèi)存“ 資源限制

    轉(zhuǎn)載用于收藏學(xué)習(xí):原文 為了保證充分利用集群資源,且確保重要容器在運行周期內(nèi)能夠分配到足夠的資源穩(wěn)定運行,因此平臺需要具備 Pod的資源限制的能力。 對于一個pod來說,資源最基礎(chǔ)的2個的指標就是:CPU和內(nèi)存。 Kubernetes提供了個采用requests和limits 兩種類型參數(shù)對資

    2024年02月13日
    瀏覽(30)
  • 持續(xù)集成部署-k8s-資源調(diào)度:HPA - Pod 基于負載指標自動水平擴容縮容

    首先我們找一個 Deployment 配置文件: nginx-deploy.yaml

    2024年02月07日
    瀏覽(30)
  • 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)
  • K8S 1.27 新特性 Pod 無需重啟調(diào)整CPU內(nèi)存資源

    如果您已經(jīng)部署了指定 CPU 或 Memory 資源的 Kubernetes pod,可能已經(jīng)注意到更改資源值涉及重新啟動 pod。直到現(xiàn)在,這一直是運行工作負載的破壞性操作。 在 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)
  • 記一次go應(yīng)用在k8s pod已用內(nèi)存告警不準確分析

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

    起因: 自監(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)存不足的概率極小,而且

    2024年01月18日
    瀏覽(24)
  • k8s搭建集群報錯failed to set up sandbox container “xxx“ network for pod “coredns-xxx“:networkPlugin cni fa

    k8s搭建集群報錯failed to set up sandbox container “xxx“ network for pod “coredns-xxx“:networkPlugin cni fa

    今天在搭建k8s集群時發(fā)現(xiàn)coredns一直處于containerCreating狀態(tài),如下圖所示: 到相應(yīng)的node節(jié)點上查看日志去排查問題: kubectl describe pods -n kube-system coredns-66bff467f8-n7q8f 發(fā)現(xiàn)報錯的日志如下圖: 我的是因為之前部署的時候選擇了calico網(wǎng)絡(luò)插件,這次啟動選的是flannel,導(dǎo)致node節(jié)點上

    2024年02月16日
    瀏覽(23)
  • k8s、pod

    k8s、pod

    k8s中的port【端口:30000-32767】 port :為Service 在 cluster IP 上暴露的端口 targetPort:對應(yīng)容器映射在 pod 端口上 nodePort:可以通過k8s 集群外部使用 node IP + node port 訪問Service containerPort:容器內(nèi)部使用的端口 k8s 集群內(nèi)部流程: 客戶端→clusterIP:port→通過 tagerport→pod IP:container

    2024年02月06日
    瀏覽(12)
  • k8s---pod進階

    k8s---pod進階

    //資源限制 當(dāng)定義 Pod 時可以選擇性地為每個容器設(shè)定所需要的資源數(shù)量。 最常見的可設(shè)定資源是 CPU 和內(nèi)存大小,以及其他類型的資源。 當(dāng)為 Pod 中的容器指定了 request 資源時,調(diào)度器就使用該信息來決定將 Pod 調(diào)度到哪個節(jié)點上。當(dāng)還為容器指定了 limit 資源時,kubelet 就會

    2024年02月06日
    瀏覽(25)
  • 【 K8S 】 Pod 進階

    當(dāng)定義 Pod 時可以選擇性地為每個容器設(shè)定所需要的資源數(shù)量。 最常見的可設(shè)定資源是 CPU 和內(nèi)存大小,以及其他類型的資源。 當(dāng)為 Pod 中的容器指定了 request 資源時,代表容器運行所需的最小資源量,調(diào)度器就使用該信息來決定將 Pod 調(diào)度到哪個節(jié)點上。當(dāng)還為容器指定了

    2024年02月13日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包