2013-11-09 211 views
1

嘿,想知道是否有人可以幫助我,我正在瞭解cassandra,但我很好奇,想要測量當我從列家庭閱讀時發生了多少磁盤I/O。Cassandra磁盤io

我看着opscentre分析器,但我能找到的唯一指標是DIsk利用率,但從我所瞭解的這是CPU花在做磁盤I/O上的時間,所以我猜測它的測量內容像上下文切換時間。然而,既然它這樣做,我想也許cassandra意識到它必須要到磁盤,那麼我可以在那裏放一個計數器,這一定是有意義的。

另一個選項可以放在讀取調用周圍的兩個時間戳,如果它是在ms的順序,那麼我知道它的磁盤讀取。然而,我不完全確定系統調用的位置,我認爲我在reBuffer()方法(int n = super.read(buffer,read,buffer.length - read);)中找到它在RandomAccessReader中,當我查詢列系列時,t似乎是這樣。

總之,有關如何計算出現的磁盤I/O數量的想法?

回答

1

iostat -m 1 -x爲您的磁盤打印出各種統計數據,包括每秒讀取操作的數量。如果您有Cassandra的專用磁盤,它會告訴您讀取I/O的總數,但這包括壓縮。如果沒有壓縮運行,那麼它將只測量您的讀取操作。

通過測量系統調用很難獲得實際磁盤I/O的數量,因爲即使Cassandra發出讀取系統調用,它也可能從文件系統緩存中讀取,而不是實際接觸磁盤。

在最糟糕的情況下,Cassandra會爲每次讀取做2個I/O。一個用於查找偏移量(如果keycache中沒有偏移量且索引文件不在緩存中),另一個用於從SSTable中檢索數據(如果SSTable不在緩存中)。

+0

非常感謝您的答覆。我會嘗試按照你的建議使用iostat。 – user2971608

0

1-用於在sh文件將下面的腳本個體節點磁盤IOPS

,並安排它來運行:

#!/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

安裝神經節,它具有一些不錯的圖表,並有實時監控