Docker中运行的Java 9将能调整内存限制

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和可能应用的内存限制进行猜测。

原文发布于微信公众号 - 云计算D1net(D1Net02)

原文发表时间:2017-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rainbond开源「容器云平台」

好雨云帮两周问答集锦(2016.12.19-2017.01.01)

11730
来自专栏云计算

使用容器进行应用程序路由

本文收录在DZone的容器编制与部署指南中。点击此处阅读更多富有洞察力的文章、行业统计数据等内容!

21550

容器服务:来自外部的问好!

容器服务正在改变应用程序的部署方式和管理方式。但容器服务究竟是什么?它与其他传送平台方式有何不同?

19360
来自专栏idealclover的填坑日常

从零开始折腾博客(1):服务器,购买和配置

独立服务器:顾名思义,就是一个躺在机房的实实在在的物理服务器,专属于你,和你家的主机没啥区别,除了24小时运行。不过既然是专属的,价格嘛...

80140
来自专栏WindCoder

Python版方正教务系统查询

准确的说是Python+wxPython版河北师大方正教务系统查询。目前仅实现了信息查询、成绩查询、平均学分绩计算。

28210
来自专栏EAWorld

全面对比指南:Service Mesh能否成为下一代SDN

作者:James Kelly 译者:月满西楼 原题:Are Service Meshes the Next-Gen SDN? 全文7500字,阅读约需要18...

50960
来自专栏北京马哥教育

基于K8S的容器云平台如何部署微服务?

K8S是第一个将“一切以服务为中心,一切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在K8S上的系统不仅可以独立...

1.5K80
来自专栏blackpiglet

如何在 Kubernetes 环境中搭建 MySQL (一):简介

  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kub...

15950
来自专栏互联网技术栈

LVS Nginx HAProxy 对比

目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LVS,Nginx及HAProxy,高可用软件有Heartbeat、Keepalived,...

22340
来自专栏IT技术精选文摘

TencentHub的架构实现

TencentHub是一个集Docker镜像、二进制文件、helmcharts于一体的仓库存储服务。那么这一架构技术是如何基于Kubernetes 快速实现wo...

17460

扫码关注云+社区

领取腾讯云代金券