viernes, octubre 14, 2011

Deadlock detected al obtener las conexiones JNDI en un WAS 7.0.0.13


Hace unos días dejamos en producción una aplicación que migramos de websphere 6.1 a websphere 7. (IBM WAS 7).


En principio vale mencionar que no hay nada transparente ni "migrable" entre lo que hicimos con RAD6 para que funcione en WAS7, RAD8 no soporta SDO y tuvimos que migrar "a mano" muchas cosas re-certificando toda la aplicacion, pero eso es otro tema que no comentaré a detalle.

Lo que sí quería mencionar es un error un poco raro que tuvimos luego de la salida en producción. La aplicación en testing y desarrollo funcionaba bien, pero al estar en producción empezó a dar algunos problemas, en momentos de stress de repente el WAS se colgaba completo, inclusive dejaba de responder la consola.


Revisando el SystemOut y el SystemErr empezaron a aparecer algunos errores en la clase que obtenía la conexión a la base de datos, pero no encontramos nada que nos diera una pista de que podría dar problemas.
Vale la pena comentar que como desarrollo no teníamos acceso a los servidores por lo que el proceso de resolución fué muy tortuoso y lento.

Lo primero que verificamos, lo obvio, fué pensar que había un leak de conexiones. Revisamos el systemout buscando cualquier error que nos diera una pista del error y no encontramos nada. Recibimos algunos reportes de los administradores donde se miraba que la caída era un problema que sucedía en poco tiempo (<2 minutos). No era un proceso de degradación poco a poco sino que era una caída casi inmediata.


Sospechabamos de algún reporte o algún proceso donde por algún error hubiera algún tipo de loop infinito donde no se cerraran las conexiones. No encontramos nada.
Luego encontramos en los reportes que el total de threads que tenía configurado el WAS se ocupaban al 100%, nuestra teoría en este momento era que el leak de conexiones hacía que las peticiones se encolaran en el jndi y ocuparan threads y esto hiciera que el server se cayera.
Exploramos algunas alternativas sobre la configuración del WAS, subimos los threads disponibles, pusimos un parámetro en el JNDI para que si no recibía la conexión en 5seg que diera exception. Esto aunque sabíamos que no corregía el error nos daba lapsos más grande
s entre una caída y otra y en lugar de que el was se quedara freeze empezaría a dar error de aplicación donde podríamos encontrar la raíz del problema. Hicimos los cambios y nada. Aunque subieramos los threads igual se ocupaban todos y por alguna extraña razón no respetaba el parametro que pusimos para que diera exception si no obtenía la conexión.

Un poco desesperados peinamos el código (una aplicación grande) y revisamos todas las conexiones para incluir un best practice en cuanto a cierre de las conexiones. Probamos de nuevo y nada. Es más, los errores ocurrian más seguido.

Luego un día estando en audio con los administradores de bdd y con los administradores de WAS, tuvimos una caída. Fué entonces cuando logramos tener al fin el error en las manos. Vimos las propiedades del pool y ... sorpresa! el uso del pool estaba al 50% de su capacidad... No podía ser un connection leak si solo teníamos 50% de las conexiones usadas. Ya habíamos limpiado todos los system.out.println y el systemout estaba sin ningun tema. el systemerr tampoco tenía nada. Generaron un dump de la caída y ahí vimos entonces el error.
buscando en el javacore encontramos un Deadlock detected.
Al analizar más a detalle el lugar donde se reporta el error, vimos que el metodo que muestra la traza es un metodo del pool y que no es parte del aplicativo sino parte del driver jndi de websphere.

Buscando un poco más sobre este tema encontramos algunos casos similares al nuestro:
Y encontramos luego un problema del driver de jdbc, "PK69110: THE SERVANT ABENDS CAUSED BY HUNG THREADS IN JDBC DRIVER".
Este bug tiene afectación en la versión de WAS que usamos http://www-01.ibm.com/support/docview.wss?uid=swg1PK69110&wv=1

La versión de WAS que usamos es la 7.0.0.13, encontramos entonces el problema definitivo. Un parámetro useRRASetEquals en la configuración custom del datasource.

se hizo la prueba, se pasó a producción y luego de varias semanas tratando de encontrar el problema en nuestra aplicación vimos que es un bug de WAS.

El bug era este: Cuando yo le pido una conexión al pool, el jndi usa un objeto con las conexiones utilizadas. Este objeto es compartido. Por alguna razón al tratar de reservar una conexión en el pool el objeto se quedaba tomado por otro thread y causaba un deadlock de threads. Todo esto a nivel de los javas que hacen el pool. mientras mas usuarios trataban de obtener la conexión habían más threads que se encolaban hasta que se acababan los threads del was. Luego ni siquiera la consola de WAS funcionaba y era el freeze. Como era el objeto que reservaba la conexión el error se daba antes de que el parametro de timeout que configuramos entrara y por eso no se tomaba en cuenta.
La moraleja:
hay que leer los javacore cuando hay servers colgados... aunque sean de 500MB.

saludos!

viernes, septiembre 02, 2011

Ubuntu dejó de reconocer mi modem usb

instalé hace unos días mi linux (ubuntu 11.04) y al poner mi modem de tigo todo funcionó ok, solo le cambié el APN por broadband.tigo.gt (es pospago y es un huawei e226) .-

hoy lo quise usar y no me lo reconocía la barrita de redes donde aparecía la conexión. Un poco oxidado en linux decidí buscar el var/log/messages para ver si aparecía una pista para buscar.

encontré que ahora el /var/log/messages ahora es /var/log/syslog en fin.. dejé un tail -f para ver que pasaba al conectarlo y salió algo como esto:



Sep 2 17:31:15 carloscastaneda kernel: [ 70.847353] usb 2-1.2: new full speed USB device using ehci_hcd and address 5
Sep 2 17:31:15 carloscastaneda kernel: [ 70.927358] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:15 carloscastaneda kernel: [ 71.117371] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.307382] usb 2-1.2: new full speed USB device using ehci_hcd and address 6
Sep 2 17:31:16 carloscastaneda kernel: [ 71.387526] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.577396] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.767412] usb 2-1.2: new full speed USB device using ehci_hcd and address 7
Sep 2 17:31:16 carloscastaneda kernel: [ 72.187310] usb 2-1.2: device not accepting address 7, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 72.267438] usb 2-1.2: new full speed USB device using ehci_hcd and address 8
Sep 2 17:31:17 carloscastaneda kernel: [ 72.687307] usb 2-1.2: device not accepting address 8, error -32
Sep 2 17:31:17 carloscastaneda kernel: [ 72.687486] hub 2-1:1.0: unable to enumerate USB device on port 2
al final encontré por acá la solución: http://www.absolutelytech.com/2009/11/01/solved-ath5k-wifi-module-not-working-in-karmic-koala/
cd /sys/bus/pci/drivers/ehci_hcd

ls
sudo sh -c 'echo -n "0000:00:xx.x" > unbind'
reinicié y listo.-

saludos!

lunes, septiembre 13, 2010

Día del programador!!


Feliz día del programador!!

Hoy se celebra el día 256 del año que es el día del programador... felicidades a todos mis compañeros.

Este día todavía no es oficial pero si insistimos cada año en celebrarlo podemos institucionalizarlo para hacer notar la importancia de nuestro trabajo en la forma en que el mundo se desenvuelve diariamente.-



saludos!

martes, marzo 16, 2010

Configurar tamaño de archivo de mantisbt

Necesitaba poder subir archivos grandes como adjuntos en mantisbt, es un tema realmente básico pero que implico cambiar todas las capas de archivos de configuracion: aplicacion, base de datos, php.

El error que recibía era:

Allowed memory size of 8388608 bytes exhausted

APPLICATION ERROR #401

Fueron varios temas los que tuve que cambiar:


php.ini
memory_limit = 32M
upload_max_filesize = 8M

config.inc de mantis:
$g_max_file_size = 8388608; # 8 MB

mysql:
max_allowed_packet = 16M

domingo, marzo 14, 2010

Orden de Arranque en GRUB2 (ubuntu 9.10)

Para cambiar el orden de arranque de linux ubuntu 9.10:
ubuntu 9.10 usa el grub2 en lugar de grub, eso me hizo perder algun tiempo leyendo en internet.

1. ver que tiene el archivo grub.cfg usando
cat /boot/grub/grub.cfg

2. se busca cual es la opcion que queremos que arranque primero, en mi caso quiero que arranque windows en lugar de linux. Mi windows esta en el orden 8.

3. modificar el default del archivo /etc/default/grub desde el gedit:
sudo gedit /etc/default/grub

4. cambio la linea y grabo
GRUB_DEFAULT=8

5. actualizo los cambios
sudo update-grub


sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-20-generic
Found initrd image: /boot/initrd.img-2.6.31-20-generic
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done


reiniciar.-

martes, febrero 09, 2010

La Cámara del Terror (Manuel José Arce)

Incluyo otro poema de Manuel José Arce, Guatemalteco.
es del libro Episodios del vagón de carga (20.05.1971)
hace unos días tenía ganas de leerlo pero no lo encontre en ninguna parte de internet así que lo publico porque no se puede negar a la gente la belleza de este poema.
------------------------------------------------------------


DE repente estoy triste
--aunque tú no lo sabes

Se derrumban de pronto
torres y catedrales.

Se nos queman las alas
y hasta las ganas de vivir se caen.

Se nos vuelven más largas y más sordas las calles.

La tristeza nos coge
a patadas infames.

Es de pronto. Al doblar una esquina.
Al decir una cosa. Al saludar a alguien.

Es una bofetada sorpresiva esta tristeza tonta.
Pero tú no lo sabes.

Porque si lo supieras tendría algún sentido.
Esta manera amarga sería menos grave.

Pero tú no lo sabes.
Y si tú no lo sabes ya no lo sabe nadie.
Ni importa que lo sepa alguna gente.
Ni es tampoco importante.

Es un poco molesto nada más
desangrarse.

Es tonto y sucio.
Sería más higiénico llegar al sicoanálisis.

De que sirve todo esto
cuando Dios se tropieza en una esquina y cae.

Cuando el cielo se vuelve algo tan torpe
que sólo sirve para molestarme.

Cuando me cae mal toda la gente.
Cuando es ridículo hasta el preguntarme.
Cuando se pone triste hasta la sombra.
Cuando tú no lo sabes.

Y si tú no lo sabes
no importa que lo sepa nadie.

Nadie.

jueves, octubre 15, 2009

Hormiga (Poema)

Otro poema, del 98. De los que escribí luego de dejar de escribir.

------------------------------------------------

Tome mi disfraz de hormiga, y caminé,
Sólo,
En la fila de las negras voces,
En las voces de las grandes filas,
En las cara de siluetas desteñidas
y en tus labios rotos camine.

Solo para encontrar más negro,
Más cientos de hormigas disfrazadas de colores
Formadas como estrellas en una larga fila negra,
De silencios,
De misterios negros y oscuras cicatrices.

Vi como el silencio se desvanecía,
vi la luz, vi el mar
y vi una sonrisa perdida entre los destellos del viento,
luego la vi desaparecer.

Este manto negro que me cubre...
Este manto negro, piel de hormiga, que me esconde...
Como pesa ya este manto negro…!
Como pesa ya este tiempo eterno,
Como se me impregna por entre los poros esta tinta inmaterial,
que se va secando,
que se va apropiando de mis nuevos huesos negros,
de mi sangre, de mi alma y de mis ojos negros.

A donde me llevará la noche?
En que lugar susurrare ahora tu nombre,
Como poder recordarte si me olvido,
Si me pierdo en este oscuro horizonte?

Acércate más...
Acércate más que no te encuentro,
Acaríciame el rostro para saber que lo tengo,
Grita mi nombre,
No dejes que me olvide,
No dejes que me pierda,
Quítame este manto negro...

Piel de hormiga, hormiga adentro.

Caminar...
Por esta larga fila, caminar.
Por esta oscura línea, caminar.
Tanto tiempo y caminar,
Tanta hormiga y caminar,
Tanta tinta negra que se seca y nos envuelve,
Tan espeso el aire que nos une,
Ahorcándonos en esta tinta negra,
Y nos aprieta, y nos estrecha
y nos va juntando hasta que somos uno,
una sola línea,
mil puntos y una sola línea disfrazada en tinta negra,
y caminar,
Caminar...


carcasco .30.10.1998