首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存不足,CPU消耗低

内存不足,CPU消耗低
EN

Stack Overflow用户
提问于 2017-04-14 08:10:10
回答 2查看 1.3K关注 0票数 2

我正在尝试调优某种高负载的应用程序,它通过预处理将数据从一个云流到另一个云端。我的应用程序的具体特点是内存的广泛使用和较低的CPU消耗。我用j控制台监视了这个应用程序,并找到了一些有趣的图片-- cpu的加载率高达15%,而且我仍在捕捉内存不足的错误。

手动触发来自j控制台的“执行GC”将在所有代中清除大量内存,因此我假设应用程序中没有内存泄漏。

我的应用程序是在mesos/马拉松上运行的,所以我尝试用各种GCs (-XX:+UseG1GC;-XX:+UseParallelGC,无需其他调优)在单个虚拟CPU之间切换到多个CPU,并且图片实际上是一样的;

  • 那么,为什么GC不使用CPU来释放内存呢?
  • 我们能对GC进行调优以获得更频繁/更合适的工作吗?

运行时度量:

系统配置:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-19 09:23:07

我想我应该把我的调查结果告诉大家。

“内存不足”--这是我从DevOps得到的东西--伙计,我首先想到的是-- OutOfMemoryException。所以,谢谢亚历克斯的clarifying question

在我的例子中,它是来自底层操作系统的码头环境中的OOMKill。我为容器分配了1G,并将java堆大小限制为736米。但是我的应用程序使用netty,它通过堆分配自己的内存缓冲区。因此,当出现更多的连接时,netty分配了更多的直接缓冲区,这导致了OOMKill,尽管堆是健康的。

票数 1
EN

Stack Overflow用户

发布于 2017-04-19 09:55:36

当应用程序需要释放内存时,GC将运行。GC是昂贵的操作,只有在需要时才能运行。我不知道您为什么要将CPU利用率与运行GC联系起来。CPU利用率与运行GC应用程序无关。如果VM线程决定运行GC,它将暂停所有正在运行的应用程序线程(Safepointing),并允许GC执行操作,因此CPU Java的使用量保持不变,这与您剩下的CPU数量无关。

有许多GC标志可以用来完善您的应用程序,我将无法提出任何不确定您的应用程序到底是什么?

下面可能的链接将帮助您http://www.cubrid.org/blog/dev-platform/how-to-tune-java-garbage-collection/ https://confluence.atlassian.com/enterprise/garbage-collection-gc-tuning-guide-461504616.html

您应该知道在哪里可以获得OOM、老一代、Metaspace、Codegen或本机,因此可以使用堆选项进行微调。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43407713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档