2012-02-02 22 views
6

Me gustaría evitar que Cassandra elimine los archivos hprof ya que no los necesito.Evitando que Cassandra descargue archivos hprof

También tengo un espacio de disco muy limitado (se utilizan 50GB de 100 GB para los datos), y estos archivos se tragan todo el espacio en disco antes de que pueda decir "detener".

¿Cómo debo proceder?

¿Hay algún script de shell que pueda usar para borrar estos archivos de vez en cuando?

Respuesta

7

Ocurre porque Cassandra comienza con -XX:+HeapDumpOnOutOfMemoryError opción de Java. Lo cual es bueno si quieres analizar. Además, si está recibiendo muchos volcados que indican que probablemente debería sintonizar la memoria disponible para Cassandra.

No lo he intentado. Pero para bloquear esta opción, comentar la siguiente línea en $CASSANDRA_HOME/conf/cassandra-env.sh

JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError" 

Opcionalmente, puede comentar este bloque también, pero no es realmente necesario, creo. Este bloque está disponible en la versión 1.0+, supongo. No puedo encontrar esto en 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 

Avísame si esto funcionó.


actualización

... supongo que es JVM tirarla a la basura cuando Cassandra se estrella/apaga. ¿Alguna forma de evitar que ocurra?

Si desea desactivar Heapdump JVM por completo, consulte aquí how to disable creating java heap dump after VM crashes?

+0

Estaba pensando en comentarlo también. Pero los archivos de hprof que noté no seguían la plantilla "cassandra-NNN.hprof", sino simplemente "pid-XXX.hprof", así que supongo que es JVM quien los descarta cuando Cassandra se cuelga/apaga. ¿Alguna forma de evitar que ocurra? –

+1

@Salocin.TEN ver la actualización – Nishant

+0

Comentar el bloque en $ CASSANDRA_HOME/conf/cassandra-env.sh en realidad no funcionó. Pero gracias al enlace y al trabajo cron de eliminación de .hprof, todo funciona bien ahora. Gracias por la ayuda una vez más. –

1

Debo admitir que no he usado Cassandra, pero por lo que puedo decir, no debería estar volcando ningún archivo hprof a menos que lo habilite en tiempo de compilación, o el programa experimente una OutofMemoryException. Intenta mirar allí.

en términos de un script de shell, si los archivos se vuelcan a una ubicación específica, puede usar este comando para eliminar todos los archivos * .hprof.

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

esto es usar la directiva de -deletefind que elimina todos los archivos que coinciden con la búsqueda. Mire la página man para encontrar más opciones de búsqueda si necesita restringirla más.

Puede ejecutar cron para ejecutar un script en un momento dado, lo que satisfaría su requisito de "tiempo a tiempo", la mayoría de las distribuciones de linux tienen un cron instalado y funcionan fuera de un archivo crontab. Puede encontrar más información sobre el crontab utilizando man crontab

+0

Gracias! ¡Me di cuenta de eso también! Porque en realidad los archivos hprof están saliendo cuando suspendí la instancia de Cassandra, ya que se llaman "pid-XXX.hprof" en lugar de "cassandra-XXX.hprof" Gracias por el script de shell. Yo los implementaré. :) –

0

Incluso si actualiza cassandra-env.sh a apuntar a la ruta Heapdump todavía no funcionará. La razón fue que desde el script upstart/etc/init.d/Cassandra existe esta línea que crea el defecto Heapdump ruta

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 

No soy un experto advenedizo, pero lo que hice fue simplemente eliminado el parámetro que crea el duplicado. Otra observación extraña también al verificar el proceso de cassandra a través de ps aux notará que verá algunos parámetros escritos dos veces. Si obtiene cassandra-env.sh e imprime $ JVM_OPTS notará que esas variables están bien.

Cuestiones relacionadas