精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日韩亚洲91| 国产精品一色哟哟哟| 亚洲欧洲在线观看| 四季av一区二区三区| a篇片在线观看网站| av一区二区不卡| 国产精品老牛影院在线观看| 欧美日韩在线观看免费| 亚洲香蕉视频| 欧美一区二区二区| 超碰97人人射妻| 中文在线字幕免费观看| 久久亚洲一区二区三区明星换脸| 91在线高清免费观看| 国产成人精品片| 国产精品精品| 日韩电影中文 亚洲精品乱码| 中文字幕第100页| av资源一区| 专区另类欧美日韩| 日韩免费av一区二区三区| 丰满人妻一区二区三区无码av| 日韩黄色免费电影| 性视频1819p久久| 久久免费看少妇高潮v片特黄 | 99精品视频免费观看视频| 国产亚洲综合久久| 免费在线观看成年人视频| 欧美第一在线视频| 欧美三级电影一区| 亚洲中文字幕无码不卡电影| 98色花堂精品视频在线观看| 亚洲人精品午夜| 手机成人在线| 外国精品视频在线观看| 国产精品亚洲一区二区三区在线| 欧美专区在线视频| 国产精品99无码一区二区| 91精品国产视频| 日韩一区二区三区xxxx| 丰腴饱满的极品熟妇| 日韩美女精品| 亚洲精品国产拍免费91在线| 婷婷五月精品中文字幕| 久久视频免费| 日韩亚洲欧美中文三级| 性欧美在线视频| 国产亚洲欧美日韩精品一区二区三区| 色悠久久久久综合欧美99| 国产精品333| 日韩在线伦理| 狠狠躁夜夜躁人人躁婷婷91 | 久久aⅴ国产欧美74aaa| 国产精品青草久久久久福利99| 怡红院av久久久久久久| 日韩中文字幕亚洲一区二区va在线| 26uuu国产精品视频| 日本免费观看视| 国产午夜久久| 国产成人av网址| 波多野结衣人妻| 免费一级欧美片在线观看| 国产精品午夜视频| 国产精品毛片久久久久久久av| 乱一区二区av| 亚洲综合一区二区不卡| www.激情五月| 国产99精品在线观看| 国产精品国产三级国产专区53| 免费av网站观看| 久久综合久久综合久久综合| 欧美一区视久久| 午夜伦全在线观看| 一区二区三区资源| 黄色激情在线视频| 男人天堂视频在线观看| 色婷婷av一区二区三区之一色屋| 日本女优爱爱视频| **日韩最新| 亚洲电影成人av99爱色| 三级网站在线免费观看| 91精品婷婷色在线观看| 久久久久一本一区二区青青蜜月| 亚洲黄色小说图片| 免费成人av在线| 9a蜜桃久久久久久免费| 午夜福利一区二区三区| 国产午夜精品理论片a级大结局| 亚洲国产精品123| 怡红院av在线| 色美美综合视频| 国产美女视频免费看| 欧美一性一交| 日韩亚洲欧美成人| 尤物视频在线观看国产| 久久99精品一区二区三区三区| 成人18视频| 国产youjizz在线| 亚洲国产日韩综合久久精品| 嫩草av久久伊人妇女超级a| 中文成人激情娱乐网| 亚洲精品久久久久国产| 美女福利视频网| 99视频+国产日韩欧美| 国产欧美精品日韩| 香蕉视频免费在线看| 中文字幕色av一区二区三区| 一区二区传媒有限公司| 亚洲性视频在线| 国产亚洲精品久久久久久| 国产亚洲欧美久久久久| 日本三级亚洲精品| 精品在线视频一区二区| av香蕉成人| 欧洲色大大久久| 你懂的在线观看网站| 欧美激情国产在线| 日本久久91av| 少妇高潮一区二区三区69| 亚洲欧美在线另类| 国产又黄又猛又粗| 亚洲精华一区二区三区| 欧美激情亚洲国产| 国产一区二区网站| 中文字幕av不卡| www日韩视频| 另类尿喷潮videofree| 欧美大片在线看| 国产日韩在线观看一区| 国产精品视频yy9299一区| 国产精品亚洲a| 牲欧美videos精品| 97久久精品人搡人人玩| 亚洲av永久无码国产精品久久 | 黄色片视频网站| 国产91丝袜在线播放0| 99亚洲精品视频| 日本免费在线一区| 色久欧美在线视频观看| 最近中文字幕在线视频| 国产欧美日韩另类视频免费观看| a√天堂在线观看| 欧美重口另类| 7m精品福利视频导航| 头脑特工队2在线播放| 欧美日韩亚洲精品内裤| 800av在线播放| 亚洲精品系列| 久久久亚洲综合网站| 国产美女高潮在线| 亚洲精品久久久久久久久久久久| 国产精品白浆一区二小说| 成人激情黄色小说| 欧美日韩成人免费视频| 亚洲精品**不卡在线播he| 欧美重口另类videos人妖| 男操女在线观看| 色先锋资源久久综合| www.av天天| 捆绑紧缚一区二区三区视频| 视频一区在线免费观看| 日韩三级成人| 欧美日本精品在线| 欧美一级特黄aaaaaa| 精品久久久久久中文字幕| 97人妻精品一区二区免费| 日本欧美在线看| 中文字幕一区二区三区四区五区六区 | 九色91porny| 伊人成人在线视频| 欧美精品七区| 视频91a欧美| 久久91精品国产91久久久| 黄色一级a毛片| 色综合久久综合网97色综合 | 凹凸成人精品亚洲精品密奴| 国产视频观看一区| 午夜成年人在线免费视频| 亚洲国产精品小视频| 欧美精品一二三四区| 亚洲国产精华液网站w| 毛片毛片毛片毛片毛| 国产日韩欧美一区二区三区在线观看 | 午夜精品国产精品大乳美女| 欧美大片aaa| 3d动漫精品啪啪| 国产精品suv一区二区三区| 久久精品视频一区二区| 一级黄色大片儿| 在线一区欧美| 咪咪色在线视频| 亚洲精品小区久久久久久| 国产精品自产拍在线观看中文| 在线xxxx| 在线午夜精品自拍| 秋霞欧美在线观看| 欧美日韩视频在线一区二区| 久草福利资源在线观看| 国产网站一区二区| 在线观看一区二区三区视频| 日韩黄色免费电影| 日韩极品视频在线观看| 色婷婷亚洲mv天堂mv在影片| 精品国产乱码久久久久久郑州公司 | 性开放的欧美大片| 亚洲精品电影在线观看| 国产精品久久久久久在线| 欧美日韩国产丝袜另类| 日本黄色小说视频| 国产欧美精品一区二区色综合| 图片区偷拍区小说区| 毛片一区二区三区| 女人扒开屁股爽桶30分钟| 欧美激情 亚洲a∨综合| 亚洲巨乳在线观看| 亚洲香蕉视频| 精品一区二区日本| 91精品国产自产精品男人的天堂| 国产欧美精品在线| 日本电影欧美片| 97在线视频国产| 女囚岛在线观看| 欧美大尺度在线观看| 香蕉视频在线看| 在线观看久久久久久| 日韩电影网址| 日韩av在线免费播放| 亚洲国产精品欧美久久| 91麻豆精品91久久久久同性| 在线观看国产一区二区三区| 色婷婷精品大在线视频| 尤物视频在线观看国产| 亚瑟在线精品视频| 国产一级视频在线播放| 夜夜精品视频一区二区 | 粉嫩av一区| 亚洲精品中文字| 亚洲av成人精品毛片| 亚洲第一区第二区| 亚洲精品久久久久久久久久| 日韩网站在线看片你懂的| 国产精品久久免费| 69精品人人人人| 91影院在线播放| 欧美久久久久久久久久| 一区二区www| 在线成人小视频| 国产精品毛片久久久久久久av| 8x8x8国产精品| jizz中国女人| 精品国产精品网麻豆系列| 内射无码专区久久亚洲| 精品美女在线观看| 天堂在线资源库| 亚洲精品美女视频| 免费理论片在线观看播放老| 亚洲女人被黑人巨大进入| 国产香蕉在线| 中文字幕日韩av电影| 黄网站在线免费看| 美女久久久久久久| 黄色小说在线播放| 26uuu久久噜噜噜噜| 日韩精选视频| 91夜夜揉人人捏人人添红杏| 国产无遮挡裸体免费久久| 久久国产精品免费一区| 欧美日韩水蜜桃| 福利网在线观看| 亚洲高清久久| 人妻无码视频一区二区三区| 毛片一区二区三区| 亚洲成人福利视频| 91免费国产在线观看| 91狠狠综合久久久久久| 亚洲日本在线a| 99久在线精品99re8热| 欧美日免费三级在线| a级片免费视频| 亚洲免费一在线| 亚洲成人影院麻豆| 国自在线精品视频| 日韩制服一区| 成人动漫视频在线观看免费| 日韩欧美国产大片| 强伦女教师2:伦理在线观看| 亚洲黄色高清| 91插插插插插插插插| 大美女一区二区三区| 蜜桃av乱码一区二区三区| 亚洲理论在线观看| 黄色在线免费观看| 欧美一区日本一区韩国一区| 日本人妖在线| 欧美成人h版在线观看| 美女100%一区| 成人免费观看网站| 国产伦精品一区二区三区视频 | 首页欧美精品中文字幕| 丰满少妇一区二区三区专区| 久久综合久久综合亚洲| 一级黄色录像视频| 欧美在线免费播放| 人妻与黑人一区二区三区| 中文字幕国产亚洲2019| www.8ⅹ8ⅹ羞羞漫画在线看| 91精品久久久久| 免费看成人吃奶视频在线| 日本福利视频在线观看| 免费观看日韩电影| 免费看黄色aaaaaa 片| 亚洲免费在线观看| 中文字幕一区二区三区波野结| 日韩成人高清在线| 男女羞羞视频在线观看| 国产在线观看不卡| 九九综合在线| 欧美,日韩,国产在线| 国产剧情一区二区| 女人18毛片毛片毛片毛片区二| 色又黄又爽网站www久久| 少妇高潮一区二区三区99小说| 久久久久www| 免费一级欧美在线观看视频| 欧美三级网色| 亚洲欧美清纯在线制服| 国产精品久久久久久亚洲色| 夜夜精品视频一区二区 | 日韩影片中文字幕| 精品视频在线观看| 伊人狠狠色j香婷婷综合| 性一交一黄一片| 亚洲日本护士毛茸茸| 亚洲最新av网站| 中文字幕日韩欧美| 精品国产欧美日韩一区二区三区| 欧美高清性xxxxhd| 久久精品九九| 亚洲综合网在线观看| 一本色道久久综合精品竹菊| 亚州精品国产精品乱码不99按摩| 久久久噜噜噜久久久| 国产精品国产| 成年人午夜免费视频| 成人视屏免费看| 日本a在线观看| 亚洲成人xxx| a毛片不卡免费看片| 国产自产精品| 香蕉亚洲视频| 在线不卡av电影| 欧洲精品在线观看| 3p视频在线观看| 成人精品久久av网站| 欧美国产日本| 婷婷五月精品中文字幕| 欧美日韩国产精品一区二区不卡中文| 色偷偷在线观看| 日本中文字幕成人| 日韩精品一区二区久久| 久久久久久久久久毛片| 亚洲激情图片qvod| 女人18毛片一区二区三区| 91精品国产高清自在线| 国产日产精品一区二区三区四区的观看方式 | 永久免费观看片现看| 日韩一区二区三区四区五区六区 | 国产成人精品网站| 久久成人综合| www.欧美com| 日韩欧美在线一区| 思思99re6国产在线播放| 成人午夜激情免费视频| 亚洲区国产区| 免费网站在线高清观看| 欧美一区二区三区免费视频| 丁香影院在线| 日韩影片在线播放| 国产精品一区二区久久精品爱涩 | 欧美乱妇一区二区三区不卡视频 | 欧美在线不卡区| 久久亚洲专区| 国产+高潮+白浆+无码| 色婷婷亚洲婷婷| 青青草原国产在线| 欧美日本韩国在线| 国产一区欧美二区| 超碰超碰超碰超碰| 欧美不卡视频一区发布| 台湾亚洲精品一区二区tv| 中国黄色片一级| 欧美性猛交xxxxx水多| 哥也色在线视频| 欧美影视一区二区| 成人小视频在线观看| 久久精品国产亚洲av麻豆蜜芽| 欧美国产激情18| 欧美亚洲在线日韩| 色综合久久五月| 制服丝袜中文字幕亚洲|