【问题标题】:jvm heap usage history in a killed Kubernetes pod已终止的 Kubernetes pod 中的 jvm 堆使用历史记录
【发布时间】:2021-03-03 15:09:42
【问题描述】:

我有一个基于播放框架的 java 应用程序部署在 kubernetes 中。其中一个 pod 因内存不足/内存泄漏而死亡。在本地,可以使用一些实用程序并监控 jvm 堆使用情况。我是 Kubernetes 新手。

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

【问题讨论】:

  • 我这周开始也在学习K8s,所以放弃这个想法。如果 OOM 问题反复出现,那么如何将应用程序的 GC 日志和堆转储(当它由于 OOM 崩溃时)保存到持久卷?这样,即使豆荚消失了,您仍然可以拥有它们,并且可以对它们进行取证分析。在对 OOM 进行故障排除时,这两个工件是绝对必要的。

标签: kubernetes memory-leaks jvm out-of-memory kubernetes-pod


【解决方案1】:

您可以安装插件或外部工具,例如 Prometheusmetrics-server

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

您可以定义查询: 对于 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)

看看:prometheus-pod-memory-usage

您可以使用 Grafana 可视化此类指标 - 看看如何使用 Prometheus 进行设置 - grafana-prometheus-setup

Metrics-server 是 Kubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源。

Metrics Server 从 Kubelets 收集资源指标,并通过 Metrics API 在 Kubernetes apiserver 中公开它们,供 Horizontal Pod AutoscalerVertical Pod Autoscaler 使用。 kubectl top 也可以访问 Metrics API,从而更轻松地调试自动缩放管道。

你可以执行:

$ kubectl top pod <your-pod-name> --namespace=your-namespace --containers

以下命令将为您提供给定 pod 及其容器的 CPU 使用率和内存使用率。

看看如何首先安装metrics-server:metrics-server-installtion

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

  1. 转到运行容器的外壳kubectl exec pod_name -- /bin/bash
  2. 转到cd /sys/fs/cgroup/cpu 以获取 CPU 使用率运行cat cpuacct.usage
  3. 转到cd /sys/fs/cgroup/memory 以了解内存使用情况运行cat memory.usage_in_bytes

请记住,内存使用量是以字节为单位的。

看看:memory-usage-kubernetes

【讨论】:

  • 谢谢。请问以上哪项可以提供对象明智的堆使用?
  • 视情况而定,使用 Grafana 安装 prometheus 将为您提供更广阔的视野 - 带有图表(具有时间依赖性),这非常有用。只设置 metrics-server 并执行命令 kubectl top,只会给你简单的输出。但是,如果您正在使用 GCP,则可以在仪表板中监控内存/cpu 使用情况。您还可以在这里找到一些有用的解决方案来减少 jvm 内存使用 - addshore.com/2020/05/…。还要检查我在答案中附加的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2020-11-17
  • 2017-07-09
  • 2019-01-31
  • 2016-08-09
  • 2019-04-04
  • 2021-10-02
相关资源
最近更新 更多