首页 花语文章正文

apr 故障,如何设置Docker容器中Java应用的内存限制?

花语 2023年09月21日 10:08 104 园艺师

本文目录

  1. 哪里可以升级汽车ECU?
  2. 夏天踏板摩托车机油温度能达到多少?
  3. 如何设置Docker容器中Java应用的内存限制?
  4. 150摩托车,那款可以跑长途?

哪里可以升级汽车ECU?

可以选择以下几种途径来升级汽车ECU:

专业的汽车改装店或汽车维修店:这些店铺通常拥有专业的技术团队和设备,能够根据车主的需求进行个性化的ECU升级。他们通常会提供不同品牌的ECU升级产品,例如APR、CT、Cosworth等,并能够提供相应的技术支持和售后服务。

官方ECU升级程序:一些汽车制造商会提供官方的ECU升级程序,以提高车辆的性能和燃油效率。这些程序通常可以在汽车制造商的官方网站或者授权的经销商处进行升级。

专业的ECU升级提供商:这些公司专门提供ECU升级服务,通常会提供不同品牌和型号的ECU升级产品,并能够提供相应的技术支持和售后服务。

无论选择哪种途径进行ECU升级,都需要确保操作的安全性和合法性。在进行ECU升级前,建议先了解相关的法律法规和车辆制造商的规定,并选择合适的升级方案。同时,选择正规的改装店或维修店进行升级,避免因操作不当导致车辆故障或安全隐患。

夏天踏板摩托车机油温度能达到多少?

这个取决于你当地的温度,

单机油如5W、30、40、只符合SAE发动机油粘度分类,(SAE J300 APR.84)中等的某单一级别,对于用的环境比较严格,如SAE40适用的温度气温为0℃,多级油则能同时满足多个粘度级别,如SAE15W/40,系指其低温性能可满足15W,高粘度可达到40的的指标,其间跨越5个粘度级别,因此多级油可四级通用!

北方建议选用SAE5W/30,

中原地区建议选用SAE15W/40

南方地区建议选用2W/50

机油的正常温度一般是在90°左右,但是机油所服务的区域,也就是发动机在燃烧室部位的温度超过200°以上。

如何设置Docker容器中Java应用的内存限制?

如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数。比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例

docker run --rm -e JAVA_OPTS='-Xmx512m' tomcat:8

在日志中,我们可以清楚地发现设置已经生效 “Command line argument: -Xmx512m”

02-Apr-2016 12:46:26.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.32

02-Apr-2016 12:46:26.974 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19:34:53 UTC

02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.0

02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux

02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.1.19-boot2docker

02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64

02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre

02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_95-b00

02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation

02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat

02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat

02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512m

...

然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内存资源进行限制:

1. 限制容器使用的内存的最大量,防止对系统或其他应用造成伤害

2. 能够将Docker容器调度到拥有足够空余的内存的节点,从而保证应用的所需运行资源

关于容器的资源分配约束,Docker提供了相应的启动参数

对内存而言,最基本的就是通过 -m参数来约束容器使用内存的大小

-m, --memory=""

Memory limit (format: <number>[<unit>]). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.

那么问题就来了,为了正确设置Docker容器内存的大小,难道我们需要同时传递容器的内存限制和JAVA_OPTS环境变量吗? 如下所示:

docker run --rm -m 512m -e JAVA_OPTS='-Xmx512m' tomcat:8

这个方法有两个问题

1. 需要管理员保证容器内存和JVM内存设置匹配,否则可能引发错误

2. 当对容器内存限制调整时,环境变量也需要重新设定,这就需要重建一个新的容器

是否有一个方法,可以让容器内部的JVM自动适配容器的内存限制?这样可以采用更加统一的方法来进行资源管理,简化配置工作。

大家知道Docker是通过CGroup来实现资源约束的,自从1.7版本之后,Docker把容器的local cgroups以只读方式挂载到容器内部的文件系统上,这样我们就可以在容器内部,通过cgroups信息来获取系统对当前容器的资源限制了。

我创建了一个示例镜像 registry.aliyuncs.com/denverdino/tomcat:8-autoheap

,其源代码可以从Github 获得。它基于Docker官方Tomcat镜像创建,它的启动脚本会检查CGroup中内存限置,并计算JVM最大Heap size来传递给Tomcat。其代码如下

#!/bin/bash

limit_in_bytes=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)

# If not default limit_in_bytes in cgroup

if [ "$limit_in_bytes" -ne "9223372036854771712" ]

then

limit_in_megabytes=$(expr $limit_in_bytes \/ 1048576)

heap_size=$(expr $limit_in_megabytes - $RESERVED_MEGABYTES)

export JAVA_OPTS="-Xmx${heap_size}m $JAVA_OPTS"

echo JAVA_OPTS=$JAVA_OPTS

fi

exec catalina.sh run

说明:

为了监控,故障排查等场景,我们预留了部分内存(缺省64M),其余容器内存我们都分配给JVM的堆。

这里没有对边界情况做进一步处理。在生产系统中需要根据情况做相应的设定,比如最大的堆大小等等。

现在我们启动一个tomcat运行在512兆的容器中

docker run -d --name test -m 512m registry.aliyuncs.com/denverdino/tomcat:8-autoheap

通过下列命令,从日志中我们可以检测到相应的JVM参数已经被设置成 448MB (512-64)

docker logs test

...

02-Apr-2016 14:18:09.870 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx448m

...

我们也可以方便的调整Java应用的内存.

Docker 1.10提供了对容器资源限制的动态修改能力。但是由于JVM无法感知容器资源修改,我们依然需要重启tomcat来变更JVM的内存设置,例如,我们可以通过下面命令把容器内存限制调整到1GB

docker update -m 1024m test

docker restart test

再次检查日志,相应的JVM Heap Size最大值已被设置为960MB

docker logs test

...

02-Apr-2016 14:21:07.644 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx960m

150摩托车,那款可以跑长途?

第一款 建设雅马哈飞致150

这款车可以作为150通路车中的典型代表,因为它既包含了该类车型的实用性,也具备了一定的档次感,最主要续航还超级棒,能够跑出700km加的超长距离。

而它能有如此的表现,主要得益于这款车所搭载的雅马哈创核科技发动机,这款发动机不仅动力足,而且油耗低,所以就可以作为通路车中的代表接受题主的选择。

第二款 力帆KPV150

这是一款跨界踏板车,它在原有踏板车的基础上,融入了一定的越野性能,使得这款车不仅可以在街道上行驶,也能在凸凹不平的非铺装路面上风驰而过。并且它也对小踏板,油箱过小的软肋进行了更改,使其油箱容积达到了11升,所以这款车就可以作为跨界车型中的代表车型。

第三款 赛科龙RX1s 150

这是一款入门级的休旅车,它相比常规的跨骑车会具备较为直立的骑行三角,这种设计优势会让这款车具有较好的抗疲劳性能。再结合它原车自带的护杠和三箱,就会免去我们后期加装的麻烦,和行驶过程中一些不必要的繁琐。

第四款 启典150G2

这是一款复古街车,并且是一款同价位车型中配置表现极其出色,颜值也比较出众,性能还算不错的新型150摩托车,所以这款车的出现对于同排量车型来说是很有压力的。不过它目前的热度有所放缓,但骑士分享认为,以它的综合表现,这款车依然值得一看。

第五款 本田系PCX150

这是一款外形上比较中规中矩的踏板车,但它因为采用了CKD的制造形式,所以各方面的表现要明显好于目前市面上同排量的车型。当然这里不包括雅马哈的XMAX155,如果想和这款车纠缠一下的话,那么这里出现的我更希望是XMAX155,但因为它排量上多出了那么一点点,因此就不做推荐了。

标签: in 容器 he

花卉养护知识Copyright2022-2024养花知识网版权所有. 备案号:鄂ICP备2022019915号