与phpcassa的cassandra java堆空间问题

时间:2013-06-27 14:14:44

标签: cassandra phpcassa

我们目前正在使用ab工具进行一些压力测试。单个插入物在cassandra中表现很好。但是,当谈到批量插入时,我目前正在处理java内存不足错误:Java Heap Space。

我有一台安装了Ubuntu服务器13.04的虚拟机器,内置2G内存

我对cassandra的内部配置知之甚少。

我只是制作一个大小为100的批量插入(在BATCH中插入100个)。

在我看到此错误后,我已经不再cqlsh次访问,而是nodetool访问了近1小时。

如何在重载中修复此错误?

注意:对于HTTP POST次请求的单个插入,不会发生这种情况。

注意:在我的专栏系列中,我有一个包含TimeUUIDType的键,列值为int s和varchar s

更新:测试结果显示我在6000次请求之前没有任何错误。但是,当涉及到7000时,php代码会抛出以下内容:

Error connecting to 127.0.0.1: Thrift\Exception\TTransportException: TSocket: timed out reading 4 bytes from 127.0.0.1:9160

Morever,cassandra在重负荷中记录以下内容;

WARN [ScheduledTasks:1] 2013-06-28 03:43:07,931 GCInspector.java (line 142) 
Heap is 0.9231763795560355 full.  You may need to reduce memtable and/or cache sizes.
Cassandra will now flush up to the two largest memtables to free up memory.  Adjust
flush_largest_memtables_at threshold in cassandra.yaml if you don't want Cassandra to 
do this automatically

1 个答案:

答案 0 :(得分:2)

批处理听起来不像是一个足够大的数据集导致内存问题,所以这听起来像是虚拟机上的JVM问题。你分配了多少内存?

您可以通过启动JConsole进行检查(只需在终端/提示符下键入jconsole)并查看“内存”选项卡,特别是Max下的值:

JVM Memory Stats


由于 C * 的启动脚本中包含的XX:+HeapDumpOnOutOfMemoryError参数,您还可以获得有关导致崩溃的原因的详细信息,它基本上是一个存储导致内存问题的堆栈跟踪的日志文件

通常,堆大小由calculate_heap_sizes()中的cassandra-env.sh函数自动计算。但是,您可以通过将MAX_HEAP_SIZE设置为不同的值来覆盖生成的函数的数量。在174和174号线上使用相同的变量。用于设置最小和最大堆大小的cassandra-env.sh JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}"中的175。