使用cgroup限制java使用的内存量-思路
来源:互联网 发布:软件外包项目网 编辑:程序博客网 时间:2024/05/21 21:46
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内存参数到一个合适的值。
- 使用cgroup限制java使用的内存量-思路
- 使用cgroup限制内存
- 使用cgroup限制内存使用
- cgroup实践---使用cgroup限制mongodb进程内存
- 使用CGROUP限制mongd的disk io
- 使用cgroup 限制进程的磁盘io
- Tomcat 6 限制内存使用量
- 使用cgroup的blkio子系统自动限制磁盘
- cgroup的使用
- IT--cgroup--cgroup使用
- Linux 下使用 cgroup 控制进程的cpu,内存
- cgroup--内存 限制内存测试
- Linux中使用cgroup来限制资源使用
- java 获取非堆内存使用量
- RH442 - 通过cgroup来限制kvm虚拟机只使用host的某个cpu和内存大小
- RH442 - 通过cgroup来限制kvm虚拟机只使用host的某个cpu和内存大小
- 查看内存使用量,硬盘使用量
- 查看进程的内存使用量
- 最长路问题
- Linux 下的免费桌面级杀毒软件
- 水木上的关于裁员的文章
- 【FragmentActivity】的简单实例
- C语言学习第十天(重要:C的灵魂)
- 使用cgroup限制java使用的内存量-思路
- [Python]网络爬虫(五):urllib2的使用细节与抓站技巧
- Eclipse, C++, 更改输出名称
- 基于FPGA的跨时钟域信号处理——专用握手信号
- 静态链接库LIB和动态链接库DLL的区别 创建和示例
- Linux网卡数据包的接收
- 杭电3123
- C#语言中的修饰符大总结
- 第五部分 家庭创业奔小康7.“商业情报处”有钱可赚