java 容器启动到一半,突然就死掉了,查看日志,发现“ killed ”
why? 凭感觉是 容器需要的内存超过了 k8s 的限制,被k8s 杀掉了, 但是竟然k8没有日志。 好吧,可能是我不会查看k8s 的日志。
试了两个方法:
1、内核日志 /var/log/messagesdmesg打印环形缓冲区的内容。这些信息还会实时发送到syslogd或klogd(在它们运行时),最终以形式发送给/var/log/messages;什么时候dmesg最有用是捕获之前syslogd和/或klogd开始的启动时消息,以便将它们正确记录。
2、dmesg | grep -i -B100 'killed process'一旦设置了内存限制,将立即生效,并且当物理内存使用量达到limit的时候,memory.failcnt的内容会加1,但这时进程不一定就会被kill掉,内核会尽量将物理内存中的数据移到swap空间上去,如果实在是没办法移动了(设置的limit过小,或者swap空间不足),默认情况下,就会kill掉cgroup里面继续申请内存的进程。
基本找到原因,后面修改yaml, 把内存放大了点,就没有了这个错误!
参考:
https://www.jianshu.com/p/a9288b7edfa3
http://www.dockone.io/article/5932
https://blog.csdn.net/u012516914/article/details/109108660