【发布时间】:2013-03-30 10:30:08
【问题描述】:
我们正在通过尝试一些长期运行的测试用例(压力测试)来对 Cassandra 进行一些试验,并且我们在任何给定时间都在集群的一个节点上遇到了一些内存问题(它可能是集群上的任何机器!)
我们正在一台装有 Windows Server 2008 和 8 GB RAM 的机器上运行带有 Cassandra 1.1.6 的 DataStax Community。此外,我们将堆大小配置为 2GB,而不是默认值 1GB。
日志中的一个 sn-p:
java.lang.OutOfMemoryError: Java 堆空间
将堆转储到 java_pid2440.hprof ...
已创建堆转储文件 [11.713 秒内 1117876234 个字节]
ERROR 22:16:56,756 线程异常 [CompactionExecutor:399,1,main]
java.lang.OutOfMemoryError: Java 堆空间
在 org.apache.cassandra.io.util.FastByteArrayOutputStream.expand(FastByteArrayOutputStream.java:104)
在 org.apache.cassandra.io.util.FastByteArrayOutputStream.write(FastByteArrayOutputStream.java:220)
在 java.io.DataOutputStream.write(Unknown Source)
调查和解决此问题的任何指示/帮助。??
【问题讨论】:
-
您能否详细说明您要插入的内容以及插入的位置(键、列名等)?你用什么设置来声明你的集群和键空间?任何细节都可能是相关的。
-
我正在使用以下命令创建键空间:CREATE KEYSPACE T_V_0 with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy' and strategy_options = {replication_factor:1};
-
这些列基本上有一个 DateType、UUIDType、3 个 IntegerType、2 个 LongType 和 1 个 DoubleType,其中 WITH 比较器 = UTF8Type AND key_validation_class= UTF8Type AND default_validation_class= UTF8Type
-
您是否总是在同一个地址(键+列名)插入?由于 UTF8Type 与其他验证不兼容,您不会在某些写入时遇到写入错误(您可能应该保留为字节......这是默认设置,允许您在一行中有多种类型的列)。
-
不,我不在同一个地址插入。列名是 UTF8Type,我使用的唯一键是 UUID 和 TimeStamp 的组合,因此永远不会重叠。我能够成功插入数据。只有当我连续插入超过 10 亿条记录时,集群中的一个节点才会出现 OutOfMemory 异常。这可以是任何节点,但我相信它主要是接受来自客户端的最大连接的节点。
标签: cassandra datastax-enterprise