写点什么

内存限制自适应,容器中运行 Java 9 效果更出众

  • 2017 年 2 月 23 日
  • 本文字数:960 字

    阅读完需:约 3 分钟

OpenJDK 9 中首次新增了一项实验性功能,JVM 可借助该功能检测到自己运行在容器中,进而酌情调整内存限制。尽管过去几年来容器技术日渐流行,但包括JVM 在内的很多工具依然需要通过宿主机的参数访问可用资源,经常会遇到内存不足的情况,并会显示各种令人困惑的错误信息。与Java 9 一同发布的该功能正是为了在多种使用场景中避免出现此类问题而生。

诸如 Docker Heroku Kubernetes 等容器技术实际上是一种基于 Linux 操作系统的轻量级虚拟机。这种虚拟机的空间占用更低,意味着可以在消耗更少资源的情况下,更快速地提供与传统虚拟机极为类似的功能,但这种做法也有不足之处:传统虚拟机更成熟,可模拟一整套专用硬件,并可确保大部分现有软件可以按照预期结果运行;但容器技术使用了宿主机的硬件和操作系统,这意味着需要依赖宿主机相关信息的软件在运行过程中可能无法感知容器本身所造成的额外局限。Netflix 公司 Linux 容器服务(也叫做 Titus )部门开发者 Fabio Kung 在 2014 年撰文介绍了这一情况,虽然时至今日,那篇文章中的部分内容已经有些过时,但依然可以帮助我们充分了解这个问题。

JVM 也曾饱受这个问题困扰。如果不使用-Xmx指定内存上限,JVM 会将上限设置为物理内存数的一小部分(通常为 1/4,但情况可能各异),而这一结果甚至还没有考虑到容器本身所造成的限制。Java 9 中新增的这项功能可以判断 JVM 是否运行在 Control Group,即 cgroup 中(这是一种 Linux 技术,大部分容器会通过该技术对硬件和其他资源的使用施加强制限制),借此预防出现类似的问题。如果 JVM 检测到自己运行在 cgroup 中,随后会试图确定 cgroup 所定义的内存限制,将该限制视作可用物理内存总量,并将其他每个参数设置为该值的一部分。这依然是一个实验性功能,只有通过-XX:+UseCGroupMemoryLimitForHeap选项激活后方能生效。

Cgroups 最早在 2008 年被纳入 Linux 内核,并在 2013 年进行了重新设计,该技术可对资源的使用进行隔离,让应用程序对内存、CPU、IO、网络等资源的访问进行控制。不同应用程序可创建自己的 Control Group 层次结构,并给每个 Group 应用不同的限制,这意味着应用程序无法事先知道自己要运行在哪个 Group 中。也正是因此,JVM 只能根据 cgroup 和可能应用的内存限制进行猜测。

查看英文原文 Java 9 Will Adjust Memory Limits if Running with Docker

2017 年 2 月 23 日 18:004388
用户头像

发布了 283 篇内容, 共 90.4 次阅读, 收获喜欢 48 次。

关注

评论

发布
暂无评论
发现更多内容

能源区块链研究|区块链与核电安全

CECBC

区块链 核电

架构师 01 期,第九周课后作业

子文

训练营第五周作业

大脸猫

极客大学架构师训练营

架构师训练营第 9 周作业

netspecial

极客大学架构师训练营

第九周作业

极客大学架构师训练营

第五周作业

晴空万里

极客大学架构师训练营

Netty源码解析 -- 对象池Recycler实现原理

binecy

Netty 对象存储 高性能

Snowpack - 更快的前端构建工具

曲迪

效率工具 大前端

第九周作业

Meow

文件上传踩坑记及文件清理原理探究

比伯

Java 大数据 编程 架构 计算机

第九周作业

Geek_ce484f

极客大学架构师训练营

Week 9 作业01

Croesus

助推城市智慧化!正舵者携手中科院演绎区块链魅力

CECBC

区块链 人工智能

第九周学习总结

Meow

InfoQ 写作平台的魔力

Yolanda

请简述 JVM 垃圾回收原理

orchid9

架构师训练营第九周课后练习

薛凯

第五周学习总结

晴空万里

极客大学架构师训练营

架构师训练营第二期 Week 5 总结

bigxiang

极客大学架构师训练营

应届秋招生,熬夜吃透华为架构师这份‘典藏级’计算机网络+计算机操作系统,成功上岸腾讯

网络协议 编程之路 计算机知识

第9周作业2

Yangjing

极客大学架构师训练营

训练营第九周作业 2

仲夏

极客大学架构师训练营

真零基础Python开发web

MySQL从删库到跑路

Python django Web bottle

第9周作业1

Yangjing

极客大学架构师训练营

架构师训练营 1 期 - 第九周总结(vaik)

行之

极客大学架构师训练营

架构师训练营

week5 作业二

shuyaxx

数据库工程师整理最常见mysql面试题,每一道都是工作面试经典

小Q

MySQL 数据库 学习 架构 面试

第九周作业总结

Geek_ce484f

极客大学架构师训练营

大数据和Hadoop平台介绍

MySQL从删库到跑路

大数据 hadoop

第九周学习总结

orchid9

内存限制自适应,容器中运行Java 9效果更出众-InfoQ