卡桑德拉磁盘io

时间:2013-11-09 10:09:59

标签: io cassandra disk

嘿,我想知道是否有人可以帮助我,我开始了解cassandra,但我很好奇,想要测量当我从列系列中读取时有多少磁盘I / O出现。

我查看了opscentre profiler,但我能找到的唯一指标是DIsk利用率,但据我所知,这是CPU花费在磁盘I / O上的时间,因此我猜测它的测量内容如上下文切换时间。然而,既然这样做,我想也许有一点,当cassandra意识到它必须转到磁盘然后我可以在那里放一个计数器。

另一个选项可以在读取调用周围放置两个时间戳,如果它是ms的顺序,那么我知道它是一个磁盘读取。但是我不完全确定系统调用的位置,我以为我将它放在reBuffer()方法的RandomAccessReader中(int n = super.read(buffer,read,buffer.length - read);)但是它没有'当我查询列族时,这似乎是这样。

简而言之,关于如何计算正在发生的磁盘I / O数量的任何想法?

2 个答案:

答案 0 :(得分:1)

iostat -m 1 -x打印出磁盘的各种统计信息,包括每秒的读取操作数。如果您有Cassandra的专用磁盘,这将告诉您读取I / O的总数,但这包括压缩。如果没有压缩运行,那么它将仅测量您的读取操作。

通过测量系统调用很难获得实际磁盘I / O的数量,因为即使Cassandra发出读取系统调用,也可以从文件系统缓存中读取它,而不是实际触摸磁盘。

在更糟糕的情况下,Cassandra将为每次读取做2个I / O.一个用于查找偏移量(如果keycache中没有偏移量且索引文件不在缓存中),另一个用于从SSTable检索数据(如果SSTable不在缓存中)。

答案 1 :(得分:0)

1-用于单个节点磁盘IOP

将以下脚本放在.sh文件中并安排它运行:

#!/bin/bash

 `echo date` 
  printf "\t\t\t\t\t\t\t\t nodetool info Information\n"
  printf "\t\t\t\t\t\t\t\t ***********************\n\n" 
 `echo nodetool info` 


  printf "\t\t\t\t\t\t\t\t iostat -c Information\n" 
  printf "\t\t\t\t\t\t\t\t ***********************\n\n" 
 `echo iostat -c` 

  printf "\t\t\t\t\t\t\t\t iostat -x -m 60 Information\n" 
  printf "\t\t\t\t\t\t\t\t *****************************\n\n" 
 `echo iostat -x -m 60 -d 1`

  printf "\t\t\t\t\t\t\t\t vmstat -s -S m 60 Information\n" 
  printf "\t\t\t\t\t\t\t\t *******************************\n\n"
 `echo vmstat -s -S m 60` 

  printf "\t\t\t\t\t\t\t\t nodetool cfstats Information\n"
  printf "\t\t\t\t\t\t\t\t **************************************************\n" 
 `echo nodetool cfstats` 

  printf "\t\t\t\t\t\t\t\t nodetool  tpstats\n" 
  printf "\t\t\t\t\t\t\t\t *************************************\n\n" 
 `echo nodetool tpstats` 
  printf "\n\n" 
  printf "___________________________________________________________________________________________________________________________\n\n"
  echo 'END'

2-用于网络IOP

安装Ganglia,它有一些不错的图表,并有实时监控