<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog de Antonio Manuel Muñiz &#187; Monitorización</title>
	<atom:link href="http://amunizmartin.wordpress.com/tag/monitorizacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://amunizmartin.wordpress.com</link>
	<description>Desarrollo, Ingeniería y Calidad del Software</description>
	<lastBuildDate>Mon, 30 Nov 2009 19:27:18 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='amunizmartin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3f7b8b4861abbf6680395419293e44a6?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Blog de Antonio Manuel Muñiz &#187; Monitorización</title>
		<link>http://amunizmartin.wordpress.com</link>
	</image>
			<item>
		<title>Memoria PermGen en aplicaciones Java</title>
		<link>http://amunizmartin.wordpress.com/2008/08/26/memoria-permgen-en-java/</link>
		<comments>http://amunizmartin.wordpress.com/2008/08/26/memoria-permgen-en-java/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 23:53:22 +0000</pubDate>
		<dc:creator>Antonio Manuel Muñiz Martín</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Monitorización]]></category>
		<category><![CDATA[PermGen]]></category>

		<guid isPermaLink="false">http://amunizmartin.wordpress.com/?p=43</guid>
		<description><![CDATA[¿Qué es la memoria PermGen?, de forma resumida se trata de la memoria usada por la máquina virtual Java para almacenar el código estático de las aplicaciónes que corren en ella.
¿Es posible que tengamos problemas con este tipo de memoria?, pues si, sobre todo en aplicaciones web que corren sobre un contenedor JSP/Servlet. La excepción [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=43&subd=amunizmartin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>¿Qué es la memoria PermGen?</strong>, de forma resumida se trata de la memoria usada por la máquina virtual Java para almacenar el código estático de las aplicaciónes que corren en ella.</p>
<p><strong>¿Es posible que tengamos problemas con este tipo de memoria?</strong>, pues si, sobre todo en aplicaciones web que corren sobre un contenedor JSP/Servlet. La excepción que encontraremos será:</p>
<pre>java.lang.OutOfMemoryError: PermGen space</pre>
<p><strong>¿Cómo es posible si mi código solo ocupa 1 MB y el límite de memoria PermGen es por defecto 64MB?</strong>, si tenemos en cuenta que sólo las librerías usadas por el contenedor pueden ocupar entre 20 y 30 MB, entonces no es tan disparatado. De todas formas seguimos teniendo un margen bastante amplio (unos 30 MB), pero a los 20-30 MB anteriores tenemos que sumarle el tamaño de las librerías de las que depende nuestra aplicación (normalmente en WEB-INF/lib), que si nos descuidamos levemente pueden alcanzar los 20 MB. Llegados a este punto casi hemos alcanzado los 64 MB.</p>
<p><strong>¿Pero la máquina virtual carga el código en memoria bajo demanda?</strong>, cierto, aunque hay situaciones en que el código demandado no es solamente el utilizado por nuestra aplicación, un ejemplo claro es el uso de un ORM como Hibernate o un framework como Spring.</p>
<p><strong>¿Cómo puedo monitorizar la memoria PermGen usada por mi aplicación?</strong>, con JPS y JSTAT, se trata de dos pequeñas utilidades incluidas en el JDK. En primer lugar debemos conocer el identificador del proceso Java que queremos monitorizar, para ello:</p>
<pre>~/Antonio$ jps
  227
  336 WrapperSimpleApp
  340 Jps</pre>
<p>En mi caso tengo corriendo una instancia de Plexus corriendo en mi máquina que corresponde al proceso 336. Para consultar la memoria PermGen que esta utilizando:</p>
<pre>~/Antonio$ jstat -gcpermcapacity 336
  PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT
  8192,0     65536,0     25600,0     25600,0  24     4    0,457    0,866</pre>
<p>De todos los datos mostrados nos interesa (en KBytes): la primera columna, tamaño mínimo reservado para la memoria PermGen; la segunda columna, tamaño máximo; tercera columna, memoria ocupada actualmente.</p>
<p>Evidentemente, si PGC (tercera columna) se aproxima a PGCMX debemos incrementar el máximo para la memoria PermGen incluyendo la siguiente opción en la inicialización de la máquina virtual:</p>
<pre>-XX:MaxPermSize=256m</pre>
<p>En mi caso sería en el script de incialización de Plexus. Es importante notar que la memoria reservada por la máquina virtual inicialmente será la suma de la memoria de datos inicial (heap) y la memoria de instrucciones inicial (PermGen), y similar para la memoria máxima.</p>
<p>Existen herramientas más completas e intuitivas que JSTAT, como <a title="Lambda Probe" href="http://www.lambdaprobe.org" target="_blank">Lambda Probe</a>, pero no siempre tenemos la posibilidad de desplegar una aplicación en el contenedor para monitorizar estos parámetros, y mucho menos tocar el script arranque.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/amunizmartin.wordpress.com/43/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/amunizmartin.wordpress.com/43/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amunizmartin.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amunizmartin.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amunizmartin.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amunizmartin.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amunizmartin.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amunizmartin.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amunizmartin.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amunizmartin.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amunizmartin.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amunizmartin.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=43&subd=amunizmartin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://amunizmartin.wordpress.com/2008/08/26/memoria-permgen-en-java/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d30bd2fcdb387d2f82405c2a65298937?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Antonio Manuel Muñiz Martín</media:title>
		</media:content>
	</item>
	</channel>
</rss>