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

在Docker中運行Java:為了防止失敗,你應該知道的

開發(fā)
如果你嘗試在容器中運行Java程序,或者專注于Docker,你可能會遇到一些關于JVM和堆大小的問題。本篇文章將介紹如何解決這些問題。

如果你嘗試在容器中運行Java程序,或者專注于Docker,你可能會遇到一些關于JVM和堆大小的問題。本篇文章將介紹如何解決這些問題。

很多開發(fā)者會(或者應該)知道,當我們?yōu)檫\行在Linux容器(docker, rkt, runC, lxcfs, etc,)中的Java程序去設置JVM的GC、堆大小和運行時編譯器的參數(shù)時并沒有得到預想的效果。當我們通過“java -jar mypplication-fat.jar”的方式而不設置任何參數(shù)來運行一個Java應用時,JVM會根據(jù)自身的許多參數(shù)進行調整,以便在執(zhí)行環(huán)境中獲得最優(yōu)的性能。

本篇博客將通過簡單的方式向開發(fā)人員展示在將Java應用運行在Linux容器內時需要了解的內容。

我們傾向于認為容器可以像虛擬機一樣可以完整的定義虛擬機的CPU個數(shù)和虛擬機的內存。容器更像是一個進程級別的資源(CPU、內存、文件系統(tǒng)、網(wǎng)絡等)隔離。這種隔離是依賴于Linux內核中提供的一個 cgroups 的功能。

然而,一些可以從運行時環(huán)境中收集信息的應用程序在cgroups功能出現(xiàn)之前已經(jīng)存在。在容器中執(zhí)行命令 ‘top‘, ‘free‘, ‘ps’,也包括沒有經(jīng)過優(yōu)化的JVM是一個會受到高限制的Linux進程。讓我們來驗證一下。

問題

為了展示遇到的問題,我使用命令“docker-machine create -d virtualbox –virtualbox-memory ‘1024’ docker1024”在虛擬機中創(chuàng)建了一個具有1GB內存的Docker守護進程,接下來在3個Linux容器中執(zhí)行命令“free -h”,使其只有100MB的內存和Swap。結果顯示所有的容器總內存是995MB。

在Docker中運行Java:為了防止失敗,你應該知道的

即使是在 Kubernetes/OpenShift集群中,結果也是類似的。我在一個內存是15G的集群中也執(zhí)行了命令使得Kubernetes Pod有511MB的內存限制(命令:“kubectl run mycentos –image=centos -it –limits=’memory=512Mi’”),總內存顯示為14GB。

在Docker中運行Java:為了防止失敗,你應該知道的

想要知道為什么是這樣的結果,可以去閱讀此篇博客文章 “ Memory inside Linux containers – Or why don’t free and top work in a Linux container? ”

我們需要知道Docker參數(shù) (-m, –memory和–memory-swap)和Kubernetes參數(shù) (–limits)會讓Linux內核在一個進程的內存超出限制時將其Kill掉,但是JVM根本不清楚這個限制的存在,當超過這個限制時,不好的事情發(fā)生了!

為了模擬當一個進程超出內存限制時會被殺死的場景,我們可以通過命令“docker run -it –name mywildfly -m=50m jboss/wildfly”在一個容器中運行WildFly Application Server并且為其限制內存大小為50MB。在這個容器運行期間,我們可以執(zhí)行命令“docker stats”來查看容器的限制。

在Docker中運行Java:為了防止失敗,你應該知道的

但是過了幾秒之后,容器Wildfly將會被中斷并且輸出信息:*** JBossAS process (55) received KILL signal ***

通過命令 “docker inspect mywildfly -f ‘{{json .State}}'”可以查看容器被殺死的原因是發(fā)生了OOM(內存不足)。容器中的“state”被記錄為OOMKilled=true 。

在Docker中運行Java:為了防止失敗,你應該知道的

這將怎樣影響Java應用

在Docker宿主機中創(chuàng)建一個具有1GB內存的虛擬機(在之前使用命令已經(jīng)創(chuàng)建完畢 “docker-machine create -d virtualbox –virtualbox-memory ‘1024’ docker1024”) ,并且限制一個容器的內存為150M,看起來已經(jīng)足夠運行這個在 Dockerfile中設置過參數(shù)-XX: PrintFlagsFinal 和 -XX: PrintGCDetails的Spring Boot application了。這些參數(shù)使得我們可以讀取JVM的初始化參數(shù)并且獲得 Garbage Collection (GC)的運行詳細情況。

嘗試一下:

  1. $ docker run -it --rm --name mycontainer150 -p 8080:8080 -m 150M rafabene/java-container:openjdk 

我也提供了一個訪問接口“/api/memory/”來使用String對象加載JVM內存,模擬大量的消耗內存,可以調用試試:

  1. $ curl http://X 41X:8080/api/memory 

這個接口將會返回下面的信息 “Allocated more than 80% (219.8 MiB) of the max allowed JVM memory size (241.7 MiB)”

在這里我們至少有2個問題:

  • 為什么JVM會允許241.7MiB的最大內容?
  • 如果容器已經(jīng)限制了內存為150MB,為什么允許Java分配內存到220MB?

首先,我們應該重新了解在 JVM ergonomic page 中所描述的 “maximum heap size”的定義,它將會使用1/4的物理內存。JVM并不知道它運行在一個容器中,所以它將被允許使用260MB的最大堆大小。通過添加容器初始化時的參數(shù)-XX: PrintFlagsFinal,我們可以檢查這個參數(shù)的值。

 

  1. $ docker logs mycontainer150|grep -i MaxHeapSize  
  2. uintx MaxHeapSize := 262144000 {product} 

其次,我們應該理解當在docker命令行中設置了 “-m 150M”參數(shù)時,Docker守護進程會限制RAM為150M并且Swap為150M。從結果上看,一個進程可以分配300M的內存,解釋了為什么我們的進程沒有收到任何從Kernel中發(fā)出的退出信號。

更多的關于Docker命令中內存限制 (–memory)和Swap (–memory-swap)的差別可以參考 這里 。

更多的內存是解決方案嗎?

開發(fā)者如果不理解問題可能會認為運行環(huán)境中沒有為JVM提供足夠的內存。通常的解決對策就是為運行環(huán)境提供更多的內存,但是實際上,這是一個錯誤的認識。

假如我們將Docker Machine的內存從1GB提高到8GB(使用命令 “docker-machine create -d virtualbox –virtualbox-memory ‘8192’ docker8192”),并且創(chuàng)建的容器從150M到800M:

  1. $ docker run -it --name mycontainer -p 8080:8080 -m 800M rafabene/java-container:openjdk 

此時使用命令 “curl http://X 58X:8080/api/memory” 還不能返回結果,因為在一個擁有8GB內存的JVM環(huán)境中經(jīng)過計算的MaxHeapSize大小是2092957696(~ 2GB)。可以使用命令“docker logs mycontainer|grep -i MaxHeapSize”查看。

在Docker中運行Java:為了防止失敗,你應該知道的

應用將會嘗試分配超過1.6GB的內存,當超過了容器的限制(800MB的RAM 800MB的Swap),進程將會被kill掉。

很明顯當在容器中運行程序時,通過增加內存和設置JVM的參數(shù)不是一個好的方式。當在一個容器中運行Java應用時,我們應該基于應用的需要和容器的限制來設置最大堆大小(參數(shù):-Xmx)。

解決方案是什么?

在Dockerfile中稍作修改,為JVM指定擴展的環(huán)境變量。修改內容如下:

  1. CMD java -XX: PrintFlagsFinal -XX: PrintGCDetails $JAVA_OPTIONS -jar java-container.jar 

現(xiàn)在我們可以使用JAVA_OPTIONS的環(huán)境變量來設置JVM Heap的大小。300MB看起來對應用足夠了。稍后你可以查看日志,看到Heap的值是 314572800 bytes ( 300MBi)。

Docker下,可以使用“-e”的參數(shù)來設置環(huán)境變量進行切換。

 

  1. $ docker run -d --name mycontainer8g -p 8080:8080 -m 800M -e JAVA_OPTIONS='-Xmx300m' rafabene/java-container:openjdk-env  
  2. $ docker logs mycontainer8g|grep -i MaxHeapSize  
  3. uintx MaxHeapSize := 314572800 {product} 

在Kubernetes中,可以使用“–env=[key=value]”來設置環(huán)境變量進行切換:

 

 

  1. $ kubectl run mycontainer --image=rafabene/java-container:openjdk-env --limits='memory=800Mi' --env="JAVA_OPTIONS='-Xmx300m'"   
  2. $ kubectl get pods   
  3. NAME READY STATUS RESTARTS AGE    
  4. mycontainer-2141389741-b1u0o 1/1 Running 0 6s    
  5. $ kubectl logs mycontainer-2141389741-b1u0o|grep MaxHeapSize    
  6. uintx MaxHeapSize := 314572800 {product}  

還能再改進嗎?

有什么辦法可以根據(jù)容器的限制來自動計算Heap的值?

事實上如果你的基礎Docker鏡像使用的是由Fabric8提供的,那么就可以實現(xiàn)。鏡像fabric8/java-jboss-openjdk8-jdk使用了腳本來計算容器的內存限制,并且使用50%的內存作為上限。也就是有50%的內存可以寫入。你也可以使用這個鏡像來開/關調試、診斷或者其他更多的事情。讓我們看一下一個Spring Boot應用的 Dockerfile :

 

  1. FROM fabric8/java-jboss-openjdk8-jdk:1.2.3  
  2. ENV JAVA_APP_JAR java-container.jar  
  3. ENV AB_OFF true  
  4. EXPOSE 8080  
  5. ADD target/$JAVA_APP_JAR /deployments/ 

就這樣!現(xiàn)在,不管容器的內存限制如何,我們的Java應用將在容器中自動的調節(jié)Heap大小,而不是再根據(jù)宿主機來設置。

 

在Docker中運行Java:為了防止失敗,你應該知道的

總結到目前為止,Java JVM還不能意識到其是運行在一個容器中 — 某些資源在內存和CPU的使用上會受到限制。因此,你不能讓JVM自己來設置其認為的最優(yōu)的最大Heap值。

一個解決對策是使用Fabric8作為基礎鏡像,它可以意識到應用程序運行在一個受限制的容器中,并且在你沒有做任何事情的情況下,可以自動的調整最大Heap的值。

在JDK9中已經(jīng)開始進行嘗試在容器 (i.e. Docker)環(huán)境中為JVM提供cgroup功能的內存限制。

責任編輯:未麗燕 來源: DockOne
相關推薦

2017-06-06 11:59:26

Docker工具容器

2017-07-24 14:59:31

ERP軟件連續(xù)性

2024-11-28 08:54:19

GolangGo變量

2025-10-10 01:55:00

GolangnoCopy函數(shù)

2019-06-03 08:04:43

Apache服務器命令

2011-03-25 15:56:58

2010-08-09 13:20:36

Flex

2013-01-09 13:55:43

2020-04-29 14:30:35

HTTPHTTPS前端

2020-11-16 09:15:07

MYSQL

2021-06-07 12:40:34

Python代碼陷阱

2022-01-04 10:10:34

Garuda LinuArch LinuxLinux

2022-11-04 08:22:14

編譯代碼C語言

2017-10-12 10:20:13

服務器運行壽命

2020-10-13 14:15:22

HTTPHTTP請求方法

2013-06-28 14:09:33

PHP庫

2023-05-04 16:10:13

緩存前端

2018-08-23 09:33:12

2021-10-25 14:55:38

Linux技巧命令

2016-09-19 13:52:26

Javascript跨域前端
點贊
收藏

51CTO技術棧公眾號

亚洲精美色品网站| 中国色在线观看另类| 国内精品免费午夜毛片| 国产精品无码永久免费不卡| 香蕉久久免费电影| 亚洲色图在线视频| 国产精品制服诱惑| av首页在线观看| 亚洲五月综合| 国产丝袜一区视频在线观看| 亚洲视频一二三四| av小说在线播放| 国产精品素人一区二区| 成人18视频| 中文在线免费看视频| 91超碰国产精品| 亚洲精品一区二区三区婷婷月| 182午夜在线观看| 超碰在线99| 中文字幕五月欧美| 久久久久久久久久久久久久久久av| 亚洲字幕av一区二区三区四区| 在线日韩视频| 色偷偷噜噜噜亚洲男人| 性欧美成人播放77777| 国产精品久久久久av电视剧| 亚洲午夜激情av| 制服国产精品| 91精彩在线视频| 91视频91自| 亚洲综合色av| 一级黄色a视频| 久久亚洲风情| 91高潮在线观看| 麻豆成人在线视频| 99热精品久久| 中文字幕亚洲欧美在线| 中国美女乱淫免费看视频| 亚洲天堂中文字幕在线观看| 欧美日韩大陆一区二区| 国产精品免费成人| 欧美aa免费在线| 亚洲一区欧美一区| 超碰超碰超碰超碰超碰| 成人日批视频| 亚洲欧美日韩在线| 自拍亚洲欧美老师丝袜| www日韩tube| 久久精品视频一区二区三区| 精品日韩欧美| 天堂中文在线资| 99re这里只有精品6| 国产日韩欧美一区二区| 粉嫩av一区二区夜夜嗨| 成人午夜在线免费| 国产亚洲一区二区三区在线播放| 亚洲精品911| 国产成人亚洲综合a∨猫咪| 成人写真福利网| 99久久精品免费看国产交换| 狠狠色狠狠色合久久伊人| 国产日韩一区在线| 一级片免费网站| 国模大尺度一区二区三区| 成人精品久久av网站| 在线视频 91| 精品亚洲成a人| 91超碰在线免费观看| 国产成人av免费看| 粉嫩av一区二区三区在线播放| 91久久在线播放| 性欧美18一19性猛交| 岛国一区二区在线观看| 久久久久网址| www.久久热.com| ●精品国产综合乱码久久久久| 这里只有精品66| 三级资源在线| 日韩欧美在线免费| 超碰成人在线播放| 一区二区三区四区高清视频 | av中文字幕观看| 国产不卡高清在线观看视频| 好吊妞www.84com只有这里才有精品| 手机看片1024国产| 国产欧美日韩综合| 国产精品夜夜夜爽张柏芝| 欧美人与性动交α欧美精品图片| 亚洲mv在线观看| 欧美伦理视频在线观看| 自拍偷拍亚洲图片| 精品久久久久久久久久久久久久久 | 久久成人免费网| aaa级精品久久久国产片| 视频一区二区在线播放| 国产精品欧美极品| 成人免费性视频| 快播电影网址老女人久久| 在线不卡中文字幕播放| 在线视频 日韩| 欧洲毛片在线视频免费观看| 欧美精品在线免费| 无码人妻精品一区二区蜜桃色欲| 国产在线视视频有精品| 欧美日本韩国国产| 伊人精品影院| 欧美在线制服丝袜| 喷水视频在线观看| 亚洲一区二区三区无吗| 日本亚洲欧美三级| 亚洲第一第二区| 国产精品二区一区二区aⅴ污介绍| 和岳每晚弄的高潮嗷嗷叫视频| 嫩草伊人久久精品少妇av杨幂| 精品国产成人系列| 成年人二级毛片| 媚黑女一区二区| 国产伦精品一区二区三区照片| 最新国产在线观看| 日韩欧美在线视频免费观看| 韩国三级视频在线观看| 久久综合国产| 国产精品91免费在线| 午夜久久久久久噜噜噜噜| 国产精品乱码一区二三区小蝌蚪| 成人毛片一区二区| 日韩在线视频一区二区三区| 精品国产自在精品国产浪潮| 久久久久久久久黄色| av在线播放不卡| 日本免费a视频| 欧美经典一区| 久久在精品线影院精品国产| 国产成人精品亚洲| 久久精品欧美一区二区三区麻豆| 大j8黑人w巨大888a片| 一区二区网站| 欧美精品第一页在线播放| 国产欧美日韩综合精品一区二区三区| 欧美国产日韩精品免费观看| 欧美aⅴ在线观看| 露出调教综合另类| 韩国三级日本三级少妇99| www.狠狠干| 一区二区三区精品久久久| 91精品999| 亚洲成人三区| 99久久国产免费免费| h片在线观看网站| 日韩午夜在线播放| 青娱乐国产精品| 国产91在线|亚洲| 免费拍拍拍网站| 伦理一区二区| 日韩免费观看av| av在线免费观看网| 欧美久久久久久久久久| 97在线观看视频免费| 国产一区视频网站| 女人床在线观看| 91蜜桃臀久久一区二区| 97在线看福利| 男人天堂网在线| 精品视频在线看| 成人一级黄色大片| 国产成人精品综合在线观看 | 亚洲综合久久av一区二区三区| 久久av中文字幕片| 欧洲美女和动交zoz0z| 久久综合偷偷噜噜噜色| 欧美激情乱人伦| 天堂av电影在线观看| 色狠狠av一区二区三区| 丁香六月激情综合| 国产伦精品一区二区三区在线观看| 影音先锋成人资源网站| 狼人精品一区二区三区在线 | 精品国产不卡一区二区| 久久久久久久国产精品| 日本午夜在线| 欧美精品久久天天躁| 久久久全国免费视频| 2020日本不卡一区二区视频| 国产精品一区二区小说| 欧美片第1页综合| 久久久精品动漫| 欧美日韩破处视频| 久久久久久久久久久av| 看电影就来5566av视频在线播放| 欧美日韩成人激情| 日本视频www| 国产精品黄色在线观看| 亚洲精品激情视频| 日本 国产 欧美色综合| 大陆av在线播放| 日韩精品诱惑一区?区三区| 99久久国产免费免费| 日韩大尺度黄色| 欧美精品免费在线| 成人亚洲综合天堂| 亚洲成**性毛茸茸| 亚洲视频在线观看免费视频| 亚洲第一狼人社区| 免费看的黄色录像| xfplay精品久久| 欧美熟妇另类久久久久久多毛| 亚洲自啪免费| 成人av在线播放观看| 国产一区二区三区四区大秀| 国产91社区| 成人一级视频| 茄子视频成人在线| 后进极品白嫩翘臀在线播放| 中文在线不卡视频| 色视频精品视频在线观看| 日韩欧美亚洲一区二区| 中文字幕一区二区三区免费看| 精品国产精品自拍| 九九热这里有精品视频| 欧美国产日韩精品免费观看| 黄色性生活一级片| 国产成人精品一区二区三区网站观看| 丝袜制服一区二区三区| 亚洲免费婷婷| 男人添女人下部高潮视频在观看| 中文一区一区三区免费在线观看| 先锋影音一区二区三区| 久久最新网址| 久久久久久国产精品免费免费| 亚洲视频一起| 99在线国产| 综合久久成人| 999视频在线观看| 国产亚洲精aa在线看| 国产精品网址在线| 国产黄色一区| 国产美女搞久久| 成人在线高清| 国产精品一区久久久| 色8久久影院午夜场| 日韩av电影在线免费播放| 妞干网免费在线视频| 韩国日本不卡在线| 成人一级福利| 2019中文字幕免费视频| 国产在线美女| 18性欧美xxxⅹ性满足| 国产社区精品视频| 97视频在线播放| 亚洲欧美韩国| 国产精品久久久久久婷婷天堂 | 一区二区三区福利| 人人干视频在线| 在线一区免费观看| 久久精品.com| 爽爽淫人综合网网站| 精品久久久噜噜噜噜久久图片| 久久国产高清| 亚洲欧洲日本精品| 国内成人精品2018免费看| 一二三av在线| 成人午夜免费av| 色天使在线视频| 国产三区在线成人av| 日韩一区二区三区四区视频| 日韩毛片视频在线看| 国产精品白嫩白嫩大学美女| 亚洲国产sm捆绑调教视频| 天天综合网入口| 色综合天天在线| 一区二区三区亚洲视频| 日韩欧美www| 嫩草在线播放| 久久夜色精品国产亚洲aⅴ| 国语对白在线刺激| 国产91精品网站| 97精品资源在线观看| 99在线免费观看视频| 久久不见久久见国语| 在线视频不卡一区二区三区| 欧美jjzz| av片中文字幕| 国产美女精品在线| jizz日本免费| 1区2区3区欧美| 久久免费激情视频| 欧美精品久久99久久在免费线| www.黄色av| 亚洲午夜精品久久久久久性色| 欧美高清视频| …久久精品99久久香蕉国产| 亚洲精品大片| 久久大片网站| 欧美国产激情| 手机在线看福利| 成+人+亚洲+综合天堂| 国产黄色大片免费看| 亚洲综合一二区| 中文字幕欧美在线观看| 亚洲第五色综合网| 成人在线免费电影| 4p变态网欧美系列| 亚洲精品观看| 亚洲高清在线观看一区| 极品尤物久久久av免费看| 日本国产一级片| 国产亚洲福利社区一区| 国产小视频在线看| 欧美日产国产精品| 国产在线一二| 91禁外国网站| 亚洲精品国产九九九| 亚洲在线色站| 日韩激情视频在线观看| www国产视频| 亚洲乱码中文字幕| 在线观看一二三区| 亚洲人成绝费网站色www | 国产精品www| 欧美天堂社区| 一卡二卡三卡视频| 国产剧情在线观看一区二区| a级片在线观看| 欧美性xxxxxxx| 日本波多野结衣在线| 欧美成人三级视频网站| 国产69精品久久| 日韩电影免费观看在| 亚洲一区黄色| 人妻av一区二区| 亚洲一区中文在线| 国产欧美综合视频| 日韩视频在线免费| 国产成人精品一区二区三区免费| 久久香蕉综合色| av成人天堂| 日韩免费高清一区二区| 亚洲国产成人tv| www.午夜激情| 欧美另类精品xxxx孕妇| 日韩一区二区三区色| 亚洲激情免费视频| 国产传媒一区在线| 麻豆疯狂做受xxxx高潮视频| 日韩欧美中文一区二区| 成人a在线视频免费观看| 91免费视频国产| 亚洲一级毛片| 精品无码av一区二区三区| 亚洲永久精品国产| 欧美一级视频免费| 高清亚洲成在人网站天堂| 黄色免费大全亚洲| 人妻av中文系列| 97超碰欧美中文字幕| 日本午夜视频在线观看| 亚洲乱码一区av黑人高潮| 中文字幕乱码中文乱码51精品| 你懂的网址一区二区三区| 天堂午夜影视日韩欧美一区二区| 免费福利视频网站| 欧美日韩国产首页在线观看| 中文字幕在线播放网址| av一区二区三区免费| 亚洲视频www| 国产精品美女高潮无套| 欧美精品一卡两卡| 性爱视频在线播放| 国产亚洲一区二区三区在线播放 | 亚洲欧美一区二区三区国产精品 | 日本a在线天堂| 成人精品视频一区二区三区 | 欧美久久婷婷综合色| 午夜dj在线观看高清视频完整版| 国产乱码精品一区二区三区中文 | 97久久视频| 久久黄色一级视频| 欧美日韩性视频在线| jizz在线观看| av一区二区三区在线观看| 国产精品人人爽人人做我的可爱| 日本理论中文字幕| 欧美成人综合网站| 午夜精品成人av| 在线观看av的网址| 国产天堂亚洲国产碰碰| www.午夜激情| 国产精品免费久久久| 亚洲婷婷在线| 日韩影视一区二区三区| 日韩精品影音先锋| 香蕉成人影院| 日本手机在线视频| 国产精品亲子伦对白| 图片区 小说区 区 亚洲五月| 国产美女搞久久| 久久久精品午夜少妇| 青青草激情视频| 亚洲最新av网址| 动漫3d精品一区二区三区乱码|