2012-02-02 15 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,你会注意到这些变量没问题。