Docker常见问题

2017-11-06  本文已影响0人  芒埃

1.docker容器一直重启:给docker容器限制资源,但容器中的jvm其实不受容器资源控制的,也就是说,如果容器被限制为500m, jvm的Xmx没做限制,此时应用程序会一直申请jvm内存而不做限制,当jvm分配的内存超过容器限制的内存500M后,docker就会通知linux内核杀死该容器进程.

要解决这个问题,就是要让jvm的Xmx设置的值永远小于容器限制的内存值. 自动化脚本如下:

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

RESERVED_MEGABYTES=40

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

else

echo -e '\033[31m容器内存未限制,默认jvm内存800M\033[0m'

export JAVA_OPTS="$JAVA_OPTS -Xmx800m"

echo JAVA_OPTS=$JAVA_OPTS

fi

其中9223372036854771712为/sys/fs/cgroup/memory/memory.limit_in_bytes中的值,该值代表容器的最大内存限制,如果没有任何指定,那么默认值为9223372036854771712 bytes .

(通过查看/var/log/message查看到linux内核杀死该容器进程,原因为OOM)

2.日志文件没有挂载到宿主机导致运行一定时间后容器硬盘资源不足.(容器应该只提供服务,不提供数据)

查看容器的磁盘占用:du -h -d1 /var/lib/docker/containers/

上一篇下一篇

猜你喜欢

热点阅读