前提说明:
为公司新的架构的技术选型为,springCloud 架构搭建微服务,在ECS以docker形式,部署每个微服务。并为每个docker容器,设置内存限制。在服务部署上线后,发现经常有微服务,莫名的停止。日志上却没有任何error错误。很让人捉急。
具体配置如下:
1、docker 容器的创建:
docker run -dit \
-m 640M --memory-swap -1 \
--net docker-network-dev \
--ip 192.168.0.100 \
--restart=always \
--privileged=true \
--name=keda6-dev-information-main \
--hostname=slave_informationr_main \
-v /home/docker/springCloud/project/keda6-information-main/:/var/local/project/ \
-v /home/springCloud/project/keda6-information-main/:/home/springCloud/ \
-v /etc/localtime:/etc/localtime \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-p 30009:30009 \
-p 20209:20209 \
-p 20009:9820 \
-p 2199:22 \
seowen/jdk8u241-project:latest \
/usr/sbin/init
为容器配置 640M的内存限制,但不限制 虚拟内存的使用。
2、jar 启动命令如下(start.sh):
#!/bin/bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
sh stop.sh
#sh jmx.sh
JARR=$(ls -lt /var/local/project/ | grep 'keda-' | head -n 1 |awk '{print $9}')
nohup java \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=192.168.1.126 \
-Dcom.sun.management.jmxremote.port=30009 \
-Dcom.sun.management.jmxremote.rmi.port=30009 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.access.file=/usr/local/jmx/jmxremote.access \
-Dcom.sun.management.jmxremote.password.file=/usr/local/jmx/jmxremote.password \
-Dcom.sun.management.jmxremote.ssl=false \
-Xms512m -Xmx512m -jar $JARR \
--server.port=9820 \
--eureka.instance.non-secure-port=20009 \
--management.server.port=20209 \
--eureka.instance.ip-address=192.168.1.126 \
--eureka.instance.hostname=192.168.1.126 --spring.profiles.active=dev &
重点如下:
-Xms512m -Xmx512m -jar $JARR
设置 jvm 的最大内存和初始内存均为512M,项目能顺利启动。 但是,经常不知所云的停止。 第一能想到的是,内存溢出,造成服务停止,但是查看日志,又没有任何相关信息。 无奈,只能先解决当前的问题,即,让服务停止后,能自动重启。 尽量保证服务的不可用时长,