为什么在本地工作的服务会在docker中频繁获取kill信号?

时间:2017-04-12 21:00:38

标签: docker webpack kubernetes pm2 minikube

我在minikube(kubernetes)开发环境中的docker容器中托管了一个通用反应应用程序。我使用的是virtualbox,实际上我在这个虚拟机上有更多的微服务。

在这个反应应用程序中,我使用pm2重新启动应用程序以更改服务器代码,并使用webpack hmr在客户端代码更改时热重新加载客户端代码。

每说15-45秒,pm2正在向我发送以下消息,表明该应用因SIGKILL而退出。

App [development] with id [0] and pid [299], exited with code [0] via signal [SIGKILL]

我不能为我的生活弄清楚它为什么会发生。它是相对频繁的,但不是那么频繁,它每秒都会发生。这很烦人,因为每次发生时,我的webpack包都必须重新编译。

pm2在这种开发环境中可能会收到SIGKILL的原因是什么?另外,有哪些可能的调试方法?

我注意到我的服务使用pm2重新启动服务器更改时,它们只是后端服务时没有这个问题。即当他们没有webpack时。另外,我在应用程序的prod版本中没有看到这些SIGKILL问题。这表明webpack hmr setup,pm2和minikube / docker的组合存在一些问题。

我在本地尝试过这个应用程序(不是在docker / minikube中)并且它没有任何sigkill工作正常,所以它不能单独使用webpack hmr。 kubernetes会杀死使用大量内存的服务吗? (也许它认为我的应用程序使用了大量内存)。如果不是这样的话,kubernetes或docker发送SIGKILL的原因可能是什么?有没有办法调试这个?

非常感谢任何指导。感谢

1 个答案:

答案 0 :(得分:1)

我无法从您发布的错误消息中得知,但通常这是内核OOM Killer(Out of Memory Killer)取消您的过程的结果。这可能是因为您的进程只是占用了太多内存,或者您的容器上有一个cgroup设置过于激进并导致它被杀死。您可能还为VirtualBox实例分配了不足的内存。

通常情况下,您会看到Docker通过docker ps -a

中的代码137报告容器已退出

dmesg或您所讨论的节点上的系统日志可能会显示内核OOM杀手输出。