2012-02-02 21 views
6

我想停止卡桑德拉傾銷hprof文件,因爲我不需要使用它們。防止卡桑德拉傾銷hprof文件

我也有非常有限的磁盤空間(50GB中有50GB用於數據),並且在我說「停止」之前,這些文件佔用了所有的磁盤空間。

我應該怎麼辦?

有沒有一個shell腳本,我可以用來不時擦除這些文件?

回答

7

瞭解關於crontab的更多信息發生這種情況的原因是Cassandra以-XX:+HeapDumpOnOutOfMemoryError Java選項開頭。如果你想分析,這是好東西。另外,如果你得到很多堆轉儲,表明你應該調整Cassandra可用的內存。

我還沒試過。但要阻止此選項,註釋以下行$CASSANDRA_HOME/conf/cassandra-env.sh

JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError" 

或者,你可以發表評論此塊爲好,但不是真的需要,我想。我猜這個塊有1.0+版本。我在0.7.3中找不到這個。

# set jvm HeapDumpPath with CASSANDRA_HEAPDUMP_DIR 
if [ "x$CASSANDRA_HEAPDUMP_DIR" != "x" ]; then 
    JVM_OPTS="$JVM_OPTS -XX:HeapDumpPath=$CASSANDRA_HEAPDUMP_DIR/cassandra-`date +%s`-pid$$.hprof" 
fi 

讓我知道這是否工作。


更新

...我想這是JVM把它扔出來的時候卡桑德拉崩潰/關閉。任何方式來防止發生這種情況?

如果你想完全禁用JVM堆轉儲,看到這裏how to disable creating java heap dump after VM crashes?

+0

我也在評論它。但是我注意到的hprof文件並沒有遵循模板「cassandra-NNN.hprof」,而只是「pid-XXX.hprof」,所以我猜這是JVM在Cassandra崩潰/關閉時拋出它。任何方式來防止發生這種情況? – 2012-02-02 07:39:21

+1

@ Salocin.TEN請參閱更新 – Nishant 2012-02-02 07:46:22

+0

註釋$ CASSANDRA_HOME/conf/cassandra-env.sh中的塊沒有真正起作用。但是,由於鏈接和.hprof清除cron作業,現在一切正常。 再次感謝您的幫助。 – 2012-02-02 23:24:24

1

我承認我沒有使用Cassandra,但從我所知道的情況來看,它不應該轉儲任何hprof文件,除非在編譯時啓用它,否則程序會遇到OutofMemoryException異常。所以試試看那裏。

就shell腳本而言,如果文件被轉儲到特定位置,您可以使用此命令刪除所有* .hprof文件。

find /my/location/ -name *.hprof -delete 

這是使用從find-delete指令,刪除與搜索匹配的所有文件。如果您需要縮小範圍,請查看查找手冊頁以獲取更多搜索選項。

您可以使用cron在給定的時間運行腳本,這將滿足您的「時間」要求,大多數Linux發行版都安裝了cron,並且使用crontab文件。您可以使用man crontab

+0

謝謝!我也明白了這一點! 因爲實際上hprof文件出來時,我暫停了Cassandra實例,因爲它們被命名爲「pid-XXX.hprof」而不是「cassandra-XXX.hprof」 感謝您的shell腳本。我會執行它們。 :) – 2012-02-02 07:28:25

0

即使你更新cassandra-env.sh指向它仍然無法正常工作堆轉儲路徑。原因是從新貴腳本/ etc/init。d /卡桑德拉有這行創建缺省路徑HEAPDUMP

start-stop-daemon -S -c cassandra -a /usr/sbin/cassandra -b -p "$PIDFILE" -- \ 
    -p "$PIDFILE" -H "$heap_dump_f" -E "$error_log_f" >/dev/null || return 2 

我不是暴發戶專家,但我所做的只是去掉它創建重複的帕拉姆。另一個奇怪的觀察也通過ps aux檢查cassandra進程時,你會發現你會看到一些參數被寫入兩次。如果你輸入cassandra-env.sh並打印$ JVM_OPTS,你會注意到這些變量沒問題。