【问题标题】:What is a suitable fraction of process virtual memory size as the resident memory size进程虚拟内存大小作为常驻内存大小的合适比例是多少
【发布时间】:2020-12-29 06:50:28
【问题描述】:

我们使用 1 GB 作为我们应用程序的 Java 内存 (-Xmx) 大小。但它运行缓慢,因为它正在处理大量消息。内存使用情况是这样的:

PID     USER        PR  NI  VIRT         RES    SHR S %CPU %MEM    TIME+    COMMAND                                                                                         
34536 javarunner    20   0  5724m        970m  13m  S  6.3  0.3   22:48.69   java

即虚拟内存为5724m,驻留集大小为970m。

在虚拟内存是驻留集大小的 5 倍的情况下,这样的内存利用率被认为可以吗? 对于这个比率,我们应该保持任何公式或准则吗?

【问题讨论】:

  • 为什么在不解释原因的情况下对真正的问题给出负分。我不是要求别人在这里做我的功课。只是询问有关此方面的任何可用指南或良好做法。
  • 更多信息会很好。你实际上有多少物理内存?你有gc日志吗?您选择了什么收集器或正在运行默认收集器?你运行的是什么JDK版本?一般来说,在已被分页到 vm 的堆上运行 gc 会产生可怕的性能。
  • Erik... 答案应该与我使用的编程语言无关。因为这可能是一个通用问题,即我们应该在 windows、linux 机器中保持虚拟内存和剩余内存的比例。
  • zimmer 为什么会这样?不同的语言和运行时有不同的行为并且对例如换出内存的反应不同。 JVM gc 进程对换出的堆反应很糟糕。看你的帖子,我猜你收到了大量的消息,而 gc 是你性能问题的罪魁祸首。
  • Erik .. 我们有 300 GB 的内存。但我不会将 5gb 分配给一个进程,这可能会偶尔出现峰值。 1gb 总体来说还是不错的。我已经进一步检查了我的问题,即使在使用 1gb 的 -Xmx 重新启动进程时,操作系统(redhat)正在分配 5724 mb 的虚拟内存。所以缓慢不是由于虚拟内存。后来我发现我们的数据库(sybase ASE,15.7)间歇性地运行缓慢,这导致了这个问题。但我要求提供关于虚拟到 REs 内存的指南,我在下面得到了这些指南。因此,感谢您的时间和关注。赞赏。

标签: java performance memory


【解决方案1】:

这里我是根据谷歌的一些研究来回答的,并且在各种文章中都提到了这一点。

“Microsoft 建议您将虚拟内存设置为计算机 RAM 量的不小于 1.5 倍且不超过 3 倍。”

在微软官方文档中没有发现任何直接提及这一点。但谷歌结果充斥着这个答案。我相信这个比率在 linux/unix 操作系统的情况下也应该保持良好。 此外,这个比率应该是通用的,正如预期的那样,与应用程序使用的编程语言无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2023-03-05
    • 2018-07-27
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多