jueves, 25 de agosto de 2011

Diangosticar y solucionar problemas de memoria en Java

Adjunto un documento que he traducido del artículo "Chuk-Munn Lee of Sun Microsystems Troubleshoots Java SE 6 Deployment" que me parece muy interesante.

Trata diversas formas de obtener información para analizar posibles problemas de memoria en aplicaciones Java.


Solución de problemas de memoria en java


Espero que sea de utilidad.

domingo, 14 de agosto de 2011

Material Defectuoso. Nuevo disco de Extremoduro.

Siempre he añadido entradas sobre temas de informática, pero hoy me apetece añadir una entrada musical.... Se trata del nuevo disco de Extremoduro. Es difícil no decir nada después de haberlo escuchado. Me ha sorprendido gratamente y creo que a todo aquel que le guste la música que hacen, también habrán disfrutado con esta joyita:


Letra de Tango Suicida


Sangre negra de esta herida brota,
no dejo de pensar que te deje marchar.

Nunca había estado un alma tan rota
desde que tu no estas no quiere recordar.

Se paso una vida entera
y yo solo guardo el recuerdo
de una pocas horas.

Era primavera,
el sol salió ese día
por ponerse a tu vera.

Y el olor de un día de enero,
estribadito en tu agujero,
sígue en mi cabeza.

Y un verano juntos de la mano,
y me pasao la noche fuera.

Ya todo el año me hace daño
y me vuelvo a llevar
a patadas con la primavera.

Junto a las hojas que el otoño vino a derribar
me deje llevar... me deje llevar.

Que te corre por las venas,
que te noto que te falta, nena,
temperatura, ¿que algo te hiela?
eso me apura, toda una vela.

Deja que te diga, nena,
que lo nuestro no es equitativo,
todas las noches que estoy contigo
tu eres quien come, yo soy comido.

Deja que te diga la razón
si tu imaginación
no encuentra una sola respuesta.

Tu deja que te clave en un arpón,
justo en el corazón,
así lo mismo te contesta.

Morir, sin mas, pues nadie me ha venido a despertar.
No estas, me abrí, y nadie me ha venido a despedir.

Sin nada mejor, que andar por dentro hurgándome,
sin nada mejor que hacer, tostándome al sol,
hurgando en el recuerdo y no lo entiendo mejor que ayer.

-Dinos que te pasa
-Estoy jodido, perdí la conciencia,
y ahora ando siempre sumergido
en montones de mierda.

-No ha dormido bien el señorito
-Iros a la mierda
-Que no se acostumbra a estar solito
en esa cabeza.

Dices que te hago daño,
¿es que no entiendes que te extraño a mi manera?

Ya que preguntas, pa' ahogar mis penas,
me fui de putas la noche entera.

Dijiste que nunca mintiera,
que dijera la verdad aunque duela.
¿Por que me miras de esa manera?
Después te fuiste,
y "adiós muy buenas"

Deja que te diga la razón
si tu imaginación
no encuentra una sola respuesta.

Tu deja que te clave en un arpón,
justo en el corazón,
así lo mismo te contesta.

Morir, sin mas, pues nadie me ha venido a despertar.
No estás, me abrí, y nadie me ha venido a despedir.

Hoy noto que no,
que no me da la gana, yo la vida doy por saber
si un mundo mejor esta esperándome mañana,
un mundo mejor que ayer.

Anda y cuéntale a tu diosecito que aquí huele a mierda.
Y dijo Judas: "solo necesito un trozo de cuerda"

-No ha dormido bien el señorito
-Iros a la mierda
-Que no se acostumbra a estar solito en esa cabeza.

Python + Jython. Cómo cambiar el estado de Alfresco 3.2r

Ante la necesidad de cambiar el estado de lectura/escritura de Alfresco de forma automática (para realizar los backup) he realizado unos scripts basándome en el jythonJmxClient.py de matthew@thebitsource.com.

La idea consiste en conectarme vía JMX a la instancia de alfresco para cambiar el atributo server.transaction.allow-writes del mbean Alfresco:Type=Configuration,Category=sysAdmin,id1=default.

Para esto me valgo del script jythonJmxClient.py, pero añadiéndole un nuevo método, def do_setAttribute(self, line). Este método será el que nos permita cambiar el valor del atributo:

def do_setAttribute(self, line):
                """setAttribute -m|--mbeanpath <path to mbeanr> -a|--attribute <name of attribute>
                Set the mbean server for a specific attribute"""

                #annoying option parsing stuff - need cmd2
                parser = optparse.OptionParser(conflict_handler="error")
                parser.add_option('-m', '--mbeanpath', dest='mbp', type='string')
                parser.add_option('-a', '--attribute', dest='attr')
                parser.add_option('-v', '--value', dest='val')
                (options, args) = parser.parse_args(line.split())
        
                value = javax.management.Attribute(options.attr,options.val)
                obn =  javax.management.ObjectName(options.mbp);
                remote.setAttribute(obn, value);

Antes que nada, debemos activar la conexión JMX en nuestro servidor de aplicaciones (tomcat en mi caso) añadiendo las siguientes opciones:

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9696 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/opt/alfresco/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/opt/alfresco/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false"


Estos son los scripts que vamos a utilizar:

- estado_alfresco.py (encargado de llamar al script jython de conexion jmx y de pasarle los parámetros adecuados).
- jythonJmxClientAlfresco.py (script en jython para la conexión jmx).
- read_only.txt (fichero de texto con parámetros para conexión y valores a cambiar para poner alfresco en sólo lectura).
- read_write.txt (fichero de texto con parámetros para conexión y valores a cambiar para poner alfresco en lectura/escritura).
- ver_estado.txt (fichero de texto con parámetros para conexión y valores a consultar para ver su estado).

De este modo, si queremos poner alfresco en sólo lectura, haremos la siguiente llamada:

estado_alfresco.py read_only

para ponerlo en lectura/escritura:

estado_alfresco.py read_write

y para ver su estado:

estado_alfresco.py ver_estado

En cada caso imprimirá por pantalla el cambio realizado y su resultado.

Nota: No lo he comentado, pero para que funcione hay que tener instalado jython en el sistema.

Obtener informacion de repositorios a través de los metadatos .git publicados por error

 A raiz de CTF realizado recientemente, me ha parecido interesante publicar este post sobre los errores de seguridad que se encuentran en mu...