【问题标题】:java process on windows using less memory than specified in -xms?windows上的java进程使用的内存少于-xms中指定的内存?
【发布时间】:2011-04-25 13:10:54
【问题描述】:

我正在使用“java -xms 1280m -xmx 1280m”命令启动我的服务器。在 Linux 机器上,这工作正常,我看到该进程使用几乎相同数量的内存。然而,在 Windows 机器上,我看到 java 进程使用的空间远少于 1280m - 大约 500-600m。我从 Windows 任务管理器收集了这些数据,如果这很重要的话。我检查的两台 Windows 机器都是 Windows 2003 服务器,分别有 2GB 和 3GB 的 RAM。 我一直认为用 -xms 指定初始堆大小将强制 java 至少使用那么多内存。我错了吗?或者,这是 Windows 上 java 的特性吗?

【问题讨论】:

  • 我不会发布答案,因为我目前无法检查。但是在 Windows 上,论点的大小写重要吗?我认为 x 需要是大写的,但不确定。在我的手机上,很抱歉拼写不好。

标签: java memory


【解决方案1】:

终于回到电脑前并进行了几次快速测试。

在我的 Windows XP 机器上运行 java -xms 会输出 Unrecognised option

运行java -Xms 时,我得到一个invalid intial heap size,这是正确的,因为我没有给出任何值,但它接受并识别该选项。

看来我的评论是有效的,您需要对命令的大小写进行排序。

【讨论】:

  • 感谢您的评论。我的错。我正在使用大写选项 -Xms。所以,这不是大小写的问题。
  • 其实我注意到你的问题是“启动我的服务器”。哪个服务器以及您如何实际设置 Xms 等。我问的原因是您正在使用的一些“run.bat”可能是忽略/覆盖/没有得到您的选择。
  • 我正在使用 JBoss,但我们使用自定义脚本启动它(不要问!)。 -Xms 正在脚本中设置,作为“java”命令的参数。
  • 我几乎没有想法。我的最后一个建议是使用 sysinternals Process Explorer 检查为 jboss 服务器启动的 java.exe,这将向您显示它实际收到的参数。如果 java 进程实际上正在获取您的选项......那么我很难过。
【解决方案2】:

除了 Kevin D 所说的大小写,请注意 32 位 Windows 系统通常具有最大堆大小的上限。它往往会因许多因素而异,但我经常在您尝试的 1280m 附近看到它。我怀疑这是这里的问题,但它可能是一个相关的问题。

【讨论】:

    【解决方案3】:

    Windows 任务管理器是为最终用户设计的,而不是为程序员设计的。后者通常更喜欢 Sysinternals 套件中的 Process Explorer (procexp.exe)。这与vmmap.exe 结合起来会告诉你到底发生了什么。

    【讨论】:

    • 没听说过 vmmap... 看起来很方便,我需要将它添加到我的工具箱中。谢谢。
    • 我会尝试进程资源管理器和 vmmap.exe。谢谢!
    【解决方案4】:

    仔细看。任务管理器经常具有误导性 - 默认情况下它不会显示进程分配了多少内存。相反,显示为“已用内存”的是为该进程换入的物理内存量。 在“查看”菜单中,选择“选择列”并添加“虚拟内存大小”。有你的记忆。你的应用程序显然从来没有真正使用超过 500-600m,所以它从来没有被交换过。

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2011-06-25
      • 2016-12-12
      • 2013-08-07
      相关资源
      最近更新 更多