我在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的原因可能是什么?有没有办法调试这个?
非常感谢任何指导。感谢
答案 0 :(得分:1)
我无法从您发布的错误消息中得知,但通常这是内核OOM Killer(Out of Memory Killer)取消您的过程的结果。这可能是因为您的进程只是占用了太多内存,或者您的容器上有一个cgroup设置过于激进并导致它被杀死。您可能还为VirtualBox实例分配了不足的内存。
通常情况下,您会看到Docker通过docker ps -a
dmesg
或您所讨论的节点上的系统日志可能会显示内核OOM杀手输出。