【问题标题】:Cassandra heap size configuration not changingCassandra 堆大小配置不变
【发布时间】:2019-08-27 04:18:54
【问题描述】:

详细信息: 节点有 31G 内存。 DSE: 5.1.3 => Cassandra 3.11.2

java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

尝试的配置更改如下。

尝试更改 cassandra-env.sh

MAX_HEAP_SIZE="16g"
HEAP_NEWSIZE="16g"

另外,将 cassandra-env.sh 中的 $CASSANDRA_CONF 更新到 /etc/dse/cassandra 并尝试了。

而且还厌倦了通过在 cassandra-env.sh 文件中注释掉来更改 jvm.options

-Xms16G
-Xmx16G

进行上述任何更改,为什么堆大小没有更改为 16GB。

1)

java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize'
uintx MaxHeapSize                              := 8392802304                          {product}
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

2)

java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=524467520 -XX:MaxHeapSize=8391480320 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

为什么虽然设置为 16GB,但它只显示大约 8GB,为什么 maxheapsize 与 JVM 标志输出存在差异。

【问题讨论】:

  • 当您运行java -XX:+PrintFlagsFinal 时,您只是启动了一个与Cassandra 完全没有联系的 Java 进程。如果要检查现有 Java 进程,请改用jcmd。例如。 jcmd PID VM.flagsjcmd PID GC.heap_info
  • 谢谢,但是为什么 MaxHeapSize 与 +PrintCommandLineFlags 和 +PrintFlagsFinal 有区别
  • PrintFlagsFinal 在应用 JVM 人体工程学、调整、对齐等之后打印 final 值。在这种情况下,8392802304 是将 8391480320 舍入到 2 MB 边界的结果(请记住关于我在previous answer) 中提到的堆对齐?
  • 是的,这就是混乱的地方。我认为应该是 2MB 或 0 的差异。所以 1321984(1.2MB) 的差异是四舍五入的差异(为什么要四舍五入?)。那么,在哪些情况下我们需要使用这些标志“+PrintCommandLineFlags & +PrintFlagsFinal”,如果它们提供新的 java 进程输出(是否只是为了知道可用的默认值)。
  • 我从未使用过PrintCommandLineFlags。但PrintFlagsFinal 实际上对于查看 JVM 选项及其默认值或覆盖值的整个列表很有用。

标签: cassandra jvm datastax


【解决方案1】:

请检查您的 /etc/dse/cassandra/jvm.options 文件(查找 -Xmx 和 -Xms)。如果该文件中有设置,我相信它们会覆盖您的 cassandra-env.sh。 “ps -ef | grep java”向您展示了 dse/cassandra 进程(查找 Xmx 和 Xms)的哪些内容?

【讨论】:

  • 在 cassandra-env.sh 中启用 MAX_HEAP_SIZE 时,我已经注释掉了 jvm.options 文件中的参数,反之亦然。 "ps -ef | grep java" 显示为 "-Xms16G -Xmx16G" 但是为什么标志显示为 8GB。
  • 你只是自己运行java命令吗?这个命令是从哪里来的?你关心的是 cassandra 正在运行的那个,而不是你自己运行的 java 命令,这看起来像你在做什么(但我不确定)
  • 是的,我正在寻找 DSE/Cassandra 进程用于堆的多少。所以运行打印标志,认为它们将显示正在运行的 JVM 详细信息。
猜你喜欢
  • 2021-06-12
  • 2013-10-09
  • 2013-10-21
  • 2013-12-05
  • 2011-05-18
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2015-12-30
相关资源
最近更新 更多