2009-05-11 14 views
9

Estoy depurando una pérdida de memoria en una aplicación que se ejecuta en Sun's JDK 1.4.2_18. Parece que esta versión es compatible con la línea de comandos param -XX: + HeapDumpOnCtrlBreak que supuestamente hace que la JVM descargue Heap cuando encuentra un control-break. ¿Cómo se envía esto a un proceso en segundo plano en una caja Linux? Parece que las señales de muerte son la forma en que esto debería funcionar, pero mato -l no informa nada que obviamente sea un Ctrl-Break, al menos en mi cuadro de Ubuntu.¿Cómo se puede enviar un Ctrl-Break a un proceso Linux en ejecución?

Actualización: Probé Kill -3 con Sun JDK 1.4.2_18 (_14 fue el primero en volcar el montón de esta manera), y funcionó. Se creó un archivo de volcado de almacenamiento dinámico y el proceso aún se estaba ejecutando.

Respuesta

10

kill -QUIT podría hacerlo (generará un volcado de hilo que se genera mediante ctrl-break en Windows. No lo he intentado con la opción de volcado de heap).

+0

No tengo un linux box con un jvm que admita la opción -XX: + HeapDumpOnCtrlBreak, así que no puedo probar esto (y nunca lo he hecho así no puedo garantizar que funcione). – bm212

+0

Prefiero ver una sugerencia de "kill -QUIT" que "kill -3", aunque sean equivalentes. – ephemient

+0

Lo he editado para decir kill -QUIT. – bm212

14

Ctrl- \ es el equivalente de UNIX/Linux de Windows Ctrl-Break. Wikipedia también me dice que también puede usar Ctrl-4 o SysRq en la consola virtual de Linux (supongo que necesitaría algo extraño para que un emulador de terminal normal pase representaciones de esas pulsaciones de teclas (a través de ssh/telnet)).

+1

Sí, generalmente el terminal está destinado a C- \ para enviar SIGQUIT. Esto es configurable con 'stty quit', y no estoy seguro si es el predeterminado en todos los sistemas. – ephemient

+0

@ephemient no siempre es así, pero incluso las terminales exóticas tienden a usar eso. Mi IBM 3161 sí, por ejemplo. http://i.imgur.com/6DejIxY.jpg – Wyatt8740

Cuestiones relacionadas