被杀死的Kubernetes吊舱中的jvm堆使用历史记录

被杀死的Kubernetes吊舱中的jvm堆使用历史记录,kubernetes,memory-leaks,jvm,out-of-memory,kubernetes-pod,Kubernetes,Memory Leaks,Jvm,Out Of Memory,Kubernetes Pod,我在kubernetes中部署了一个基于play框架的java应用程序。其中一个豆荚因内存不足/内存泄漏而死亡。在本地,可以使用一些实用程序并监视jvm堆的使用情况。我是库伯内特斯的新手 如果您能告诉我如何在一个被杀死的Kubernetes吊舱中检查我的应用程序的堆使用历史记录,我将不胜感激。kubectl get events on this killed pod将提供事件历史记录,但我想检查该dead pod上的对象堆使用历史记录。非常感谢您可以安装插件或外部工具,如或 是一个开源的系统监视

我在kubernetes中部署了一个基于play框架的java应用程序。其中一个豆荚因内存不足/内存泄漏而死亡。在本地,可以使用一些实用程序并监视jvm堆的使用情况。我是库伯内特斯的新手


如果您能告诉我如何在一个被杀死的Kubernetes吊舱中检查我的应用程序的堆使用历史记录,我将不胜感激。kubectl get events on this killed pod将提供事件历史记录,但我想检查该dead pod上的对象堆使用历史记录。非常感谢

您可以安装插件或外部工具,如或

是一个开源的系统监视和警报工具包,最初构建于

您可以定义查询: 对于CPU百分比

avg((sum (rate (container_cpu_usage_seconds_total {container_name!="" ,pod="<Pod name>" } [5m])) by (namespace , pod, container ) / on (container , pod , namespace) ((kube_pod_container_resource_limits_cpu_cores >0)*300))*100)
avg((avg (container_memory_working_set_bytes{pod="<pod name>"}) by (container_name , pod ))/ on (container_name , pod)(avg (container_spec_memory_limit_bytes>0 ) by (container_name, pod))*100)
下面的命令将为您提供给定pod及其容器的CPU使用率和内存使用率

请参阅如何首先安装metrics服务器:

否则,如果您想在不安装任何第三方工具的情况下检查cpu/内存使用情况,那么您可以从cgroup获取pod的内存和cpu使用情况

  • 转到正在运行的容器的外壳
    kubectl exec pod_name--/bin/bash
  • 转到
    cd/sys/fs/cgroup/cpu
    了解cpu使用情况运行
    cat cpuacct.usage
  • 转到
    cd/sys/fs/cgroup/memory
    了解内存使用情况运行
    cat memory.usage(以字节为单位)
  • 请记住,内存使用量是以字节为单位的


    看一看:。

    谢谢。请看上面哪一项可以提供面向对象的堆使用率?这取决于,使用Grafana安装prometheus将为您提供更广泛的图片-带有图表(具有时间依赖性),它们非常有用。设置just metrics server并执行命令kubectl top,将为您提供简单的输出。但是,如果您正在使用GCP,则可以在仪表板中监视内存/cpu使用情况。您还可以在这里找到一些有用的解决方案,以减少jvm内存的使用。同时检查我的答案中的链接。我也从本周开始学习K8,所以放弃这个想法。如果OOM问题再次出现,那么如何将应用程序的GC日志和堆转储(由于OOM而崩溃时)保存到一个持久卷?这样,即使吊舱不见了,你仍然可以拥有它们,你可以对它们进行法医分析。在对OOM进行故障排除时,这两个工件是绝对必要的。
    $ kubectl top pod <your-pod-name> --namespace=your-namespace --containers