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

原文地址:http://blog.51cto.com/2183087/2309024

时间: 2024-10-28 11:16:07

Docker 内存占用测试的相关文章

android应用内存占用测试(每隔一秒打印procrank的信息)

1.内存占用 对于智能手机而言,内存大小是固定的:因此,如果单个app的内存占用越小,手机上可以安装运行的app就越多:或者说app的内存占用越小,在手机上运行就会越流畅.所以说,内存占用的大小,也是考量app性能的一个重要指标 2.原理说明 对于一个app,我们可以关注它在3种状态下的内存占用情况: 空负荷————app已经在后台运行,但是用户没有使用: 中负荷————app在前台运行,用户进行了少量操作: 满负荷————用户持续频繁大量操作,app接近饱和状态运行. 然而,除了第一种情况,其

Map存储容量及内存占用测试

Integer a = 1; long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().freeMemory(); HashMap map = new HashMap(); for (int i = 0; i < 1000000; i++) { map.put(i, a); } // 快要计算的时,再清理一次 System.gc(); end = Runtime.getRuntime().fr

内存管理[6]测试堆的内存占用情况

本例效果图: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Button2: TButton;     Memo1: TMemo;     Memo2: TMemo;     proce

.Net Core项目在Docker上运行,内存占用过多导致pods重启的问题

默认情况下,.NET Core应用的内存回收模式是Server模式,这种情况下,内存占用和服务器核心数量有关,一半占用量比较大. 我们的应用目前吞吐量都不大,可以采用Workstation模式,这种模式下可以减少内存占用. 配置方法: 在VS中找到对应项目,用邮件选择编辑 加入如下选项 <PropertyGroup> <ServerGarbageCollection>false</ServerGarbageCollection> </PropertyGroup&g

微服务中使用 OpenJ9 JVM内存占用降低60%!

随着微服务的普及,许多企业踏上微服务之旅. 微服务化后,应用数量可能高一个数量级.一般企业,以前三五个应用能支撑业务,微服务化之后应用数量可能多达几十个.每个微服务往往独立部署,内存的消耗自然也高居不下,以前两台8核16G机器指不定就能跑起来,现两台16核64G还不一定够用,同时由于多套环境的存在加上容器编排工具(如K8s)所需的资源,硬件资源的投入自然是成倍增加. 在 Web 应用开发中,为了降低内存消耗,你是否尝试过: 去除不必要的组件,减少代码体积 更换 Web 容器,如将 Tomcat

pvr与png的内存占用

Zwoptex生成的spritesheet除了可以导出png格式的图片外还有pvr格式.pvr格式是iOS的显示芯片可以直接读取的,不需要经过解析就能直接显示,所以渲染速度更快,更节省内存. 我特意在cocos2D 2.0 rc1版本做了一项测试: 一个空的cocos2D模版工程运行起来之后占用的内存大约是4MB. 直接用CCSprite显示一张2048*1024的数据格式为RGBA565的PNG图片之后,内存占用达到了20MB. 同样的情况下换成pvr格式之后,内存占用为16MB.也就是说pn

关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这个问题,所以就有了这篇文章. 研究内容 研究方法 测试环境 研究过程 结果分析 结论 另外一个难以解释的问题 研究内容 本篇内容主要探讨以下场景:同一张图片,放置在不同的drawable文件夹,在同一设备上运行,对图片大小及内存占用有什么影响. 研究方法 控制变量法 分析法 测试环境 采用锤子T1手机(108

[Android Pro] Android应用性能测试之CPU和内存占用(转载)

首先稍做分析一下测试环境:我们知道CPU和内存占用是一个实时变化的状态,而市面上还没有具体的哪款android应用能做到实时监控CPU和内存占用并使用log日志保存.考虑到android的底层框架是基于Linux的平台,所有我们可以通过Linux的资源监控命令来实现对android平台的资源实时监控. 要做到上边的测试环境的实现,需要具备以下几点: 1.被测试的手机具备root权限:因为涉及到底层的linux命令,需要读取或执行相应的文件.至于如何root你的手机,不同型号的手机root的方法不

docker实战——在测试中使用Docker

在之前几章中介绍的都是Docker的基础知识,了解什么是镜像,docker基本的启动流程,以及如何去运作一个容器等等. 接下来的几个章节将介绍如何在实际开发和测试过程中使用docker. 将Docker作为本地Web开发环境是使用Docker的一个最简单的场景.这个环境可以完全重现生产环境,保证开发环境和部署环境一致.下面从将Nginx安装到容器来架构一个简单的网站开始. 使用Docker测试静态网站 ## 创建一个sample的镜像目录并创建一个Dockerfile # mkdir sampl