HACK THE SYSTEM: Bug en YUM CentOS 6 2.6.32-504.8.1.el6 - Out of memory y corrupcion de datos

RSS

 Seguime por RSS

24 mar 2015

Bug en YUM CentOS 6 2.6.32-504.8.1.el6 - Out of memory y corrupcion de datos

Encontré un bug, en realidad, lo busqué, porque tenía el error pero no sabia porque que carajos, aca explico un poco el tema. Si manejas VPS con poca memoria (menos de 300MB) o usas CentOS en una maquina de poca RAM, te va a interesar si estás por actualizar y usas kernel 2.6.32-504.8.1.el6
Resulta que un VPS que tengo para hacer cosas personales, el cual tambien administro desde el host, lo tenia con 128MB de RAM, para mi sorpresa luego de la ultima update de kernel, de 2.6.32-504.8.1.el6 hacia  2.6.32-504.12.2.el6, me tiraba error de que no encontraba el root LVM, claro dije yo, debe ser lo que esta en los foros, que no esta dentro del initramfs el modulo dm-mod de device mapper para el LVM, entonces lo añadi, y nada, pero con el kernel anterior andaba bien, que raro no?.

Me puse a hacer un fsck sobre un disco virtual, medio al pedo pero vaya uno a saber, y en el panic del inicio ademas de que no encontraba el rootfs veo algo de modules.dep, y ahi se me prendio la luz.

Apago el VPS, le aumento la RAM a 512, borro la cache de yum ( /var/cache/yum ) para que no me use un rpm ya bajado, yo sospechaba que  estaba corrupto desde el repo, desinstalo el kernel usando rpm -e --nodeps y luego lo reinstalo, para mi sorpresa, inicia perfecto sin errores.

Volvi a repetir todo usando 128MB de RAM y el mismo fallo y note que al finalizar yum decia (Terminado) Killed!. (No siempre lo decia.. ojeli)

O sea, a partir del kernel .12.2 no solo que usa mas RAM el sistema (no inicia bien si no tiene buena ram para descomprimir el initramfs donde guarda el modulo LVM), sino que en el kernel 2.6.32-504.8.1.el6, se mandaron un moco enorme, por el cual al usar vm.swappiness = 0 en sysctl.conf, el kernel en vez de usar la Swap cuando se acaba la RAM al momento de crear el initrd, tira un out of memory que no vemos y acaba YUM con un killed, y el que no miró el error como yo, que no le di pelota, asumi que era un error de traduccion o de YUM (ahora CentOS no es lo que era), se come este garron.

Ahora, digo yo... que moco se habran mandado para que en el 2.6.32-504.8.1.el6 por motivos que no entiendo, no sepa el kernel usar la swap cuando se acaba la RAM... cualquier kernel de kernel.org, o sea, vanilla, usa eso y para el que piense que por usar 0 estoy errado, le digo que no, el swappiness en 0 indica que no use ningun portaje N de RAM como referencia sino que inicie el uso de Swap cuando esta a punto de generar un out of memory.

PD: Linuxito tenia razon, estan haciendo mierda CentOS.

2 comentarios:

  1. Tal y como me parecía. Ese error lo veía ya en mi intento fallido de exorcizar el SystemD de mi instalación de Debian Jessie cuando estaba en la rama testing, porque el desgraciado siempre se me colgaba en procesos de mayor demanda de video y hardware en general (la verdad es que con el Iceweasel ESR y el Chrome, ese problema era bastante recurrente). Peor aún, no me creen cuando les dije que habías encontrado la pólvora en SystemD en CentOS.



    Parece que esto del no-swap también les hinchará las pelotas a los usuarios de Debian Jessie.

    ResponderEliminar
  2. Systemd, lo odio desde lo mas profundo. Ahora tengo un cliente con un VPS que le metio CentOS 7... mi dios, que patada que es eso!. systemctl start loquesea y si tiene un error en que no inicia no lo ves simplemente, te dice que ejecutes systemctl status aplicacion o journalctl -xn pero no aparece nada en la app relacionado ni en el log de journal ni en el status solo que esta no iniciado bla bla, no como el viejo sysvinit que veias que carajos pasaba que algo no reiniciaba.... sin contar con que procesos como mysqld (mariadb) con mucha carga se van a 150% de CPU o consumen mucha RAM. Es terriblemente una cagada systemd, el y su journald o el bug que encontre donde las sessiones de ssh en el secure.log aparecen de nuevo y asi cada X segundos solo porque las reinicia o algo que no se que es y uno cree que estan iniciando sesiones root pero es systemd que las vuelve a leer y les asigna otro PID... mi dios... como te odio Lennart Putering

    ResponderEliminar

Dejá tu comentario