k8s 如何设置 java启动参数_Kubernetes环境下调整WebLogic JVM基本参数

在Kubernetes环境中,使用WebLogic时发现JVM内存限制为700M左右。通过设置`JAVA_OPTIONS`环境变量并更新YAML文件中的`env`,可以将JVM的`Xms`和`Xmx`参数传递给容器,从而控制JVM的堆大小。示例中设置了`-Xms1024m -Xmx1024m`,并验证了设置已生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于Kubernetes启动WebLogic后,发现JVM的最大heap size一直在700多M左右,通过

kubectl logs 察看pod启动状态,发现日志中并没有-Xms和-Xmx参数.日志部分如下:

[root@k8s-master fluentd-elasticsearch]# kubectl logs helloworld-service-4d72j

.

.

JAVA Memory arguments:-Djava.security.egd=file:/dev/./urandom

.

CLASSPATH=/u01/oracle/wlserver/../oracle_common/modules/javax.persistence_2.1.jar:/u01/oracle/wlserver/../wlserver/modules/com.oracle.weblogic.jpa21support_1.0.0.0_2-1.jar:/usr/java/jdk1.8.0_101/lib/tools.jar:/u01/oracle/wlserver/server/lib/weblogic_sp.jar:/u01/oracle/wlserver/server/lib/weblogic.jar:/u01/oracle/wlserver/../oracle_common/modules/net.sf.antcontrib_1.1.0.0_1-0b3/lib/ant-contrib.jar:/u01/oracle/wlserver/modules/features/oracle.wls.common.nodemanager_2.0.0.0.jar:/u01/oracle/wlserver/../oracle_common/modules/com.oracle.cie.config-wls-online_8.1.0.0.jar:/u01/oracle/wlserver/common/derby/lib/derbyclient.jar:/u01/oracle/wlserver/common/derby/lib/derby.jar:/u01/oracle/wlserver/server/lib/xqrl.jar

.

PATH=/u01/oracle/wlserver/server/bin:/u01/oracle/wlserver/../oracle_common/modules/org.apache.ant_1.9.2/bin:/usr/java/jdk1.8.0_101/jre/bin:/usr/java/jdk1.8.0_101/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/base_domain/bin:/u01/oracle

.***************************************************

* To start WebLogic Server, use a username and *

* password assigned to an admin-level user. For *

* server administration, use the WebLogic Server *

* console at http://hostname:port/console *

***************************************************starting weblogic with Java version:

java version"1.8.0_101"Java(TM) SE Runtime Environment (build1.8.0_101-b13)

Java HotSpot(TM)64-Bit Server VM (build 25.101-b13, mixed mode)

Starting WLS with line:/usr/java/jdk1.8.0_101/bin/java -server -Djava.security.egd=file:/dev/./urandom -Dweblogic.Name=AdminServer -Djava.security.policy=/u01/oracle/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Djava.endorsed.dirs=/usr/java/jdk1.8.0_101/jre/lib/endorsed:/u01/oracle/wlserver/../oracle_common/modules/endorsed -da -Dwls.home=/u01/oracle/wlserver/server -Dweblogic.home=/u01/oracle/wlserver/server -Dweblogic.utils.cmm.lowertier.ServiceDisabled=true weblogic.Server

修改yaml文件中的limit参数,发现并不能影响JVM的size,开始怀疑JVM自己根据虚拟机以及启动的container实例的多少自动调整内存,调整replicationcontrol的数目,发现仍然每个进程JVM占用700m.

查阅相关材料,发现Linux Kernel cgroups针对JVM的内存控制机制如下:

kubernetes switch(-limits)以及docker switch(-m, –memory and –memory-swap)设置都是为了让linux内核决定是否kill掉进程,如果他们消耗比较接近的话,但JVM不会意识到有这个限制。

JVM的人体工程学机制(JVM ergonomic page)会优化成缺省占用1/4的物理内存,因为JVM并不意识到自己运行在container中,所以一个3G的虚拟机器,JVM最大占用的空间是3*1024/4=768M,正是我们在weblogic管理控制台上看到的jvm最大内存数.

如果我们采用limit或者-m 1G的参数,意味着Docker Daemon会限制1G的memory和1G的memory swap,也就是说你进程可以消耗接近2G的内存,不会被kill掉

如果我们想自己控制JVM所占用的heap size,我们可以通过在启动命令行中加入$JAVA_OPTIONS,比如:

$ docker run -d --name mycontainer8g -p 8080:8080 -m 800M -e JAVA_OPTIONS='-Xmx300m' rafabene/java-container:openjdk-env

如果是在kubernetes环境中,可以设置env环境变量把参数传入,因为setDomainEnv中,已经把JAVA_OPTIONS作为启动参数传入命令行。

示例如:

[root@k8s-master ~]# cat rc.yaml

apiVersion: v1

kind: ReplicationController

metadata:

name: helloworld-service

spec:

replicas:2template:

metadata:

labels:

weblogic-app: "helloworld"version:"0.1"spec:

containers:-name: weblogichelloworld

image:1213-helloworld:v1

env:- name: "JAVA_OPTIONS"value:"-Xms1024m -Xmx1024m"ports:- containerPort: 7001

---apiVersion: v1

kind: Service

metadata:

name: helloworldsvc

labels:

weblogic-app: helloworld

spec:

type: NodePort

ports:- port: 7001protocol: TCP

targetPort:7001name: http

nodePort:30001selector:

weblogic-app: helloworld

通过kubectl logs察看pods日志,可以看到-Xms和-Xmx已经被设置,

JAVA Memory arguments: -Djava.security.egd=file:/dev/./urandom

.

CLASSPATH=/u01/oracle/wlserver/../oracle_common/modules/javax.persistence_2.1.jar:/u01/oracle/wlserver/../wlserver/modules/com.oracle.weblogic.jpa21support_1.0.0.0_2-1.jar:/usr/java/jdk1.8.0_101/lib/tools.jar:/u01/oracle/wlserver/server/lib/weblogic_sp.jar:/u01/oracle/wlserver/server/lib/weblogic.jar:/u01/oracle/wlserver/../oracle_common/modules/net.sf.antcontrib_1.1.0.0_1-0b3/lib/ant-contrib.jar:/u01/oracle/wlserver/modules/features/oracle.wls.common.nodemanager_2.0.0.0.jar:/u01/oracle/wlserver/../oracle_common/modules/com.oracle.cie.config-wls-online_8.1.0.0.jar:/u01/oracle/wlserver/common/derby/lib/derbyclient.jar:/u01/oracle/wlserver/common/derby/lib/derby.jar:/u01/oracle/wlserver/server/lib/xqrl.jar

.

PATH=/u01/oracle/wlserver/server/bin:/u01/oracle/wlserver/../oracle_common/modules/org.apache.ant_1.9.2/bin:/usr/java/jdk1.8.0_101/jre/bin:/usr/java/jdk1.8.0_101/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/base_domain/bin:/u01/oracle

.***************************************************

* To start WebLogic Server, use a username and *

* password assigned to an admin-level user. For *

* server administration, use the WebLogic Server *

* console at http://hostname:port/console *

***************************************************starting weblogic with Java version:

java version"1.8.0_101"Java(TM) SE Runtime Environment (build1.8.0_101-b13)

Java HotSpot(TM)64-Bit Server VM (build 25.101-b13, mixed mode)

Starting WLS with line:/usr/java/jdk1.8.0_101/bin/java -server -Djava.security.egd=file:/dev/./urandom -Dweblogic.Name=AdminServer -Djava.security.policy=/u01/oracle/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Xms1024m -Xmx1024m -Djava.endorsed.dirs=/usr/java/jdk1.8.0_101/jre/lib/endorsed:/u01/oracle/wlserver/../oracle_common/modules/endorsed -da -Dwls.home=/u01/oracle/wlserver/server -Dweblogic.home=/u01/oracle/wlserver/server -Dweblogic.utils.cmm.lowertier.ServiceDisabled=true weblogic.Server

转到WebLogic管理控制台去查看已经设置成功。

5b51e0df42352f114fa79ee78b5c43f0.png

参考文档:

https://developers.redhat.com/blog/2017/03/14/java-inside-docker/

https://fabiokung.com/2014/03/13/memory-inside-linux-containers/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值