2011年(9)
分类: 数据库开发技术
2011-11-27 17:28:05
系统环境:Linux 2.6.32-71.el6.x86_64 4G内存
apache-cassandra-1.0.3
这几天cassandra起来后,运行导入数据程序,运行一段时间后节点就会down掉,由于之前对cassandra不熟悉,公司内知道这个东东的人也不多,所以只能自己看官方文档了。
主要有下面几个参数:
文件 cassandra-env.sh 中
MAX_HEAP_SIZE :java 堆总大小,cassandra是运行在java环境下的,java heap size 是cassandra 运行起来后内存的总大小。
HEAP_NEWSIZE="1G":heap size 初始化值
java gc 配置: JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=70" 当使用内存达到heap size的 70%时就执行java gc操作(垃圾回收)
文件cassandra.yaml 中
memtable_total_space_in_mb: cassandra运行导入时会先将数据放在内存中一个叫memtable的结构中,当数据量达到memtable_total_space_in_mb*flush_largest_memtables_at 大小时,cassandra会将内存中的数据flush到磁盘中。
flush_largest_memtables_at:定义flush的阀值(如0.75),即当内存中的数据量达到memtable_total_space_in_mb的75%时,将内存中的数据flush到磁盘。
commitlog_total_space_in_mb:cassandra在运行导入数据的同时会记录相关日志,如果flush_largest_memtables_at 机制没有生效,则会执行commitlog机制:当日志大于commitlog_total_space_in_mb 时也会执行flush操作。
key cached: cassandra运行查询时,会将本次查询的key保存在一块内存中,以便下次查询同一key时,可以直接在内存中取到key,这样可以加快查询速度。Defines how many key locations will be kept in memory per SSTable
rows_cached:定义row在内存中cache的大小,这个数可以定义为一个整数(代表多少个row)也可以是一个分数(这个不太理解不知道表示什么的百分比)。Specifies how many rows to cache in memory
我对cassandra导入运行机制的理解是这样的:当导入数据时,它先将数据放入内存中叫memtable的结构,当这个大小超过设置的阀值时,便执行flush操作;与此同时java的gc机制也在实时监控,如果内存使用超过设置的阀值,就会对内存进行回收;
现在我们的系统还是不稳定,所以调优还在进行当中,希望能早点稳定。
这几天一直在改配置测试,现在终于稳定下来了,最终的配置是
memtable_total_space_in_mb: 128
commitlog_total_space_in_mb: 1024
MAX_HEAP_SIZE="1G"
HEAP_NEWSIZE="200M"
由于用户测试的主机配置比较低,所以各参数调得都比较低。