【问题标题】:Relation between memory host and memory arguments xms and xmx from JavaJava中的内存主机和内存参数xms和xmx之间的关系
【发布时间】:2016-08-20 17:33:38
【问题描述】:

我有以下主机的内存详细信息:

$free -m
             total       used       free     shared    buffers     cached
Mem:          7872       7579        292         17        483       3983
-/+ buffers/cache:       3112       4759 
Swap:         2047         14       2033

我有一个使用参数-Xms200m -Xmx200m 运行的 java 应用程序,有人可以解释一下为什么 VCZ 是 3800076 而 RSS 是 241304(更多的是 Java 参数)

来自ps -aux 命令:

66345     6773  0.2  2.9 3800076 241304 ?      Sl   Apr1  12:06 /apps/myapps/myapp1/java/bin/java -Xms200m -Xmx200m

【问题讨论】:

  • 那是哪个 Java 版本?
  • 在主机中使用 Java 8

标签: java linux memory memory-management


【解决方案1】:

Java 进程使用的内存(如操作系统所见)不仅限于 Java 堆。还有更多的内存区域也应该计算在内:

  • 元空间(类元数据所在的位置);
  • 代码缓存(存储 JIT 编译的方法和所有生成的代码);
  • 直接字节缓冲区;
  • 内存映射文件,包括 JVM 映射的文件,例如类路径上的所有 JAR 文件;
  • 线程堆栈;
  • JVM 代码本身以及 Java Runtime 加载的所有动态库;
  • 其他内部 JVM 结构。

使用NativeMemoryTrackingJDK特性获取JVM使用内存区域的详细分解:

java -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics

【讨论】:

  • 能否请您添加对docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/… 的引用。然后我会投票:-P
  • 这使得规划 VM 以部署 JVM 应用程序变得困难。曾经将 mx、mss、permgen 设置为低于物理内存大小的特定值,这样你就安全了。现在我有一些 JVM,它们的 mx 为 12g,但它们的 VSS 大小是原来的两倍,并且超过了机器上可用的总内存——我认为这是一场等待发生的灾难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 2010-11-14
  • 2018-07-25
  • 2011-03-06
  • 2014-06-18
相关资源
最近更新 更多