Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146355
  • 博文数量: 9
  • 博客积分: 214
  • 博客等级: 二等列兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-30 15:48
文章分类

全部博文(9)

文章存档

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_mb75%时,将内存中的数据flush到磁盘。

   commitlog_total_space_in_mbcassandra在运行导入数据的同时会记录相关日志,如果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操作;与此同时javagc机制也在实时监控,如果内存使用超过设置的阀值,就会对内存进行回收;

    现在我们的系统还是不稳定,所以调优还在进行当中,希望能早点稳定。

 

    这几天一直在改配置测试,现在终于稳定下来了,最终的配置是

    memtable_total_space_in_mb: 128

    commitlog_total_space_in_mb: 1024

    MAX_HEAP_SIZE="1G"
    HEAP_NEWSIZE="200M"

    由于用户测试的主机配置比较低,所以各参数调得都比较低。

 

 

 

阅读(3324) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

我是一粒糖2011-12-02 00:22:06

调试的过程是艰辛的!

小小小毛驴2011-11-30 23:41:31

恩,一个稳定的系统式多么的重要 啊