Предотвращение сброса Кассандрой файлов hprof - PullRequest
6 голосов
/ 02 февраля 2012

Я бы хотел запретить Кассандре сбрасывать файлы hprof, так как я не требую их использования.

У меня также очень ограниченное дисковое пространство (для данных используется 50 ГБ из 100 ГБ), и эти файлы поглощают все дисковое пространство, прежде чем я могу сказать «стоп».

Как мне это сделать?

Есть ли сценарий оболочки, который я мог бы использовать, чтобы время от времени стирать эти файлы?

Ответы [ 3 ]

7 голосов
/ 02 февраля 2012

Это происходит потому, что Cassandra запускается с -XX:+HeapDumpOnOutOfMemoryError опцией Java.Что хорошо, если вы хотите проанализировать.Кроме того, если вы получаете много дампов кучи, которые указывают на то, что вам, вероятно, следует настроить память, доступную Кассандре.

Я не пробовал.Но чтобы заблокировать эту опцию, прокомментируйте следующую строку в $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, см. Здесь как отключить создание дамп кучи Java после сбоя виртуальной машины?

1 голос
/ 12 октября 2015

Даже если вы обновите 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

Я не выскочка, но то, что я сделал, было просто удаленопараметр, который создает дубликат.Еще одно странное наблюдение, когда вы проверяете процесс cassandra с помощью ps aux , вы заметите, что некоторые параметры записываются дважды.Если вы загрузите cassandra-env.sh и напечатаете $ JVM_OPTS, вы заметите, что эти переменные в порядке.

1 голос
/ 02 февраля 2012

Я признаю, что я не использовал Cassandra, но, насколько я могу судить, он не должен создавать дамп файлов hprof, если вы не включите его во время компиляции, или программа не столкнется с OutofMemoryException. Поэтому попробуйте поискать там.

с точки зрения сценария оболочки, если файлы выгружаются в определенное место, вы можете использовать эту команду для удаления всех файлов * .hprof.

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

это использует директиву -delete из find, которая удаляет все файлы, которые соответствуют запросу. Посмотрите на справочную страницу для поиска дополнительных параметров поиска, если вам нужно сузить ее.

Вы можете использовать cron для запуска скрипта в определенное время, что будет отвечать вашим требованиям «время от времени», в большинстве дистрибутивов Linux установлен cron, и он работает с файлом crontab. Вы можете узнать больше о crontab, используя man crontab

...