防止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,您会注意到这些变量没问题。