A veces tenemos un equipo que se cuelga frecuentemente o que tiene errores extraños y que no podemos aislar. En estos casos hay que mirar con sospecha a la RAM, ya que es probable que sea la causa del problema. Soluciones como Memtest86+ son de sobra conocidas, pero, ¿y si no podemos arrancar con un disco de inicio para ejecutar Memtest? ¿Por ejemplo, en un servidor VPS?
Comprobación rápida de memoria
Un pequeño truco de Rahul Shah para testear la memoria consiste en llenar la memoria por completo y volcarla a un fichero, y luego ejecutar varios md5sum seguidos sobre este fichero, que en realidad se ejecutarán sobre la memoria ya que los datos estarán cacheados en RAM.
Primero, comprobamos cuánta memoria tenemos instalada, y después generamos con dd un fichero del tamaño total de nuestra RAM y ejecutamos los md5sum. Si los md5sum no son idénticos, es casi garantizado que tenemos RAM defectuosa:
$ free
total used free shared buffers cached
Mem: 32949432 31109324 1840108 0 3233952 15665184
-/+ buffers/cache: 12210188 20739244
Swap: 33947640 667736 33279904
$ dd if=/dev/urandom bs=32949432 of=/tmp/memtest count=1050
$ md5sum /tmp/memtest; md5sum /tmp/memtest; md5sum /tmp/memtest
El gran problema de los tests de memoria es que se basan en saturar la RAM desde la CPU, pero en la vida real la RAM no se usa sólo desde la CPU, también se accede a ella directamente desde la tarjeta gráfica, desde los buses PCI, desde las controladoras de disco... Por muy rápido que testeemos la RAM desde la CPU, nunca podremos llegar a lo que es una carga real desde varios puntos del sistema.
Para solventar este problema podemos usar un script desarrollado por Doug Ledford de Red Hat. Este script trata de imitar la carga real desde todos los dispositivos que pueden acceder directamente a RAM, por lo que su resultado es mucho más completo y fiable. El script se puede descargar desde la web de Doug, o directamente descargar desde mi propio servidor. Para ejecutarlo, necesitaremos un kernel de Linux en bzip2 y el paquete pbzip2 (parallel bzip) instalado. Al ejecutarlo, si no recibimos ningún error es que todo está bien; si vemos algún error de diff entre archivos, es que seguramente haya un problema en la RAM:
$ sudo apt-get install pbzip2 $ cd /tmp $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.bz2 $ mv linux-2.6.39.4.tar.bz2 linux.tar.bz2 $ ./memtest.sh -x -c 1 -n 2 TEST_DIR: /tmp SOURCE_FILE: linux.tar.bz2 NR_PASSES: 2 MEGS_PER_COPY: 240 NR_COPIES: 1 PARALLEL: no COMPRESS_RATIO: 5 COMPRESS_FLAG: j COMPRESS_PROG: /usr/bin/pbzip2 EXTRACT: no Creating comparison source...done. Starting test pass #1: unpacking, comparing, removing, done. Starting test pass #2: unpacking, comparing, removing, done. Starting test pass #3: unpacking, comparing, removing, done. Starting test pass #4: unpacking, comparing, removing, done. Starting test pass #5: unpacking, comparing, removing, done. $
Bonus: probar la alimentación
Otro de los elementos que más quebraderos de cabeza nos puede dar es la fuente de alimentación, ya que si esta falla los errores pueden ser imprevisibles, desde fallos de disco duro hasta cuelgues del sistema, y muy difíciles de localizar. Con este script podemos aprovechar a hacer un chequeo de la fuente de alimentación exigiéndole todo lo que pueda dar de sí. Para ello basta con poner a grabar un DVD, ejecutar algo en 3D (como glxgears) y hacer trabajar la tarjeta de red, por ejemplo, con un netperf, todo ello mientras ejecutamos el script. Ejecutando todo esto a la vez estaremos muy muy cerca de llegar al máximo de potencia que nuestro equipo puede requerir.
Esta web
http://alvaroremesal.net
, su contenido, texto e imágenes está licenciado bajo una
Licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España.