繁体   English   中英

如何找到Pod的最大内存?

[英]How to find maximum memory for pod?

我在kubernetes中运行了JVM应用程序。 当我运行kubectl top pod我可以看到以下内容

mypod1                    12m          6035Mi
mypod2                    11m          6129Mi
mypod3                    11m          6334Mi

我想知道6GB的内存好坏。 我的kubernetes部署yaml没有指定任何资源

问题

  • 如何找出最大数目?
  • 如何确定jvm是否运行良好?
  • 是否有可以连接到Pod中运行的jvm的探查器?

问题1:“如何找出最大数目?” 答:如果没有在部署中配置resources ,则Pod将具有BestEffort的QoS类,并且可以使用其运行所在节点上可用的内存。 另请参阅我对以下问题的回答: 如何知道Kubernetes吊舱有多少RAM?

恕我直言,始终至少将min( -Xms )和max( -Xmx )JVM堆指定为好习惯...

问题2:“我如何找出jvm是否运行良好?” 答:您可以先启用JMX,然后使用它来收集JVM和应用程序指标。 除了JolokiaPrometheus JMX Exporter之类的JMX到HTTP桥之外,它也是直接通过JMX连接的一种选择。 一种方法是:

  • 通过配置以下JVM启动参数来公开JMX:

     -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=4444 -Djava.rmi.server.hostname=127.0.0.1 

请注意,这会附加否则为动态的RMI端口并为RMI服务器设置主机名。

  • 将本地端口转发到Pod上的以下端口:

     kubectl --namespace=<namespace> port-forward <pod-name> 4444:4444 1099:1099 
  • 在本地启动一个可以通过JMX连接到Pod中的JVM的工具(jconsole,jvisualvm,jmc ...基于可用的工具)。 JMX URL将是:

     service:jmx:rmi://127.0.0.1:4444/jndi/rmi://127.0.0.1:1099/jmxrmi 

问题3:“是否有可以连接到Pod中运行的jvm的探查器?” 答:简短的答案是“是”。 我已经使用JProfiler通过端口转发远程分析了在k8s上运行的Java应用程序。 (我不隶属于JProfiler,也不在推广它-这只是我所帮助的团队获得许可的工具)

您可以使用Vertical Pod Autoscaler来根据容器的使用情况自动更新CPU /内存限制。

为了获得JVM指标,我建议您在服务器中安装一些prometheus插件并抓取指标。 然后,您可以查看有多少个对象处于活动状态以及世代信息,以更好地了解内存使用情况的原因以及如何对其进行控制。

您可以通过使用kubectl proxy公开相关端口来连接探查器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM