Docker 內存佔用測試

Docker 內存佔用測試
測試目的:合理設置內存、交換分區、內存預留

測試程序:
JDK環境直接複製粘貼即可
cat >OutOfMemeber.java<<EOF
package com.ptmind.datadeck;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class OutOfMemeber {
public static void main(String[] args) {
List<Object> list=new ArrayList<>();
DecimalFormat df = new DecimalFormat("######0.00");
while (true) {

                 byte b[] = new byte[1024*1024*100];
                 list.add(b);
                 double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024);
                 System.out.println("total:"+total+"M");
                 double max = (Runtime.getRuntime().maxMemory()) / (1024.0 * 1024);
                 System.out.println("max:"+max+"M");
                 double free = (Runtime.getRuntime().freeMemory()) / (1024.0 * 1024);
                 System.out.println("free:"+df.format(free)+"M");
                 double mayuse=(max - total + free);
                 System.out.println("mayuse:"+df.format(mayuse)+"M");
                 System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
             }
         }

}
EOF
javac OutOfMemeber.java -Xlint:unchecked
java -Xmx20g OutOfMemeber #內存設置要大於內存限制才能申請到所有內存,否則jvm會預留內存無法佔用全部

測試:
1、
命令如下:
-m 4G:內存限制爲4G
--memory-swap=-1 :swap值爲-1
--memory-reservation=4G:預留內存爲4G

docker run --rm -m 4G --memory-swap=-1 --memory-reservation=4G -it java:testmem sh
內存:
"Memory": 4294967296,
"CpusetMems": "",
"KernelMemory": 0,
"MemoryReservation": 4294967296,
"MemorySwap": -1,
"MemorySwappiness": -1,
運行結果:
total:4037.0M
max:5461.5M
free:35.76M
mayuse:1460.26M

結論:最大佔用4G 內存

2、
docker run --rm -m 4G --memory-swap=0 --memory-reservation=4G -it java:testmem sh
內存:
"Memory": 4294967296,
"CpusetMems": "",
"KernelMemory": 0,
"MemoryReservation": 4294967296,
"MemorySwap": 8589934592,
"MemorySwappiness": -1,
結果:
total:8157.5M
max:18204.5M
free:56.26M
mayuse:10103.26M

最大使用8G的時候被殺死(被系統殺死)

3、
docker run --rm -m 4G --memory-swap=4G --memory-reservation=4G -it java:testmem sh
結果:
total:4037.0M
max:18204.5M
free:35.76M
mayuse:14203.26M

最大使用4G內存被殺死

4、
docker run --rm -m 4G --memory-swap=6G --memory-reservation=4G -it java:testmem sh
結果:
total:6147.5M
max:18204.5M
free:46.26M
mayuse:12103.26M
最大使用6G內存被殺死,且容器佔用的swap是系統的swap
5、
docker run --rm -m 4G --memory-swap=8G --memory-reservation=4G -it java:testmem sh
結果:
total:8157.5M
max:14563.5M
free:56.26M
mayuse:6462.26M
最大使用8G內存= 內存+swap

Rancher平臺

1、
內存限制4G
內存預留4G
Swap 不填

內存:
"Memory": 4294967296,
"CpusetMems": "",
"KernelMemory": 0,
"MemoryReservation": 4294967296,
"MemorySwap": 8589934592,
"MemorySwappiness": -1,
結果:
total:4455.0M
max:14563.5M
free:1650.27M
mayuse:11758.77M

2、
內存限制4G
內存預留4G
Swap 0
內存:
"Memory": 4294967296,
"CpusetMems": "",
"KernelMemory": 0,
"MemoryReservation": 4294967296,
"MemorySwap": 4296015872,
"MemorySwappiness": -1,
結果:
total:4448.5M
max:14563.5M
free:1643.77M
mayuse:11758.77M

3、
內存限制4G
內存預留4G
Swap 4G
內存:
"Memory": 4294967296,
"CpusetMems": "",
"KernelMemory": 0,
"MemoryReservation": 4294967296,
"MemorySwap": 8589934592,
"MemorySwappiness": -1,
結果:
total:4441.5M
max:14563.5M
free:1636.77M
mayuse:11758.77M

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章