Docker常见问题

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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,430评论 11 349
  • 作者:Rafael Benevides 译者:李强 原文链接 如果你尝试在容器中运行Java程序,或者专注于Do...
    herryliq阅读 5,374评论 0 1
  • 离下班还有一个半小时,我已经按耐不住,为了不耽误我今天拿到快递,我已经让我妈去替我取了,我怕我下班到家的时候刚好快...
    会发光的黑暗少女阅读 2,920评论 0 0
  • 67. Add Binary 题目:https://leetcode.com/problems/add-binar...
    oo上海阅读 1,664评论 0 0
  • 先给大家讲个故事名字叫——哈基姆医生什么都懂。 一个男子因重病卧床不起,看起来离死不远了。他的妻子喊来了哈基姆医生...
    哈哈兴鸿阅读 1,820评论 0 0