Chinaunix首页 | 论坛 | 博客
  • 博客访问: 211789
  • 博文数量: 57
  • 博客积分: 460
  • 博客等级: 一等列兵
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-04 23:28
文章分类
文章存档

2015年(1)

2013年(6)

2012年(19)

2011年(31)

分类:

2011-11-30 23:41:02

原文地址:cassandra 调优 作者:grepkey

   系统环境: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"

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

 

 

 

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