防止Cassandra转储hprof文件

我想阻止Cassandra转储hprof文件,因为我不需要使用它们。

我也有非常有限的磁盘空间(100 GB中的50GB用于数据),这些文件吞噬了所有磁盘空间,然后才能说“停止”。

我该怎么办呢?

是否有我可以用来擦除这些文件的shell脚本?

这是因为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 

如果这有效,请告诉我。


更新

…我猜是当Cassandra崩溃/关闭时,JVM会抛弃它。 有什么方法可以防止这种情况发生?

如果要完全禁用JVM堆转储,请参阅此处如何在VM崩溃后禁用创建Java堆转储?

我承认我没有使用过Cassandra,但据我所知,它不应该转储任何hprof文件,除非你在编译时启用它,否则程序会遇到OutofMemoryException。 所以试试看那里。

就shell脚本而言,如果将文件转储到特定位置,则可以使用此命令删除所有* .hprof文件。

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

这是使用find中的-delete指令删除与搜索匹配的所有文件。 如果您需要更多地缩小搜索选项,请查看手册页以查找更多搜索选项。

您可以使用cron在给定时间运行脚本,这将满足您的“时间”要求,大多数Linux发行版都安装了cron,并且可以使用crontab文件。 您可以使用man crontab找到有关crontab的更多信息

即使你更新cassandra-env.sh指向heapdump路径它仍然无法工作。 原因是从upstart脚本/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 

我不是一个新贵专家,但我所做的只是删除了创建副本的param。 另一个奇怪的观察也是通过ps aux检查cassandra过程时你会注意到你会看到一些参数写入两次。 如果您使用cassandra-env.sh并打印$ JVM_OPTS,您会注意到这些变量没问题。