我的编程空间,编程开发者的网络收藏夹
学习永远不晚

容器环境的JVM内存如何设置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

容器环境的JVM内存如何设置

本文小编为大家详细介绍“容器环境的JVM内存如何设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“容器环境的JVM内存如何设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Java Heap基础知识

默认情况下,jvm自动分配的heap大小取决于机器配置,比如我们到一台64G内存服务器

java -XX:+PrintFlagsFinal -version | grep -Ei "maxheapsize|maxram"    uintx DefaultMaxRAMFraction                     = 4                                   {product}    uintx MaxHeapSize                              := 16875782144                         {product} uint64_t MaxRAM                                    = 137438953472                        {pd product}    uintx MaxRAMFraction                            = 4                                   {product}   double MaxRAMPercentage                          = 25.000000                           {product}java version "1.8.0_192"Java(TM) SE Runtime Environment (build 1.8.0_192-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

可以看到,JVM 分配的最大MaxHeapSize为 16G,计算公式如下:

MaxHeapSize = MaxRAM * 1 / MaxRAMFraction

MaxRAMFraction 默认是4,意味着,每个jvm最多使用25%的机器内存。

但是需要注意的是,JVM实际使用的内存会比heap内存大:

JVM内存  = heap 内存 + 线程stack内存 (XSS) * 线程数 + 启动开销(constant overhead)

默认的XSS通常在256KB到1MB,也就是说每个线程会分配最少256K额外的内存,constant overhead是JVM分配的其他内存。

我们可以通过-Xmx 指定最大堆大小。

java -XX:+PrintFlagsFinal -Xmx1g -version | grep -Ei "maxheapsize|maxram"    uintx DefaultMaxRAMFraction                     = 4                                   {product}    uintx MaxHeapSize                              := 1073741824                          {product} uint64_t MaxRAM                                    = 137438953472                        {pd product}    uintx MaxRAMFraction                            = 4                                   {product}   double MaxRAMPercentage                          = 25.000000                           {product}java version "1.8.0_192"Java(TM) SE Runtime Environment (build 1.8.0_192-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

此外,还可以使用XX:MaxRAM来指定。

java -XX:+PrintFlagsFinal -XX:MaxRAM=1g -version | grep -Ei

但是指定-Xmx或者MaxRAM需要了解机器的内存,更好的方式是设置MaxRAMFraction,以下是不同的Fraction对应的可用内存比例:

+----------------+-------------------+
| MaxRAMFraction | % of RAM for heap |
|----------------+-------------------|
|              1 |              100% |
|              2 |               50% |
|              3 |               33% |
|              4 |               25% |
+----------------+-------------------+

容器环境的Java Heap

容器环境,由于java获取不到容器的内存限制,只能获取到服务器的配置:

$ docker run --rm alpine free -m             total     used     free   shared  buffers   cachedMem:          1998     1565      432        0        8     1244$ docker run --rm -m 256m alpine free -m             total     used     free   shared  buffers   cachedMem:          1998     1552      445        1        8     1244

这样容易引起不必要问题,例如限制容器使用100M内存,但是jvm根据服务器配置来分配初始化内存,导致java进程超过容器限制被kill掉。为了解决这个问题,可以设置-Xmx或者MaxRAM来解决,但就想第一部分描述的一样,这样太不优雅了!

为了解决这个问题,Java 10 引入了 +UseContainerSupport(默认情况下启用),通过这个特性,可以使得JVM在容器环境分配合理的堆内存。 并且,在JDK8U191版本之后,这个功能引入到了JDK 8,而JDK 8是广为使用的JDK版本。

UseContainerSupport

-XX:+UseContainerSupport允许JVM 从主机读取cgroup限制,例如可用的CPU和RAM,并进行相应的配置。这样当容器超过内存限制时,会抛出OOM异常,而不是杀死容器。
该特性在Java 8u191 +,10及更高版本上可用。

注意,在191版本后,-XX:{Min|Max}RAMFraction 被弃用,引入了-XX:MaxRAMPercentage,其值介于0.0到100.0之间,默认值为25.0。

最佳实践

拉取最新的openjdk:8-jre-alpine作为底包,截止这篇博客,最新的版本是212,>191

docker run -it --rm openjdk:8-jre-alpine java -versionopenjdk version "1.8.0_212"OpenJDK Runtime Environment (IcedTea 3.12.0) (Alpine 8.212.04-r0)OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

我们构建一个基础镜像,dockerfile如下:

FROM openjdk:8-jre-alpineMAINTAINER jadepengRUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \    && echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \    && apk update upgrade \    && apk add --no-cache procps unzip curl bash tzdata \    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \    && echo "Asia/Shanghai" > /etc/timezoneRUN apk add --update ttf-dejavu && rm -rf /var/cache/apk/*

在应用的启动参数,设置 -XX:+UseContainerSupport,设置-XX:MaxRAMPercentage=75.0,这样为其他进程(debug、监控)留下足够的内存空间,又不会太浪费RAM。

读到这里,这篇“容器环境的JVM内存如何设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

容器环境的JVM内存如何设置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

容器环境的JVM内存如何设置

本文小编为大家详细介绍“容器环境的JVM内存如何设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“容器环境的JVM内存如何设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java Heap基础知识默认情况下,
2023-06-29

如何设置jvm堆内存大小

要设置JVM堆内存大小,可以使用以下方法之一:通过命令行参数设置:可以通过在启动Java应用程序时使用-Xms和-Xmx参数来设置初始堆大小(-Xms)和最大堆大小(-Xmx)。例如,要将初始堆大小设置为512MB,最大堆大小设置为1024
如何设置jvm堆内存大小
2024-02-29

linux如何设置jvm内存参数

要设置JVM的内存参数,可以通过修改Java程序的启动脚本来实现。以下是在Linux上设置JVM内存参数的步骤:1. 打开Java程序的启动脚本,通常是一个以`.sh`结尾的文件。2. 在脚本中找到`JAVA_OPTS`变量的定义,该变量用
2023-09-09

jvm如何设置堆内存参数

JVM的堆内存参数可以通过设置JAVA_OPTS环境变量来进行配置。具体设置堆内存参数的步骤如下:打开命令行窗口,并进入JVM的安装目录。找到并编辑JVM的配置文件,通常是位于bin目录下的一个以".conf"为扩展名的文件(比如"jav
jvm如何设置堆内存参数
2024-02-29

云服务器配置java环境设置方法有哪些内容

使用Java官方JDKJDK是Java开发中最常用的工具之一。Java开发人员可以使用Java官方JDK来安装、配置和运行Java程序。在使用Java官方JDK时,需要先安装Java源代码包(即Jre和Eclipse等Java开发工具包)。使用Eclipse集成开发环境(IDE)Eclipse是一个流行的Java开发环
2023-10-27

云服务器如何配置环境设置的

云服务器通常包含许多环境配置,例如运行环境、硬件配置、网络配置等。下面是云服务器使用的一些基本配置环境设置:安装虚拟机(vsam):可以在命令行中使用vsr命令安装虚拟机,并为其设置适当的系统设置。配置虚拟机配置文件:在运行环境配置文件(.xss)或类似的脚本中添加相关参数。例如,如果您使用的是Linux操作系统,可以在环境配置文件中设置以下参数:prefetch_size选项用于设
2023-10-26

云服务器如何配置环境设置

云服务器通常包含两个环境配置文件,一个是“配置设置”(ConfigurationSettings),另一个是“使用设置”(UseSettings)。下面是在同一台服务器上运行两个配置文件的示例:配置设置:```publisherservername:/default/username:/username/server:/default/workstation:/default/
2023-10-26

python的环境变量如何设置

在Python中,环境变量可以通过以下方法进行设置:1. 在操作系统中设置环境变量:你可以在操作系统的环境变量设置中添加Python的安装路径,例如在Windows系统中,你可以在"控制面板" -> "系统" -> "高级系统设置" ->
2023-08-09

Apache如何设置服务器的语言环境

Apache服务器可以通过设置HTTP请求头中的Accept-Language字段来确定客户端的语言偏好,并据此选择合适的语言环境。这可以通过在Apache配置文件中添加以下指令来实现:
Apache如何设置服务器的语言环境
2024-07-05

云服务器如何配置环境设置的服务器

选择云服务器提供商选择云服务器提供商时,用户需要考虑许多因素,例如服务器的可靠性、数据存储容量、支持的服务类型、可扩展性等等。选择云服务器提供商时,应该考虑到云服务器的价格、服务质量、技术支持等因素。用户可以根据自己的实际需求,选择最适合自己的云服务器提供商。配置服务器在选择云服务器提供商后,用户需要配置服务器,以满足
云服务器如何配置环境设置的服务器
2023-10-28

云服务器如何配置环境设置的网络

添加IP地址:将服务器的IP地址添加到网络配置文件中,例如使用IPv4协议。添加MAC地址:为服务器添加一个唯一的MAC地址,这样可以限制外部网络设备访问服务器。配置网络接口:为服务器的网络接口指定网络协议(例如TCP和UDP),例如使用IPv4或IPv6协议。配置网络路由:配置服务器的网络路由,使得外部网络设备可以通过该网络路由访问服务器。配置防火墙:配置服务器的防火墙规则,例如允许通过网络的流量,或者...
2023-10-27

云服务器如何配置环境设置方法

云服务器通常包含配置环境、安装配置和运行应用程序的功能。以下是一些常用的云服务器配置环境设置方法:配置环境:在Web服务器的操作系统或虚拟服务器上进行配置。例如,Web服务器需要具有以下环境:服务器的操作系统:通常使用Windows、Linux、Unix(或BSD)等操作系统。这些操作系统需要满足您在不同计算机上的需求。服务器的虚拟目录:您可以在Web服务器的虚拟目录上创建一个新的目
2023-10-26

php中Symfony框架的环境如何设置

这篇文章给大家分享的是有关php中Symfony框架的环境如何设置的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampSer
2023-06-14

jQuery如何设置元素的HTML内容?

jQuery设置元素HTML内容jQuery提供多种方法设置元素的HTML内容,包括:html():设置或获取HTML内容text():设置或获取文本内容val():设置或获取表单元素的值append():在元素末尾添加内容prepend():在元素开头添加内容after():在元素后面插入内容before():在元素前面插入内容
jQuery如何设置元素的HTML内容?
2024-04-02

Apache如何设置服务器的虚拟内存

要设置Apache服务器的虚拟内存(也称为虚拟主机),您可以按照以下步骤进行操作:在Apache服务器的配置文件中定义虚拟主机。在主配置文件(通常是httpd.conf)中,您可以使用以下语法为每个虚拟主机定义一个新的块:
Apache如何设置服务器的虚拟内存
2024-07-05

如何设置云服务器的虚拟内存?

1.了解虚拟内存在开始设置云服务器的虚拟内存之前,我们首先需要了解什么是虚拟内存。虚拟内存是一种操作系统的技术,它允许计算机在物理内存不足时使用硬盘空间来扩展可用内存。通过将部分数据从内存转移到硬盘上的虚拟内存文件中,计算机可以更好地管理内存资源。2.登录到云服务器要设置云服务器的虚拟内存,首先需要登录到服务器。你可以
2023-10-27

如何设置云服务器的虚拟内存

1.了解虚拟内存在开始设置云服务器的虚拟内存之前,我们首先需要了解什么是虚拟内存。虚拟内存是一种操作系统的内存管理技术,它允许将部分硬盘空间用作内存扩展,以便更好地管理内存资源。当物理内存不足时,操作系统会将一部分数据从内存转移到硬盘上的虚拟内存中。2.登录云服务器首先,我们需要登录到你的云服务器。你可以使用远程登录工
2023-10-27

云服务器如何配置环境监测设备

云服务器可以配置环境监测设备来监控服务器的运行状态和性能。以下是一些常用的环境监测设备和配置环境监测设备的基本步骤:使用OpenStack管理器:OpenStack管理器是一个集中管理云服务器和其他云服务的工具。您可以使用该管理器创建一个虚拟机,并设置环境监测设备。管理器还可以提供API,以便您将环境监测设备与OpenStack控制台集成。创建环境监测设备:如果您已经创建了环境监测设备,现
2023-10-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录