成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為啥Java應(yīng)用遷移到容器后會(huì)出現(xiàn)OOM?

開(kāi)發(fā) 后端
JVM啟動(dòng)后默認(rèn)將最大使用堆大小設(shè)置為物理內(nèi)存的四分之一,譬如一臺(tái)普通的x86服務(wù)器配置128G內(nèi)存,那么啟動(dòng)在容器的內(nèi)啟動(dòng)JVM會(huì)將自己最大允許使用的堆內(nèi)存調(diào)整為32G內(nèi)存,如果容器啟動(dòng)時(shí)設(shè)置JVM只允許使用4G大小的內(nèi)存,那么當(dāng)JVM使用內(nèi)存超過(guò)4G后,將會(huì)導(dǎo)致內(nèi)核殺死JVM。

[[409725]]

JVM啟動(dòng)后默認(rèn)將最大使用堆大小設(shè)置為物理內(nèi)存的四分之一,譬如一臺(tái)普通的x86服務(wù)器配置128G內(nèi)存,那么啟動(dòng)在容器的內(nèi)啟動(dòng)JVM會(huì)將自己最大允許使用的堆內(nèi)存調(diào)整為32G內(nèi)存,如果容器啟動(dòng)時(shí)設(shè)置JVM只允許使用4G大小的內(nèi)存,那么當(dāng)JVM使用內(nèi)存超過(guò)4G后,將會(huì)導(dǎo)致內(nèi)核殺死JVM。測(cè)試代碼如下:

  1. import JAVA.util.ArrayList; 
  2. import JAVA.util.List; 
  3.  
  4. public class MemEat { 
  5.     public static void main(String[] args) { 
  6.         List l = new ArrayList<>(); 
  7.         while (true) { 
  8.             byte b[] = new byte[1048576]; 
  9.             l.add(b); 
  10.             Runtime rt = Runtime.getRuntime(); 
  11.             System.out.println( "free memory: " + rt.freeMemory() ); 
  12.         } 
  13.     } 

代碼非常簡(jiǎn)單,只是通過(guò)一個(gè)死循環(huán)不停地申請(qǐng)內(nèi)存,如果是在JAVA 8u111版本之前,直接通過(guò)docker run -m 100m限制使用100M內(nèi)存的情況下,運(yùn)行一段時(shí)間后直接被內(nèi)核殺死。輸出如下:

  1. # JAVA MemEat 
  2. . . . 
  3. free memory: 1307309488 
  4. free memory: 1306260896 
  5. free memory: 1305212304 
  6. free memory: 1304163712 
  7. free memory: 1303115120 
  8. Killed 

為了避免這種情況,可以通過(guò)“ -Xmx ”設(shè)置最大堆內(nèi)存后再次運(yùn)行。

  1. # JAVA -Xmx100m MemEat 
  2. . . . 
  3. free memory: 8382264 
  4. free memory: 7333672 
  5. free memory: 6285080 
  6. free memory: 5236488 
  7. Exception in thread "main" JAVA.lang.OutOfMemoryError: JAVA heap space MemEat.main(MemEat.JAVA:8) 

可以看到JVM由于堆內(nèi)存不足,自己退出了。這種在JVM添加參數(shù)的方式有個(gè)弊端:如果修改了容器的內(nèi)存限制,還需要調(diào)整啟動(dòng)參數(shù)。為此在JAVA 8u144版本之后添加了動(dòng)態(tài)調(diào)整的功能,能夠根據(jù)用戶(hù)設(shè)定的內(nèi)存限制動(dòng)態(tài)調(diào)整,啟動(dòng)參數(shù)如下:

  1. # JAVA -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap MemEat 

當(dāng)我們修改了內(nèi)存參數(shù)后JVM便可以隨之調(diào)整。JAVA對(duì)于容器的支持不斷增強(qiáng)到最新的JAVA 10版本后,已經(jīng)原生支持容器環(huán)境,無(wú)需添加任何參數(shù)。不僅如此,新版JAVA 10還支持CPU在容器內(nèi)動(dòng)態(tài)調(diào)整。如下所示JVM調(diào)整內(nèi)存最大堆:

  1. # docker  run -it -m 1024M --entrypoint bash openjdk:11-jdk    
  2. # java -XX:+PrintFlagsFinal -version | grep MaxHeapSize 
  3.   size_t MaxHeapSize = 268435456                

可以看到上面的最大堆調(diào)整到內(nèi)存限制的四分之一,而非物理內(nèi)存的四分之一。還可以支持CPU自適應(yīng),如下所示:

  1. # docker  run -it --CPUs 2 ---entrypoint bash openjdk:11-jdk 
  2. jshell> Runtime.getRuntime().availableProcessors() 
  3. $1 ==> 2 

可以看到通過(guò)JAVA的API成功地獲取到當(dāng)前設(shè)置的CPU個(gè)數(shù)。

如果是其他編程語(yǔ)言希望獲取到容器的CPU和內(nèi)存限制,可以通過(guò)容器內(nèi)的cgroup文件系統(tǒng),如獲取容器內(nèi)存的限制:

  1. # cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
  2. 104857600 

 【編輯推薦】

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2010-11-19 17:01:52

2020-09-02 07:20:48

KubernetesJava應(yīng)用程序容器

2022-02-15 09:36:13

容器應(yīng)用程序云服務(wù)

2010-08-19 16:25:04

DB2 CMO

2010-08-13 15:35:05

2010-10-21 13:14:35

2011-04-25 09:35:31

TwitterJava

2012-08-07 09:37:23

虛擬化

2019-01-07 08:10:54

微服務(wù)單體 Web

2018-07-04 14:17:10

微服務(wù)代碼開(kāi)發(fā)

2011-04-27 09:39:53

EclipseIntelliJ

2018-01-08 08:50:05

Linux內(nèi)核系統(tǒng)程序

2018-12-19 09:20:45

Linux遷移安裝軟件

2018-07-10 14:46:04

LinuxShellsudo

2010-09-29 11:06:21

活動(dòng)目錄OpenLDAP

2023-08-08 21:03:52

2014-12-10 11:13:41

谷歌微軟Windows應(yīng)用

2010-07-23 16:34:30

云計(jì)算廠商

2022-10-10 08:05:34

線程池OOM問(wèn)題

2016-10-26 16:44:44

WatchfinderAWS云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久精品一区二区三区四区 | 国产成人免费视频网站高清观看视频 | 日韩a v在线免费观看 | 99热热热热 | 久久成人精品视频 | 欧美日韩国产一区二区 | 在线国产视频 | 国产一区二区三区四区三区四 | 91成人精品 | h网站在线观看 | 国外成人在线视频网站 | 久久网亚洲| 爱操影视 | 男女国产视频 | 国产高清免费视频 | 伊人网站在线 | 亚洲 欧美 日韩 在线 | 国产欧美日韩视频 | 欧美综合一区 | 亚洲精品一区在线 | 久久精品久久久久久 | 成年人在线 | 欧美精品一区二区在线观看 | 欧美一区二区二区 | 午夜精品 | 美女操网站 | 亚洲欧美综合网 | 日韩在线免费视频 | 91久久精品一区二区二区 | 亚洲最新在线 | 久久久性色精品国产免费观看 | 免费久久99精品国产婷婷六月 | 日韩精品久久久 | 国产精品一区二区三区在线 | 在线视频91| 国产精品免费一区二区三区四区 | 国产网站久久 | 少妇精品久久久久久久久久 | 看a网站| 婷婷成人在线 | 精品中文字幕视频 |