0

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

在这个 react 应用程序中,我使用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 中)尝试了该应用程序,它没有任何 sigkills 就可以正常工作,因此它不能单独使用 webpack hmr。Kubernetes 会杀死使用大量内存的服务吗?(也许它认为我的应用程序正在使用大量内存)。如果不是这样,kubernetes 或 docker 发送 SIGKILL 的原因可能是什么?有没有办法调试这个?

非常感谢任何指导。谢谢

4

1 回答 1

1

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

通常你会看到 Docker 报告容器以代码 137 退出docker ps -a

dmesg或者您在相关节点上的系统日志可能会显示内核 OOM 杀手输出。

于 2017-04-12T21:48:22.630 回答