【发布时间】:2020-03-20 14:52:07
【问题描述】:
我已将 java 进程的选项设置为使用 1g 最大内存的 80%。但是当我使用“ps -o vsz”时,我看到它使用的是 3.5g(从 2.5g 开始)。这会导致大量交换并因此冻结设备。为什么会出现差异?
更新:JVM 的选项现在是:-Xmx256m -Xshare:off -XX:+UseSerialGC -XX:NativeMemoryTracking=summary -XX:MaxRAM=768m -XX:MaxRAMPercentage=60。他们似乎没有改变任何东西。该过程从 2.4g 开始,增长到 3.5g
更新 2:
openjdk version "14" 2020-03-16
OpenJDK Runtime Environment (build 14+36)
OpenJDK 64-Bit Server VM (build 14+36, mixed mode)
【问题讨论】:
-
Java 进程是做什么的?它是否分配堆外内存?
-
它读取文件。这是第三者,所以不确定。如何判断它是否分配了堆外内存(可能是 mmap 文件?),有没有办法限制它?
-
你正在传递
-XX:MaxRAM=800m? -
我开始将其设置为 1g。我现在的选择:-Xmx256m -Xshare:off -XX:+UseSerialGC -XX:NativeMemoryTracking=summary -XX:MaxRAM=768m -XX:MaxRAMPercentage=60
-
包括您的 JDK 版本详细信息、操作系统版本以及您能想到的任何其他技术详细信息。您似乎还包含了多个相互冲突的参数(
Xmx、MaxRAM和MaxRAMPercentage),所以这可能无济于事。