问题描述
我正在Kubernetes吊舱中运行apache,我被随机的OOM杀死apache进程困扰,我不确定原因。
该容器有600M的内存限制,即使PHP每次运行有128 MB的限制,它似乎也可以很容易地使用它。观察item.status
时,我可以定期看到:
dmesg -w
- 如何确定此OOM杀机与机器或吊舱限制有关?
- 有几个Apache吊舱,我不确定如何识别此过程所属的吊舱。有办法吗?
- 如果在Pod中可以访问这些线程,那就太好了,因此可以看到实际上属于Pod的被杀死线程(理想情况下是错误输出)。有可能吗?
解决方法
以相同的顺序覆盖您的问题:
-
运行Pod的名称空间中的
-
kubectl get events
。您将看到Kubernetes OOM事件。如果什么都没有,那就是内核本身。 -
有一个project called
pid2pod
,但它仅显示仍在运行的内容。另一个选择是将dmesg路由到stdout(在容器OS级别上)并实现centralized log collection with Kubernetes metadata enrichment。然后,每个日志事件将在元数据中具有pod id。 -
不确定您要在这里解决什么。通常,一个吊舱(我假设一个容器)就是一个过程。一旦被OOM杀死,没有其他东西可以在吊舱内对此采取任何措施。响应此事件并重新创建Pod是控制器(
Deployment
的责任。如果您只想在其余Pod中监视OOM,则可以实现kubewatch之类的smt。不幸的是,我没有一个项目可以让您直接在pod内进行订阅,但这可以作为示例。或者,如果是集中式日志记录,则可以订阅Pod中的日志流。