参数解释:

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