cassandra-stress遇到“java.lang.OutOfMemoryError:Java堆空间”错误

时间:2013-12-04 08:54:10

标签: java cassandra out-of-memory cassandra-2.0

我正在尝试使用cassandra-stress工具在cassandra中插入记录。

cassandra-stress -d xx.xx.xx.xx -t 500 -c 1 -S 10240000

但我一直遇到以下错误:

Exception in thread "Thread-159" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Unknown Source)
        at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
        at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
        at java.lang.AbstractStringBuilder.append(Unknown Source)
        at java.lang.StringBuilder.append(Unknown Source)
        at org.apache.cassandra.stress.util.Operation.multiplyString(Operation.java:211)
        at org.apache.cassandra.stress.util.Operation.generateValues(Operation.java:92)
        at org.apache.cassandra.stress.operations.Inserter.run(Inserter.java:45)
        at org.apache.cassandra.stress.StressAction$Consumer.run(StressAction.java:275)

我尝试通过更改/ usr / bin / cassandra-stress中的java调用来增加堆:

$JAVA -server -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms8033M -Xmx8033M -Xmn400M -cp $CLASSPATH org.apache.cassandra.stress.Stress $@

请注意,cassandra本身没有显示任何错误。

我有一台运行Ubuntu 12.04.3 LTS(GNU / Linux 3.2.0-55-generic x86_64)的32 GB运行的四核机器。

2 个答案:

答案 0 :(得分:1)

如果你有32 GB,我会尝试更接近你拥有的内存量。我也会尝试更大的伊甸园尺寸。对于高负载系统,我会使用这样的东西。

-Xmn8g -Xmx24g

如果您愿意,也可以设置最小值,但可能没有帮助。

如果您使用这些设置监控系统,您可能会发现您不需要那么多内存,您可以减少它。如果这仍然太多,你需要减少压力测试或获得更大的盒子。

答案 1 :(得分:0)

您的堆似乎不适合您的使用情况。所以请遵循彼得的建议。但为了以防万一,您可以尝试使用Plumbr运行cassandra-stress,以确保它不会泄漏内存。