精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Kubernetes 中的 Java 應用的內存調優

開發 后端
OpenJDK 17 包含 Java 虛擬機 (JVM) 使用的多個內存空間來管理 Java 應用程序的內存。了解這些不同的內存空間可以幫助開發人員針對 Kubernetes 環境優化其 Java 應用程序。

前言

在 Kubernetes 環境中運行 Java 應用程序雖然很常見,但往往也充滿各種問題,特別是在管理內存資源時。在本文中,我們將討論配置應用程序以優化 Kubernetes 環境中的內存使用并避免內存不足問題的一些最佳實踐。

OpenJDK 17 中的內存空間

OpenJDK 17 包含 Java 虛擬機 (JVM) 使用的多個內存空間來管理 Java 應用程序的內存。了解這些不同的內存空間可以幫助開發人員針對 Kubernetes 環境優化其 Java 應用程序。

圖片

Heap Memory-堆內存

堆內存會在Java運行時分配給對象(Object)或者JRE類。每當我們創建一個對象的時候,在堆內存中就會分配一塊儲存空間給這個對象。Java的垃圾回收機制就是運行在堆內存上的,用以釋放那些沒有任何引用指向自身的對象(不可達的對象。注意Java的垃圾回收也會處理幾個相互引用但沒有任何外部引用的對象)。任何在堆內存中分配的對象都有全局訪問權限,可以從應用的任何地方被引用。

堆內存是存儲Java應用程序創建的對象的地方。它是Java應用程序最重要的內存空間。在 OpenJDK 17 中,默認堆大小是根據可用物理內存計算的,并設置為可用內存的 1/4。

Young Generation-年輕代

對象被創建時,內存的分配首先發生在年輕代(大對象可以直接被創建在年老代),大部分的對象在創建后很快就不再使用,因此很快變得不可達,于是被年輕代的GC機制清理掉(IBM的研究表明,98%的對象都是很快消亡的),這個GC機制被稱為Minor GC或叫Young GC。注意,Minor GC并不代表年輕代內存不足,它事實上只表示在Eden區上的GC。

年輕代上的內存分配是這樣的,年輕代可以分為3個區域:Eden區(伊甸園,亞當和夏娃偷吃禁果生娃娃的地方,用來表示內存首次分配的區域,再貼切不過)和兩個存活區(Survivor 0 、Survivor 1)。

Old Generation-老一輩

對象如果在年輕代存活了足夠長的時間而沒有被清理掉(即在幾次Young GC后存活了下來),則會被復制到年老代,年老代的空間一般比年輕代大,能存放更多的對象,在年老代上發生的GC次數也比年輕代少。當年老代內存不足時,將執行Major GC,也叫 Full GC。  

可以使用-XX:+UseAdaptiveSizePolicy開關來控制是否采用動態控制策略,如果動態控制,則動態調整Java堆中各個區域的大小以及進入老年代的年齡。

如果對象比較大(比如長字符串或大數組),Young空間不足,則大對象會直接分配到老年代上(大對象可能觸發提前GC,應少用,更應避免使用短命的大對象)。用-XX:PretenureSizeThreshold來控制直接升入老年代的對象大小,大于這個值的對象會直接分配在老年代上。

可能存在年老代對象引用新生代對象的情況,如果需要執行Young GC,則可能需要查詢整個老年代以確定是否可以清理回收,這顯然是低效的。解決的方法是,年老代中維護一個512 byte的塊——”card table“,所有老年代對象引用新生代對象的記錄都記錄在這里。Young GC時,只要查這里即可,不用再去查全部老年代,因此性能大大提高。

Metaspace-元空間

非堆空間被 JVM 用于存儲元數據和類定義。在舊版本的 Java 中,它也稱為永久代 (PermGen)。在 OpenJDK 17 中,PermGen 空間已被新的 Metaspace 取代,其設計更加高效和靈活。

Code Cache-代碼緩存

簡而言之,JVM Code Cache (代碼緩存)是JVM存儲編譯成本機代碼的字節碼的區域。我們將可執行本機代碼的每個塊稱為nmethod。nmethod可能是一個完整的或內聯的Java方法。

即時(JIT)編譯器是代碼緩存區的最大消費者。這就是為什么一些開發人員將此內存稱為JIT代碼緩存。

Thread Stack Space-線程堆棧空間

Java程序中,每個線程都有自己的Stack Space(堆棧)。這個Stack Space不是來自Heap的分配。所以Stack Space的大小不會受到-Xmx和-Xms的影響,這2個JVM參數僅僅是影響Heap的大小。

Stack Space用來做方法的遞歸調用時壓入Stack Frame(棧幀)。所以當遞歸調用太深的時候,就有可能耗盡Stack Space,爆出StackOverflow的錯誤。

-Xss128k:設置每個線程的堆棧大小。JDK5.0以后每個線程堆 棧大小為1M,以前每個線程堆棧大小為256K。根據應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一 個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。

線程棧的大小是個雙刃劍,如果設置過小,可能會出現棧溢出,特別是在該線程內有遞歸、大的循環時出現溢出的可能性更大,如果該值設置過大,就有影響到創建棧的數量,如果是多線程的應用,就會出現內存溢出的錯誤。

Shared libs-共享庫

Java JVM 中的共享庫空間(也稱為共享類數據空間)是用于存儲共享類元數據和其他數據結構的內存空間。該內存空間在多個 Java 進程之間共享。這允許在同一臺機器上運行的各種 Java 應用程序共享類元數據和其他數據結構的相同副本。 

共享庫空間的目的是通過避免同一類元數據的重復副本來減少內存使用并提高性能。當多個 Java 進程使用相同的類元數據時,它們可以共享該元數據的相同副本,從而減少內存使用并縮短應用程序的啟動時間。

為什么要微調JVM的內存設置?

JVM 的默認行為會給 Kubernetes 帶來很多麻煩。正如我們之前看到的,堆默認設置為可用內存的 1/4。由于 JVM 將考慮 pod 可用的最大內存(有限制),因此堆的大小可能會比我們想要的大。此外,其他默認值將應用于其他空間,例如代碼緩存或元空間。 如果從 JVM 的角度來看最大可用內存,它將大于提供給 pod 的最大可用內存。這將導致應用程序出現許多內存不足的情況(在 Kubernetes 部分)。

避免Java應用程序在Kubernetes上出現OOM

大多數時候,都是為了微調 JVM。由于我們看到 JVM 涉及不同的內存空間,因此我們必須為每個空間設置特定的大小。這將幫助我們更精確地計算 pod 的內存限制。 以下是顯示每個內存空間可用選項的架構:

圖片

基本公式是:

Heap + Metaspace + Code Cache

意思是 :

-XmX + -XX:MaxMetaspaceSize + -XX:ReservedCodeCacheSize

由于線程的數量取決于應用程序的上下文,因此建議為此部分添加一些“緩沖”內存。默認情況下,線程堆棧最大設置為 1MB。

如果想處理來自 JVM 的堆轉儲,則需要添加堆的大小作為第二次可用的“額外”內存。 最后,設置 pod 限制的公式為:

(-XmX * 2) + -XX:MaxMetaspaceSize + -XX:ReservedCodeCacheSize + SomeBuffer

緩沖區部分取決于上下文,128 MB 應該可以開始。

Helm模板配置

既然有了公式,我們就可以使用一些 Helm 模板自動計算 pod 的請求和限制。為開發人員提供一個簡單的選項來設置不同的參數,而無需擔心 Pods 設置,這也是一個好的方式。 以下是默認值的示例:

jvm:
 garbageCollector: -XX:+UseG1GC
 # values in Mi
 memory:
   heap: 128
   metaspace: 256
   compressedClassSpaceSize: 64
   nonMethodCodeHeapSize: 5
   profiledCodeHeapSize: 48
   nonProfiledCodeHeapSize: 48
   buffer: 128

使用 Helper 來設置 JAVA_TOOL_OPTIONS :

{{/*
JVM customisation
*/}}
{{- define "chart.javaToolOptions" -}}
-Xms{{.Values.jvm.memory.heap}}m -Xmx{{.Values.jvm.memory.heap}}m -XX:MetaspaceSize={{.Values.jvm.memory.metaspace}}m -XX:MaxMetaspaceSize={{.Values.jvm.memory.metaspace}}m -XX:CompressedClassSpaceSize={{.Values.jvm.memory.compressedClassSpaceSize}}m -XX:+TieredCompilation -XX:+SegmentedCodeCache -XX:Nnotallow={{.Values.jvm.memory.nonMethodCodeHeapSize}}m -XX:ProfiledCodeHeapSize={{.Values.jvm.memory.profiledCodeHeapSize}}m -XX:Nnotallow={{.Values.jvm.memory.nonProfiledCodeHeapSize}}m -XX:ReservedCodeCacheSize={{ add .Values.jvm.memory.nonMethodCodeHeapSize .Values.jvm.memory.profiledCodeHeapSize .Values.jvm.memory.nonProfiledCodeHeapSize}}m{{- end -}}

在deployment.yaml文件中使用:

- name: {{ include "chart.name" . }}
         image: "{{ .Values.container.image.repository }}:{{ .Values.container.image.tag }}"
         env:
           - name: JAVA_TOOL_OPTIONS
             value: {{ include "chart.javaToolOptions" . }}

根據提供的參數自動配置內存請求和限制:

resources:
           limits:
             memory: {{ add .Values.jvm.memory.heap .Values.jvm.memory.heap .Values.jvm.memory.metaspace .Values.jvm.memory.nonMethodCodeHeapSize .Values.jvm.memory.profiledCodeHeapSize .Values.jvm.memory.nonProfiledCodeHeapSize .Values.jvm.memory.buffer | printf "%dMi"}}
             cpu: {{ .Values.container.resources.limits.cpu }}
           requests:
             memory: {{ add .Values.jvm.memory.heap .Values.jvm.memory.metaspace .Values.jvm.memory.nonMethodCodeHeapSize .Values.jvm.memory.profiledCodeHeapSize .Values.jvm.memory.nonProfiledCodeHeapSize | printf "%dMi"}}
             cpu: {{ .Values.container.resources.requests.cpu }}

結論

通過這一設置,我們將 Kubernetes 一側的 "內存不足"(Out Of Memory)錯誤數量降至零。現在,JVM 會在自己這邊發生 OOM,并生成堆轉儲,幫助開發人員分析內存。我們會發現是否有一些優化需要推進,或者我們是否需要增加堆大小(或其他內存空間)。

通過微調 JVM 內存配置,我們打破了惡性循環,即每次 OOM 都意味著為 pod 增加內存,以避免未來出現問題。我們能更好地了解每個內存空間,以及如何和何時增加它們。

圖片

每次調整都需要測試,因此我們建議使用一些工具,例如 Micrometer,來獲得有關 JVM 使用情況的一些指標。 而且,最重要的是,我們減少了應用程序的內存需求,并通過減少內存浪費事實上降低了基礎設施的成本!

責任編輯:姜華 來源: 新鈦云服
相關推薦

2010-09-25 15:52:27

JVM內存JVM

2009-07-09 09:47:26

Sun JVM

2014-12-19 11:07:40

Java

2023-02-10 09:28:23

優化工具

2011-03-10 14:40:54

LAMPMysql

2010-09-26 10:53:00

JVM內存調優設置

2020-08-10 17:49:25

JVM內存溢出

2019-07-17 15:45:24

Spark內存Java

2019-02-28 14:28:35

內存泄露tomcat調優

2023-11-23 09:26:50

Java調優

2023-10-13 12:28:38

2011-09-09 15:49:19

AIX操作系統JAVA

2012-01-10 14:35:08

JavaJVM

2023-05-29 07:43:32

JVM內存調優

2010-09-27 09:23:42

JVM調優

2011-03-14 13:38:40

LAMPApache調優

2025-06-09 02:10:00

2011-03-14 13:07:22

LAMPApache調優

2023-11-10 11:23:20

JVM內存

2011-03-21 17:07:37

點贊
收藏

51CTO技術棧公眾號

日日噜噜噜噜久久久精品毛片| 国产精品综合不卡av| 伊人五月天婷婷| 欧美卡一卡二| 91麻豆国产自产在线观看| 国产999在线观看| 免费黄色国产视频| 国产成人高清精品免费5388| 日韩欧美亚洲综合| 一区二区三区四区免费视频| 精品人妻少妇嫩草av无码专区| 99在线精品视频在线观看| 伊人精品在线观看| 一级日本黄色片| 中文字幕乱码中文乱码51精品| 欧美激情一区二区三区全黄| 91在线精品观看| av网站中文字幕| 亚洲精品成人| 亚洲另类激情图| 欧美日韩视频专区在线播放| 国产精品视频yy9099| √天堂中文官网8在线| 秋霞影视一区二区三区| 欧美疯狂性受xxxxx喷水图片| 欧美乱大交xxxxx潮喷l头像| 在线a免费看| 91在线精品一区二区三区| 91久久中文字幕| 69av视频在线观看| 伊人精品在线| 欧美成人免费一级人片100| 爱爱的免费视频| 51精品国产| 51久久夜色精品国产麻豆| 欧美成人黑人猛交| 2019中文字幕在线电影免费| 一区二区视频免费在线观看| a级黄色片网站| porn亚洲| 国产午夜三级一区二区三| 国新精品乱码一区二区三区18| 97人妻精品一区二区三区动漫| 美女爽到呻吟久久久久| 午夜精品蜜臀一区二区三区免费| 玖玖爱免费视频| 亚洲网色网站| 久久综合免费视频| 天堂а√在线中文在线鲁大师| 国内精品视频在线观看| 亚洲男人的天堂网站| yy6080午夜| 国产三级精品三级在线观看国产| 精品欧美一区二区三区精品久久| 午夜免费福利网站| 国产精品亚洲综合在线观看| 91精品视频网| 成人三级做爰av| 亚洲aⅴ在线观看| 制服丝袜专区在线| 亚洲日本在线视频观看| 中文字幕精品—区二区日日骚| melody高清在线观看| 国产喷白浆一区二区三区| 日本高清久久一区二区三区| 理论在线观看| 国产婷婷色一区二区三区在线| 欧美精品一区在线| 国产在线视频资源| 国产欧美中文在线| 亚洲精品无人区| 人人干在线视频| 亚洲少妇中出一区| 久久久久久久久久久综合| 午夜激情在线| 亚洲va欧美va人人爽| aa在线免费观看| 亚洲电影有码| 日韩视频一区在线观看| 国产女主播在线播放| 果冻天美麻豆一区二区国产| 亚洲黄色在线观看| 久久丫精品国产亚洲av不卡| 精品毛片免费观看| 久久精品久久久久久| 欧美精品一区二区成人| 日韩午夜免费| 国产精品久久久久久久天堂| 99久久国产免费| 97精品视频在线观看自产线路二| 色一情一乱一伦一区二区三区丨| 免费av网站在线看| 亚洲.国产.中文慕字在线| 不卡影院一区二区| 成人黄色91| 日韩av有码在线| 后入内射无码人妻一区| 国产综合视频| 国产精品老女人精品视频| 国产男男gay体育生白袜| caoporm超碰国产精品| 日韩免费电影一区二区三区| 成人影院www在线观看| 午夜精品福利在线| 日韩精品视频一二三| 69精品国产久热在线观看| 亚洲日本aⅴ片在线观看香蕉| 亚洲最大的黄色网址| 乱人伦精品视频在线观看| 91性高湖久久久久久久久_久久99| 午夜在线观看视频18| 亚洲欧洲韩国日本视频| 男人天堂网视频| 亚洲精品福利| 色偷偷av一区二区三区| 日本三级小视频| 国产mv日韩mv欧美| 中国成人在线视频| 蜜桃精品在线| 日韩精品欧美激情| 久久久久久免费观看| 久久精品国产亚洲一区二区三区| 狠狠色噜噜狠狠色综合久| 成人在线免费看黄| 欧美丝袜丝交足nylons图片| 久久久国产精品无码| 亚洲中无吗在线| 国产欧美精品一区二区三区介绍| 亚洲欧美日韩免费| 一区二区高清在线| 九色91porny| 五月开心六月丁香综合色啪| 国产精品成人久久久久| 日本午夜在线视频| 午夜视频一区二区三区| 日本精品一二三| 欧美激情五月| 成人久久18免费网站漫画| 黄色网页在线免费看| 欧美撒尿777hd撒尿| 国产小视频自拍| 日韩精品亚洲专区| 日韩欧美在线观看强乱免费| 超碰超碰人人人人精品| 日韩第一页在线| 久久一区二区三区视频| 99视频超级精品| 免费观看国产精品视频| 女同另类激情重口| 91超碰中文字幕久久精品| 天天av天天翘| 亚洲一区二区三区影院| 精人妻一区二区三区| 国内精品嫩模av私拍在线观看| 国产精品v欧美精品v日韩| 国内老司机av在线| 欧美精品一区二| 国产 日韩 欧美 在线| 91亚洲国产成人精品一区二区三 | 精品久久美女| 国产精品成人久久久久| 日本在线人成| 欧美一区二区久久久| 麻豆亚洲av熟女国产一区二| www.亚洲国产| 成年人在线看片| 日本黄色精品| 91色视频在线导航| 成年人国产在线观看| 亚洲国产日韩精品在线| 一二三区免费视频| 中文字幕日本不卡| 国产伦精品一区二区三区88av| 99视频一区| 午夜免费电影一区在线观看| 国产成年精品| 91国产美女在线观看| 成人高清免费观看mv| 欧美一区二区三区在线视频| 日韩精品一区二区三| 日本一区二区三区四区在线视频| 天天摸天天舔天天操| 亚洲精华国产欧美| 日韩精品久久久毛片一区二区| 成人国产精品一区二区网站| 91精品国产99| 欧美三级电影一区二区三区| 亚洲国产精彩中文乱码av| 最新中文字幕在线观看视频| 亚洲免费伊人电影| 一级性生活毛片| 国产自产v一区二区三区c| 免费 成 人 黄 色| 国产精品福利在线观看播放| 久久伊人资源站| 一区在线不卡| 日韩av日韩在线观看| caopeng在线| 亚洲最新中文字幕| 免费的黄色av| 欧美色国产精品| 国产成人在线播放视频| 亚洲视频香蕉人妖| www色com| 91蜜桃网址入口| 人妻精品久久久久中文字幕69| 亚洲尤物在线| 国产乱子伦精品视频| 不卡在线一区| 欧美精品一区二区三区四区五区| 一区二区日韩| 成人黄色中文字幕| 欧美专区福利免费| 久久男人资源视频| av免费网站在线| 中文字幕免费精品一区高清| 五月激情婷婷综合| 日韩片之四级片| 又污又黄的网站| 色综合久久综合网| 免费日韩一级片| 一区二区三区国产| 91麻豆精品成人一区二区| 国产欧美综合色| 欧美老熟妇乱大交xxxxx| 成人午夜视频在线| 极品人妻一区二区| 国产在线精品不卡| xxx国产在线观看| 青青草国产精品97视觉盛宴| 中文字幕日本最新乱码视频| 国内一区二区三区| 真人做人试看60分钟免费| 三区四区不卡| 亚洲ai欧洲av| 欧美肉体xxxx裸体137大胆| 免费中文日韩| 久久不见久久见国语| 久久99精品久久久久久青青日本| a级日韩大片| 国产经品一区二区| 99re8这里有精品热视频8在线| 亚洲最大福利网站| 亚洲视频精选| 99精品国产高清在线观看| 精品国产欧美| 成人动漫视频在线观看免费| jizzjizzjizz欧美| 国产一区二区精品免费| 欧美91在线| 欧美日韩国产高清视频| 久久综合欧美| 亚洲国产日韩欧美| 国产精品伦理久久久久久| ijzzijzzij亚洲大全| 综合久久一区| 国产日韩欧美精品在线观看| 夜夜嗨网站十八久久 | 羞羞的网站在线观看| 九九精品在线视频| 国产区美女在线| 26uuu亚洲伊人春色| 欧美成人黑人| 国产精品亚洲激情| 国产一区二区三区免费在线| 不卡视频一区| 神马影视一区二区| 亚洲午夜精品福利| 欧美一区不卡| 人妻av中文系列| 日韩电影在线免费观看| 国产视频在线视频| 国产又黄又大久久| 亚洲精品在线视频免费观看| 国产亚洲自拍一区| 神马久久精品综合| 性久久久久久久久久久久| 中文字幕国产在线观看| 欧美精品aⅴ在线视频| 亚洲AV无码精品国产| 精品性高朝久久久久久久| 自拍视频在线播放| 欧美激情视频三区| 视频在线日韩| 亚洲一区二区久久久久久久 | 日韩一区不卡| 在线中文字幕亚洲| 高清在线观看免费| 精品在线一区二区| 国产精品无码网站| 最好看的中文字幕久久| 国产91精品一区| 制服丝袜在线91| 欧美日本网站| 先锋影音国产精品| 一区二区三区欧美| 日本亚洲欧洲色α| 蜜芽在线免费观看| 国内精品免费午夜毛片| 国产精品亚洲d| av一区二区三区四区电影| 自拍亚洲一区| 国产内射老熟女aaaa| 天堂va蜜桃一区二区三区| 久久黄色一级视频| 中文字幕第一区二区| 日韩 欧美 亚洲| 欧美一级夜夜爽| 川上优的av在线一区二区| 午夜精品久久久久久久久久久久久| 国产精品久久久久久久久久齐齐| 高清免费日韩| 精品国产乱码久久久久久郑州公司 | 日韩欧美国产三级| 国产午夜精品一区理论片| 久久人人爽国产| 欧美电影在线观看一区| 亚洲日本japanese丝袜| 免费在线亚洲欧美| 91丨porny丨对白| 一二三区精品视频| 国产精品国产一区二区三区四区| 亚洲系列中文字幕| 中文字幕在线高清| 精品在线视频一区二区| 国产一区二区三区四区老人| 可以看污的网站| 欧美激情在线观看视频免费| 中文人妻av久久人妻18| 日韩精品视频免费专区在线播放| 黄色污污视频在线观看| a级国产乱理论片在线观看99| 91精品电影| 男女污污视频网站| 中文字幕视频一区| 91无套直看片红桃| 日韩在线高清视频| 祥仔av免费一区二区三区四区| 性欧美大战久久久久久久免费观看 | 国产成人精品久久二区二区91| 欧美日韩看看2015永久免费 | 中文字幕日韩在线视频| 在线视频超级| 欧美一区二区福利| 日本亚洲天堂网| 国产精品18在线| 777xxx欧美| 久久99亚洲网美利坚合众国| 99中文字幕| 99国产精品视频免费观看一公开 | 好吊操视频这里只有精品| 亚洲精品国产品国语在线app| 国产伦精品一区二区三区视频痴汉| 日韩一二三在线视频播| 精品一区91| 美女扒开大腿让男人桶| 99视频精品免费视频| 国产综合精品视频| 在线亚洲国产精品网| 日韩电影精品| 成人午夜免费在线视频| 成人av网在线| 午夜精品一区二| 久久伊人色综合| 激情亚洲另类图片区小说区| 国产午夜伦鲁鲁| 中文字幕不卡在线观看| 99精品在线看| 欧美性受xxxx白人性爽| 欧洲杯半决赛直播| 免费看黄色一级大片| 国产精品天天摸av网| 成人黄色在线观看视频| 91av中文字幕| 国产精品毛片一区二区在线看| 欧美一区二区三区影院| 精品久久久久久| av资源种子在线观看| 亚洲影影院av| 久久在线精品| 青青操视频在线播放| 国产偷亚洲偷欧美偷精品| 亚洲一区二区小说| 五十路熟女丰满大屁股| 国产欧美一区二区精品性色| 国产白浆在线观看| 国产99在线|中文| 国产精品hd| 91成人精品一区二区| 麻豆网在线观看| 国产日韩精品在线观看| 红桃视频国产一区| 欧美黄色激情视频| 日韩三级电影网址| 91天天综合| 日韩小视频在线播放| 中文字幕一区日韩精品欧美| 婷婷五月综合久久中文字幕| 国产欧美精品一区二区三区-老狼| 亚洲日产国产精品|