常用环境设置jvm内存
参数解释:
Xms — 堆内存初始大小
Xmx — 堆内存最大值
MetaspaceSize — 永久内存初始大小
MaxMetaspaceSize — 永久内存最大值
-XX:+UseConcMarkSweepGC 使用cms并行垃圾回收机制
内存大小设置:
jstat -gc 进程号 查看OU即是老年代(KB)
根据老年代设置参数
Java堆大小设置,Xms 和 Xmx设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍
永久代 PermSize和MaxPermSize(元空间)设置为老年代存活对象的1.2-1.5倍。
年轻代Xmn的设置为老年代存活对象的1-1.5倍。
老年代的内存大小设置为老年代存活对象的2-3倍。
如果老年代约45M,则配置-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M -Xms180m -Xms180m
宿主机和docker的设置方法:
1、java -jar启动时指定内存大小
java -jar -Xms128M -Xmx256M -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=128M demo.jar
2、tomcat运行时指定内存大小
Linux下修改%TOMCAT_HOME%/bin/catalina.sh
JAVA_OPTS="-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -Xms128M -Xmx256M"
3、docker-compose启动时指定jvm
修改dockerfile 添加ENV JAVA_OPTS="-Xms1024M -Xmx1024M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseConcMarkSweepGC"
ENTRYPOINT ["/bin/sh", "-c", "java ${JAVA_OPTS} -Duser.timezone=Asia/Shanghai -jar -Xbootclasspath/a:/var/www/order/ cloud-order-web.jar"]
修改docker-compose.yml添加 environment模块,如下示例:
order:
build:
context: "/data/java-service/order/"
dockerfile: "Dockerfile"
image: order:v1
environment:
- JAVA_OPTS=-Xms1024M -Xmx1024M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseConcMarkSweepGC
container_name: "order"
ports:
- "18095:18095"
deploy:
resources:
limits:
cpus: "2.00"
memory: 1228M
reservations:
memory: 1126M
#env_file: /data/java-service/env_variables
restart: always
volumes:
- "/var/log/docker/order:/var/log/order"
- "/data/java-service/order/:/var/www/order/"
# 设置容器内用户权限为root
privileged: true
logging:
driver: "json-file"
options:
max-size: "500m"
environment:
- TZ=Asia/Shanghai