返回顶部
首页 > 资讯 > 精选 >容器环境的JVM内存如何设置
  • 206
分享到

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

2023-06-29 16:06:30 206人浏览 泡泡鱼
摘要

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

本文小编为大家详细介绍“容器环境的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内存如何设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: 容器环境的JVM内存如何设置

本文链接: https://lsjlt.com/news/325625.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 容器环境的JVM内存如何设置
    本文小编为大家详细介绍“容器环境的JVM内存如何设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“容器环境的JVM内存如何设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java Heap基础知识默认情况下,...
    99+
    2023-06-29
  • 容器环境的JVM内存设置实践记录
    目录Java Heap基础知识容器环境的Java HeapUseContainerSupport最佳实践Java Heap基础知识 默认情况下,jvm自动分配的heap大小取决于机器...
    99+
    2024-04-02
  • linux如何设置jvm内存参数
    要设置JVM的内存参数,可以通过修改Java程序的启动脚本来实现。以下是在Linux上设置JVM内存参数的步骤:1. 打开Java程...
    99+
    2023-09-09
    linux jvm
  • 如何设置jvm堆内存大小
    要设置JVM堆内存大小,可以使用以下方法之一: 通过命令行参数设置:可以通过在启动Java应用程序时使用-Xms和-Xmx参数来设...
    99+
    2024-02-29
    jvm
  • jvm如何设置堆内存参数
    JVM的堆内存参数可以通过设置JAVA_OPTS环境变量来进行配置。具体设置堆内存参数的步骤如下: 打开命令行窗口,并进入JVM的...
    99+
    2024-02-29
    jvm
  • pycharm如何设置环境
    pycharm 中设置 python 环境的步骤:打开项目解释器设置添加新解释器配置解释器路径设置项目解释器安装所需的库验证设置 PyCharm 中的 Python 环境设置 在 Py...
    99+
    2024-04-19
    python macos pycharm
  • 云服务器配置java环境设置方法有哪些内容
    使用Java官方JDK JDK是Java开发中最常用的工具之一。Java开发人员可以使用Java官方JDK来安装、配置和运行Java程序。在使用Java官方JDK时,需要先安装Java源代码包(即Jre和Eclipse等Java开发工具包...
    99+
    2023-10-27
    服务器配置 环境 方法
  • 云服务器如何配置环境设置的
    云服务器通常包含许多环境配置,例如运行环境、硬件配置、网络配置等。下面是云服务器使用的一些基本配置环境设置: 安装虚拟机(vsam):可以在命令行中使用vsr命令安装虚拟机,并为其设置适当的系统设置。 配置虚拟机配置文件:在运行环境配置...
    99+
    2023-10-26
    环境 服务器
  • 云服务器如何配置环境设置
    云服务器通常包含两个环境配置文件,一个是“配置设置”(Configuration Settings),另一个是“使用设置”(Use Settings)。 下面是在同一台服务器上运行两个配置文件的示例: 配置设置: ``` publis...
    99+
    2023-10-26
    环境 服务器
  • jQuery如何设置内容
    这篇文章将为大家详细讲解有关jQuery如何设置内容,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。设置内容 - text()、html() 以及 val()设置内容方法t...
    99+
    2024-04-02
  • Docker容器中怎么设置环境变量
    在Docker容器中设置环境变量可以通过Dockerfile或者在运行容器时使用-e参数来实现。以下是两种设置环境变量的方法: 使...
    99+
    2024-04-02
  • Linux下Tomcat8如何修改JVM内存配置
    目录Tomcat8如何修改JVM内存配置所以如果我们想要修改jvm的内存配置设置之后在Tomcat启动总结Tomcat8如何修改JVM内存配置 Tomcat并不建议直接在catalina.sh里配置变量,而是写在与cat...
    99+
    2023-04-14
    Linux Tomcat8 Tomcat8修改JVM内存配置 Tomcat8修改JVM内存
  • python的环境变量如何设置
    在Python中,环境变量可以通过以下方法进行设置:1. 在操作系统中设置环境变量:你可以在操作系统的环境变量设置中添加Python...
    99+
    2023-08-09
    python
  • Apache如何设置服务器的语言环境
    Apache服务器可以通过设置HTTP请求头中的Accept-Language字段来确定客户端的语言偏好,并据此选择合适的语言环境。这可以通过在Apache配置文件中添加以下指令来实现: <IfModule mod_negotiati...
    99+
    2024-07-05
    apache
  • 如何设置java环境变量
    JAVA_HOME环境变量设置首先右击【计算机】进入【属性】然后选择其中的【高级系统设置】点击进入【高级】中的【环境变量】,进入环境变量编辑界面在下方的【系统变量】中,并不存在JAVA_HOME变量,那么我们需要点击【新建】变量名输入:JA...
    99+
    2021-02-11
    java入门 设置 java 环境变量
  • 如何设置Mysql环境变量
    这篇文章给大家介绍如何设置Mysql环境变量,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1、mysql安装 #usedel mysql #groupdel mysql #g...
    99+
    2024-04-02
  • 如何设置Linux桌面环境
    这篇文章主要讲解了“如何设置Linux桌面环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何设置Linux桌面环境”吧!Linux对硬件的支持广泛,但也有支持不佳的情况,如HiDPI设备...
    99+
    2023-06-13
  • linux环境变量如何设置
    在Linux环境中,可以通过以下几种方式来设置环境变量:1. 临时设置环境变量:可以在命令行中使用 `export` 命令来临时设置...
    99+
    2023-08-31
    linux
  • ubuntu环境变量如何设置
    在Ubuntu中,可以通过以下步骤设置环境变量:1. 打开终端(Ctrl + Alt + T);2. 编辑`~/.bashrc`文件...
    99+
    2023-09-06
    ubuntu
  • vue如何设置环境变量
    这篇文章将为大家详细讲解有关vue如何设置环境变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue设置环境变量在开发的时候一般会有是三个环境:开发环境 测试环境 线上环境vue 中有个概念就是模式,默...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作