我想阻止Cassandra转储hprof文件,因为我不需要使用它们。
我的磁盘空间也非常有限(100 GB中有50 GB用于数据),在我说"停止"之前,这些文件就吞噬了所有的磁盘空间。
我该怎么做?
有没有一个shell脚本可以让我不时地删除这些文件?
-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在Cassandra崩溃/关闭时抛出的。有什么办法防止这种情况发生吗?
如果您想完全禁用JVM堆转储,请参阅此处如何在VM崩溃后禁用创建java堆转储?
我承认我没有使用过Cassandra,但据我所知,它不应该转储任何hprof文件,除非你在编译时启用它,或者程序遇到内存外异常。所以试着看看那里。
就shell脚本而言,如果文件被转储到特定位置,则可以使用此命令删除所有*.hprof文件。
find /my/location/ -name *.hprof -delete
这是使用来自find
的-delete
指令,该指令删除与搜索匹配的所有文件。如果您需要进一步缩小搜索范围,请查看手册页以查找更多搜索选项。
您可以使用cron
在给定的时间运行脚本,这将满足您的"时间到时间"要求,大多数linux发行版都安装了cron,并使用crontab
文件。您可以使用man crontab
来了解有关crontab的更多信息
即使更新cassandra-env.sh以指向heapdump路径,它仍然无法工作。原因是从暴发户脚本/etc/init.d/cassandra中有一行创建了默认的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,您会注意到这些变量还可以。