1.      对一个正在运行着的进程来说,在不到达其内存使用量边界的情况下,扩大/缩小其cgroup分配的内存不会对它产生任何影响。

2.      在进程已经使用了一定量的内存的情况下,缩小其cgroup内存至小于已使用的内存量,有两种结果(可通过cgroup配置,oom_kill_disable=0时杀死进程,=1时挂起进程):

A.进程被杀死

B.进程被挂起,系统向cgroup中注册的oom处理函数发送一个oom消息;当cgroup内内存资源足够多时,进程恢复运行;当cgroup的oom_kill_disable重新被设置为0时,进程被杀死。

3. 在给定了cgroup内存限制使用量的情况下,当cgroup内有进程申请的内存超过此限制时,结果与2相同。

4. cgroup对内存使用的限制分为物理内存限制和swap区限制,swap区的限制不能小于物理内存的限制,当进程要使用的内存超过了cgroup物理内存限制时,进程开始使用swap区(内存页交换到磁盘),直至使用量超过swap区限制,结果与2相同。

对Java程序来说情况更复杂一些,因为JVM对进程使用的内存也有一定的控制能力

几个相关的JVM参数:

-Xms        jvm初始内存

-Xmx          jvm最大内存(超出进程将抛出OOM异常)

-XX:PermSize              初始非堆内存

-XX:MaxPermSize    最大非堆内存

1.      Jvm参数与cgroup对java进程的内存限制是独立的,实际的限制是取它们的较小值。

2.      内存超出的结果不同:

Java进程使用内存超过jvm最大堆参数设置时进程终止,抛出OOM异常

Java进程使用内存超过cgroup设置时有两种结果(同前2)

设计思路:

1.  利用jvm参数限制内存使用,容易使用的内存越界时抛出OOM异常。每个geronimo启动时指定好Xms和Xmx,需要改变容器内存时创建新的容器同时增大/减小Xms和Xmx,然后重新启动容器中的应用,删除原容器。

2.  完全使用cgroup控制内存,容器使用内存越界时挂起geronimo,增大cgroup内存参数;容器一定时间内只使用少量内存时(需要额外的监控),直接减小cgroup内存参数到一个合适的值。

java C语言内存占用_使用Cgroup限制Java使用的内存量-思路相关推荐

  1. java 查看堆外内存占用_如何监控和诊断JVM堆内和堆外内存使用?

    上一讲我介绍了 JVM 内存区域的划分,总结了相关的一些概念,今天我将结合 JVM 参数.工具等方面,进一步分析 JVM 内存结构,包括外部资料相对较少的堆外部分. 今天我要问你的问题是,如何监控和诊 ...

  2. java虚拟机手动内存分配_《深入理解java虚拟机》-垃圾收集器与内存分配策略

    如何判断对象已死? 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器减1:其中计数器为0的对象是不可能再被使用的已死对象. 引用计数算法的实现很简单 ...

  3. java 解锁关闭文件占用_程序员:Java文件锁定、解锁和其它NIO操作

    文件锁 java中i/o的文件锁定有两种:一种是独占锁,一种是共享锁. 共享锁既是共享读操作,但是只有一个可以进行写操作,共享锁防止其他正在运行的程序获取重复的独占锁,但是允许其他程序可以获取共享锁. ...

  4. linux VIRT内存占太大,Java top VIRT 内存占用有关问题

    Java top VIRT 内存占用问题 问题描述: 服务器运行在虚拟机上,系统为小红帽,发布了四个java通讯程序,四个java程序VIRT 非常大,16G的内存,剩余内存只有83M,虚拟机平台经常 ...

  5. java stream 内存占用_使用Stream

    Java从8开始,不但引入了Lambda表达式,还引入了一个全新的流式API:Stream API.它位于java.util.stream包中. 划重点:这个Stream不同于java.io的Inpu ...

  6. java定义基础变量语句_编程语言第一:JAVA语言基础,变量

    在前面的几篇文章中我们介绍了Java的运行环境,以及Eclipse IDE的安装与使用.从今天开始我们的文章开始介绍Java开发语言的基础知识.今天主要介绍Java变量. 一.什么是变量 变量是指代在 ...

  7. 写一段代码提高内存占用_记录一次生产环境中Redis内存增长异常排查全流程!...

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 最近 DBA 反馈线上的一个 Redis 资源已经超过了预先设计时的容量,并且已经进行了两次扩容,内存增长还在持续中,希望业务方排查一下容量 ...

  8. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  9. linux 内存占用_分享Linux内存占用几个案例

    案例一 问题 最近一台 CentOS 服务器,发现内存无端损失了许多,free 和 ps 统计的结果相差十几个G,非常奇怪,后来Google了许久才搞明白. 分析 1.linux系统内存消耗主要有三个 ...

最新文章

  1. 面试官: 谈谈什么是守护线程以及作用 ?
  2. 制造业人工智能8大应用场景
  3. python一点基础都没有的怎么办-你们都是怎么学 Python 的?
  4. 选哪扇门得奖金的算法
  5. 收藏 | 深度学习框架简史:TensorFlow和PyTorch双头垄断
  6. github 【第三章】Github综合
  7. StringUtil里面的常用的方法
  8. ZZ:别说你会阅读电子书——从编辑、美化PDF电子书的实用技巧说起
  9. 从一个广告读懂华为云
  10. 计算机搜不到连接打印机主机,电脑搜索不到打印机设备无法连接怎么办
  11. 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题
  12. 研发人员的几个典型性格特征
  13. php卡片式,什么是卡片式设计? | 人人都是产品经理
  14. Revit轴网绘制中怎么生成轴网?
  15. 除了Sublime Text ,还有啥笔记应用能double代码效率?
  16. 加快数字创新赋能实体经济 CDEC2021中国数字智能生态大会成都站今日举行
  17. 求e的近似值 (15 分)Java【循环】
  18. ESPIDF开发ESP32学习笔记【基本内容】
  19. 使用@JsonFormat的一个坑
  20. 实现微信自动向附近的人打招呼,收到指定账户推送文章时自动进入微信打开链接

热门文章

  1. linux od命令详解
  2. Linux C编程--临时文件
  3. java一段时间后执行一块代码_java自带的ScheduledExecutorService定时任务正常执行一段时间后部分任务不执行...
  4. surface pro linux服务器,【如何在surface pro 4上安装linux系统?】-看准网
  5. vc mysql utf8_C/C++ 连接 MySQL (VC 版)
  6. thinkphp mysql函数_php封装的数据库函数与用法示例【参考thinkPHP】
  7. 包含min函数的栈 大坑
  8. 个人觉得非常好的B树,B+树的总结
  9. modprobe和insmod区别
  10. 什么软件测试身高体重标准,测测你的身高体重指数(BMI)正常吗?