<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Javadump</id>
		<title>Javadump - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Javadump"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Javadump&amp;action=history"/>
		<updated>2026-05-18T01:21:21Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Javadump&amp;diff=6814&amp;oldid=prev</id>
		<title>Shichibukai: Leer un javadump desde el notepad</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Javadump&amp;diff=6814&amp;oldid=prev"/>
				<updated>2013-03-19T18:25:22Z</updated>
		
		<summary type="html">&lt;p&gt;Leer un javadump desde el notepad&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Javadump''' es la información estructurada de la jvm en un instante determinado, en la cual registra el vuelco de memoria, los thread de la JVM y el estado de cada thread.&lt;br /&gt;
Esta información es la que utilizaremos cuando queremos analizar algún problema de perfomance, pergem o simplemente ver como se comporta nuestra aplicación en la JVM. &lt;br /&gt;
Existen varias herramientas para leer el javadump que varía según el entorno en la que se genera el javadump (Windows, AIX, etc), en este post vamos a analizar el javadump desde el notepad.&lt;br /&gt;
&lt;br /&gt;
==Información del thread==&lt;br /&gt;
Dentro del javadump, tenemos una sección (thread Details/All Thread Details) en donde se detalla cada thread que se encuentra corriendo dentro de la JVM.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;quot;Java2D Disposer&amp;quot; J9VMthread:0x00000001193E8A00, j9thread_t:0x00000001179DD300, java/lang/thread:0x0700000003B84360,&lt;br /&gt;
state:CW, prio=10&lt;br /&gt;
    (native thread ID:0x904F3, native priority:0xA, native policy:UNKNOWN)&lt;br /&gt;
    Java callstack:&lt;br /&gt;
        at java/lang/Object.wait(Native Method)&lt;br /&gt;
        at java/lang/Object.wait(Object.java:196(Compiled Code))&lt;br /&gt;
        at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:102(Compiled Code))&lt;br /&gt;
        at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:79(Compiled Code))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por cada thread tenemos la siguiente información:&lt;br /&gt;
*'''Nombre:''' En caso de estar en un servidor de aplicaciones, es el identificador que asigna el servidor de aplicaciones al thread. Ej.:Java2D Disposer&lt;br /&gt;
*'''Estado:''' estado actual del thread. Ej.: CW. Los estados pueden ser:&lt;br /&gt;
**R - Runnable - El thread puede tiene todos los recursos para ejecutarse.&lt;br /&gt;
**CW - Condition Wait - El thread se encuentra en espera de algún evento, ej:&lt;br /&gt;
***Esperando por una operación E/S.&lt;br /&gt;
***El thread ejecuta el metodo wait() de  un monitor y espera el evento notify().&lt;br /&gt;
***El thread espera para sincronizarse con otro hilo, invocando al metodo join()&lt;br /&gt;
***El thread espera por ejecutar el metodo sleep()&lt;br /&gt;
**S – Suspended – el thread fue suspendido por otro thread.&lt;br /&gt;
**Z – Zombie – el thread fue eliminado.&lt;br /&gt;
**P – Parked – el thread fue puesto en ese estado por la nueva api de concurrencia (java.util.concurrent).&lt;br /&gt;
**B – Blocked – el thread esta esperando para obtener acceso a la región critica (luego de pasar por el wait()) que posee otro hilo.&lt;br /&gt;
*'''Prioridad:''' prioridad del thread (mientra más alto más prioritario), cada prioridad de Java es mapeado a la prioridad del Sistema Operativo. Ej.: prio=10&lt;br /&gt;
*'''Stacktrace:''' El stack trace de la invocación realizada por el thread. Ej.:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Java callstack:&lt;br /&gt;
    at java/lang/Object.wait(Native Method)&lt;br /&gt;
    at java/lang/Object.wait(Object.java:196(Compiled Code))&lt;br /&gt;
    at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:102(Compiled Code))&lt;br /&gt;
    at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:79(Compiled Code))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Monitores/Locks==&lt;br /&gt;
Los monitores es el mecanismo que utiliza Java para sincronizar los thread cuando quieren acceder a un recurso compartido. Para entender mejor como funciona el mecanismo de sincronización podemos leer el [http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html tutorial de java sobre los monitores].&lt;br /&gt;
Dentro del javadump, tenemos la información de los thread que estan a la espera de un monitor (lock), esta información nos puede ser útil para detectar deadlock o mucho thread compitiendo por el mismo recuros.&lt;br /&gt;
Ej.:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
NULL           ------------------------------------------------------------------------&lt;br /&gt;
0SECTION       LOCKS subcomponent dump routine&lt;br /&gt;
NULL           ===============================&lt;br /&gt;
NULL           &lt;br /&gt;
1LKPOOLINFO    Monitor pool info:&lt;br /&gt;
2LKPOOLTOTAL     Current total number of monitors: 1358&lt;br /&gt;
NULL           &lt;br /&gt;
1LKMONPOOLDUMP Monitor Pool Dump (flat &amp;amp; inflated object-monitors):&lt;br /&gt;
2LKMONINUSE      sys_mon_t:0x000000011D560258 infl_mon_t: 0x000000011D560298:&lt;br /&gt;
3LKMONOBJECT       weblogic/utils/classloaders/ChangeAwareClassLoader@0x0700000001858578/0x0700000001858590: &lt;br /&gt;
owner &amp;quot;[ACTIVE] ExecuteThread: '348' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;quot; (0x0000000140298F00), &lt;br /&gt;
entry count 2&lt;br /&gt;
3LKWAITERQ            Waiting to enter:&lt;br /&gt;
3LKWAITER                &amp;quot;[ACTIVE] ExecuteThread: '9' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;quot; (0x000000011E5DED00)&lt;br /&gt;
3LKWAITER                &amp;quot;[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;quot; (0x000000011E942B00)&lt;br /&gt;
3LKWAITER                &amp;quot;[ACTIVE] ExecuteThread: '17' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;quot; (0x00000001213EE700)&lt;br /&gt;
3LKWAITER                &amp;quot;[ACTIVE] ExecuteThread: '41' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;quot; (0x000000012175A400)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el ejemplo vemos que los threads se encuentran esperando que se libere la instancia '''weblogic/utils/classloaders/ChangeAwareClassLoader@0x0700000001858578/0x0700000001858590''' cuyo dueño es '''[ACTIVE] ExecuteThread: '348' '''&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html Tutorial Java sobre concurrencia]&lt;br /&gt;
* [http://javaeesupportpatterns.blogspot.com.ar/2011/11/how-to-analyze-thread-dump-part-1.html Como analizar el &amp;quot;thread dump&amp;quot;]&lt;br /&gt;
* [http://publib.boulder.ibm.com/infocenter/realtime/v1r0/index.jsp?topic=%2Fcom.ibm.rt.doc.10%2Fdiag%2Ftools%2Fjavadump_tags_threads.html Interpretando el javadump en el IBM WebSphere]&lt;br /&gt;
&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Shichibukai</name></author>	</entry>

	</feed>