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

云原生背景下如何配置 JVM 內(nèi)存

這篇具有很好參考價(jià)值的文章主要介紹了云原生背景下如何配置 JVM 內(nèi)存。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

前段時(shí)間業(yè)務(wù)研發(fā)反饋說是他的應(yīng)用內(nèi)存使用率很高,導(dǎo)致頻繁的重啟,讓我排查下是怎么回事;

在這之前我也沒怎么在意過這個(gè)問題,正好這次排查分析的過程做一個(gè)記錄。

首先我查看了監(jiān)控面板里的 Pod 監(jiān)控:

發(fā)現(xiàn)確實(shí)是快滿了,而此時(shí)去查看應(yīng)用的 JVM 占用情況卻只有30%左右;說明并不是應(yīng)用內(nèi)存滿了導(dǎo)致 JVM 的 OOM,而是 Pod 的內(nèi)存滿了,導(dǎo)致 Pod 的內(nèi)存溢出,從而被 k8s 殺掉了。

k8s 為了維持應(yīng)用的副本數(shù)量就得重啟一個(gè) Pod,所以看起來就是應(yīng)用運(yùn)行一段時(shí)間后就被重啟。



而這個(gè)應(yīng)用配置的是 JVM 8G,容器申請的內(nèi)存是16G,所以 Pod 的內(nèi)存占用看起來也就 50% 左右。

容器的原理

在解決這個(gè)問題之前還是先簡單了解下容器的運(yùn)行原理,因?yàn)樵?k8s 中所有的應(yīng)用都是運(yùn)行在容器中的,而容器本質(zhì)上也是運(yùn)行在宿主機(jī)上的一個(gè)個(gè)經(jīng)常而已。

但我們使用 Docker 的時(shí)候會(huì)感覺每個(gè)容器啟動(dòng)的應(yīng)用之間互不干擾,從文件系統(tǒng)、網(wǎng)絡(luò)、CPU、內(nèi)存這些都能完全隔離開來,就像兩個(gè)運(yùn)行在不同的服務(wù)器中的應(yīng)用。

其實(shí)這一點(diǎn)也不是啥黑科技,Linux 早就支持 2.6.x 的版本就已經(jīng)支持 namespace 隔離了,使用 namespace 可以將兩個(gè)進(jìn)程完全隔離。

僅僅將資源隔離還不夠,還需要限制對(duì)資源的使用,比如 CPU、內(nèi)存、磁盤、帶寬這些也得做限制;這點(diǎn)也可以使用 cgroups 進(jìn)行配置。

它可以限制某個(gè)進(jìn)程的資源,比如宿主機(jī)是 4 核 CPU,8G 內(nèi)存,為了保護(hù)其他容器,必須給這個(gè)容器配置使用上限:1核 CPU,2G內(nèi)存。

這張圖就很清晰的表示了 namespacecgroups 在容器技術(shù)中的作用,簡單來說就是:

  • namespace 負(fù)責(zé)隔離
  • cgroups 負(fù)責(zé)限制

在 k8s 中也有對(duì)應(yīng)的提現(xiàn):

  resources:
    requests:
      memory: 1024Mi
      cpu: 0.1
    limits:
      memory: 1024Mi
      cpu: 4

這個(gè)資源清單表示該應(yīng)用至少需要為一個(gè)容器分配一個(gè) 0.1 核和 1024M 的資源,CPU 的最高上限為 4 個(gè)核心。

不同的OOM

回到本次的問題,可以確認(rèn)是容器發(fā)生了 OOM 從而導(dǎo)致被 k8s 重啟,這也是我們配置 limits 的作用。

k8s 內(nèi)存溢出導(dǎo)致容器退出會(huì)出現(xiàn) exit code 137 的一個(gè) event 日志。

因?yàn)樵搼?yīng)用的 JVM 內(nèi)存配置和容器的配置大小是一樣的,都是8GB,但 Java 應(yīng)用還有一些非 JVM 管理的內(nèi)存,比如堆外內(nèi)存之類的,這樣很容易就導(dǎo)致容器內(nèi)存大小超過了限制的 8G 了,也就導(dǎo)致了容器內(nèi)存溢出。

云原生背景的優(yōu)化

因?yàn)檫@個(gè)應(yīng)用本身使用的內(nèi)存不多,所以建議將堆內(nèi)存限制到 4GB,這樣就避免了容器內(nèi)存超限,從而解決了問題。

當(dāng)然之后我們也會(huì)在應(yīng)用配置欄里加上建議:推薦 JVM 的配置小于容器限制的 2/3,預(yù)留一些內(nèi)存。

其實(shí)本質(zhì)上還是開發(fā)模式?jīng)]有轉(zhuǎn)變過來,以傳統(tǒng)的 Java 應(yīng)用開發(fā)模式甚至都不會(huì)去了解容器的內(nèi)存大小,因?yàn)橐郧按蠹业膽?yīng)用都是部署在一個(gè)內(nèi)存較大的虛擬機(jī)上,所以感知不到容器內(nèi)存的限制。

從而誤以為將兩者畫了等號(hào),這一點(diǎn)可能在 Java 應(yīng)用中尤為明顯,畢竟多了一個(gè) JVM;甚至在老版本的 JDK 中如果沒有設(shè)置堆內(nèi)存大小,無法感知到容器的內(nèi)存限制,從而自動(dòng)生成的 Xmx 大于了容器的內(nèi)存大小,以致于 OOM。文章來源地址http://www.zghlxwxcb.cn/news/detail-445036.html

到了這里,關(guān)于云原生背景下如何配置 JVM 內(nèi)存的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • JVM對(duì)象在堆內(nèi)存中是否如何分配?

    JVM對(duì)象在堆內(nèi)存中是否如何分配?

    1:指針碰撞:內(nèi)存規(guī)整的情況下 2:空閑列表: 內(nèi)存不規(guī)整的情況下 選擇那種分配方式 是有 java堆是否規(guī)整而決定的。而java堆是否規(guī)整是否對(duì)應(yīng)的垃圾回收器是否帶有空間壓縮整理的能力決定的。 因此當(dāng)使用Serial,ParNew等帶有壓縮整理過程的收集器時(shí),系統(tǒng)采用的分配算法是

    2024年02月16日
    瀏覽(22)
  • JVM堆內(nèi)存及參數(shù)配置 -Xss -Xms -Xmx -Xmn

    JVM堆內(nèi)存及參數(shù)配置 -Xss -Xms -Xmx -Xmn

    目錄 一 JVM堆內(nèi)存劃分 二 參數(shù)設(shè)置 邏輯上:新生代、老年代、永久代 ?物理上:新生代、 老年代 JDK1.7之前,有永久代,但已經(jīng)逐步“去永久代” JDK1.8之后,無永久代,由元空間替代 java堆從GC的角度,可以細(xì)分為: 新生代(Eden區(qū)、From Survivor區(qū)、To Survivor區(qū)) 老年代 1、新

    2024年02月05日
    瀏覽(20)
  • 【Jvm】性能調(diào)優(yōu)(拓展)Jprofiler如何監(jiān)控和解決死鎖、內(nèi)存泄露問題

    【Jvm】性能調(diào)優(yōu)(拓展)Jprofiler如何監(jiān)控和解決死鎖、內(nèi)存泄露問題

    Jprofilers是針對(duì)Java開發(fā)的 性能分析工具(免費(fèi)試用10天) , 可以對(duì)Java程序的 內(nèi)存,CPU,線程,GC,鎖 等進(jìn)行監(jiān)控和分析 , 本人IDEA版本是 2020.2.2 ,選擇的Jprofiler版本是 12.0 (早期的版本是純英文的, 12.0支持中文 ,安裝主要考慮是否與IDEA插件兼容即可) 進(jìn)入Jprofiler官網(wǎng)下載 - Jprofiler 版本這

    2024年02月19日
    瀏覽(24)
  • 【如何使用getrusage獲取消耗的CPU時(shí)間和進(jìn)程使用的最大物理內(nèi)存】

    getrusage 是一個(gè)用于獲取系統(tǒng)資源使用情況的函數(shù),它在 Unix 和類 Unix 系統(tǒng)中可用。要使用它,你需要包含 sys/resource.h 頭文件。下面是一個(gè)簡單的 C++ 示例程序,用于獲取進(jìn)程的資源使用情況: 使用 RUSAGE_SELF 常量,表示獲取當(dāng)前進(jìn)程的資源使用情況。你可以根據(jù)需要使用其他

    2023年04月23日
    瀏覽(17)
  • 文件上傳漏洞-upload靶場1-2關(guān) 通過筆記(如何區(qū)分前段驗(yàn)證和后端驗(yàn)證)

    文件上傳漏洞-upload靶場1-2關(guān) 通過筆記(如何區(qū)分前段驗(yàn)證和后端驗(yàn)證)

    upload是一個(gè)文件上傳的專用靶場,搭設(shè)也非常簡單,只需要把相關(guān)源碼文件放到apache的網(wǎng)站目錄下即可使用,或者去github下載一鍵綠化包進(jìn)行安裝鏈接如下: [Releases · c0ny1/upload-labs (github.com)] 下載后按照使用說明安裝即可,在安裝該靶場時(shí)最好安裝在虛擬機(jī)中,在此也不做過

    2024年02月11日
    瀏覽(19)
  • powershell@命令行提示符樣式配置自定義@pwsh重寫prompt顯示電量內(nèi)存時(shí)間等信息

    powershell@命令行提示符樣式配置自定義@pwsh重寫prompt顯示電量內(nèi)存時(shí)間等信息

    在 PowerShell 中,可以通過自定義 $prompt 變量來修改命令行提示符(Prompt)。以下是修改 PowerShell 提示符的一些基本方式: 簡單修改 : 你可以直接覆蓋 $prompt 變量的內(nèi)容,例如將其設(shè)為任何你想要的文字: 動(dòng)態(tài)提示符 : 利用 PowerShell 表達(dá)式來構(gòu)造動(dòng)態(tài)提示符,例如包含當(dāng)前

    2024年04月23日
    瀏覽(22)
  • java-JVM內(nèi)存區(qū)域&JVM運(yùn)行時(shí)內(nèi)存

    java-JVM內(nèi)存區(qū)域&JVM運(yùn)行時(shí)內(nèi)存

    JVM 內(nèi)存區(qū)域主要分為線程私有區(qū)域【程序計(jì)數(shù)器、虛擬機(jī)棧、本地方法區(qū)】、線程共享區(qū)域【JAVA 堆、方法區(qū)】、直接內(nèi)存。 線程私有數(shù)據(jù)區(qū)域生命周期與線程相同, 依賴用戶線程的啟動(dòng)/結(jié)束 而 創(chuàng)建/銷毀(在 HotspotVM 內(nèi), 每個(gè)線程都與操作系統(tǒng)的本地線程直接映射, 因此這部

    2024年02月12日
    瀏覽(20)
  • Java虛擬機(jī)快速入門 | JVM引言、JVM內(nèi)存結(jié)構(gòu)、直接內(nèi)存

    Java虛擬機(jī)快速入門 | JVM引言、JVM內(nèi)存結(jié)構(gòu)、直接內(nèi)存

    目錄 一:JVM引言 1. 什么是 JVM ? 2. 常見的 JVM 3. 學(xué)習(xí)路線 二:JVM內(nèi)存結(jié)構(gòu) 1. 程 序 計(jì) 數(shù) 器(PC Register) 2. 虛 擬 機(jī) 棧(JVM Stacks) 3. 本 地 方 法 棧(Native Method Stacks) 4. 堆(Heap) 5. 方 法 區(qū)(Method Area) 三:直接內(nèi)存 tips: 首先給大家推薦兩款好用的免費(fèi)軟件:動(dòng)圖抓取軟

    2024年02月05日
    瀏覽(19)
  • 【JVM】JVM內(nèi)存模型詳解

    【JVM】JVM內(nèi)存模型詳解

    一、JVM是什么? JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。由一套字節(jié)碼指令集、一組寄存器、一個(gè)棧、一個(gè)垃圾回收堆和一個(gè)存儲(chǔ)方法域等組成。JVM屏蔽了與操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需要生成在

    2024年02月14日
    瀏覽(24)
  • 【JVM】JVM內(nèi)存模型(詳細(xì))

    【JVM】JVM內(nèi)存模型(詳細(xì))

    JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。 Java中的所有類,必須被裝載到JVM中才能運(yùn)行,這個(gè)裝載工作是由jvm中的類裝載器完成的,.class這個(gè)類型可以

    2023年04月08日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包