¿Cómo encuentro la causa de una gran diferencia en el rendimiento entre dos servidores Ubuntu idénticos?

9

Estoy ejecutando dos servidores Dell R410 en el mismo bastidor de un centro de datos (detrás de un equilibrador de carga). Ambos tienen la misma configuración de hardware, ejecutan Ubuntu 10.4, tienen los mismos paquetes instalados y ejecutan los mismos servidores web Java (sin otra carga) y estoy viendo una diferencia de rendimiento sustancial entre los dos.

La diferencia de rendimiento es más evidente en los tiempos de respuesta promedio de ambos servidores (medidos en la aplicación Java en sí, sin latencias de red): uno de ellos es 20-30% más rápido que el otro, de manera muy consistente.
Solía dstataveriguar si hay más cambios de contexto, E / S, intercambio o cualquier otra cosa, pero no veo ninguna razón para la diferencia. Con la misma carga de trabajo (sin intercambio, prácticamente sin E / S), el uso y la carga de la CPU es mayor en un servidor.

Por lo tanto, la diferencia parece estar principalmente vinculada a la CPU, pero si bien el uso de un punto de referencia de CPU simple sysbench(con todas las demás cargas apagadas) produjo una diferencia, fue solo del 6%. Entonces, tal vez no sea solo la CPU sino también el rendimiento de la memoria.

Hasta ahora he comprobado:

  • Revisiones de firmware en todos los componentes (idénticos)
  • Configuración del BIOS (hice un volcado usando dmidecode, y eso no mostró diferencias)
  • Comparé /proc/cpuinfo, no hay diferencia.
  • Comparé la salida de cpufreq-info, no hay diferencia.
  • Parámetros Java / JVM (misma versión y parámetros en ambos sistemas)

Además, reemplacé completamente la RAM hace algunos meses, sin ningún efecto.

Estoy perdido. ¿Qué puedo hacer para averiguar qué está pasando?

ACTUALIZACIÓN : ¡Sí! Ambos servidores funcionan igualmente ahora. Fue la configuración de "poder MIERDA" como jim_m_somewhere los nombró en los comentarios. Las opciones de BIOS para "Administración de energía" estaban en "Máximo rendimiento" en el servidor rápido y en "Controlador de energía activo" (configuración predeterminada de Dell) en el otro. Obviamente olvidé que hice esa configuración hace dos años, y no lo hice en todos los servidores. ¡Gracias a todos por su aportación muy útil!

the.duckman
fuente
2
Es posible que tenga RAM defectuosa. Si su aplicación tiene mucha red, podría ser cualquier cosa a lo largo de la pila de red.
Kyle
2
¿Puedes comparar la "Configuración avanzada de CPU" en el BIOS? - ¿podría ejecutar un comando ipmitool para hacerlo? ¿La velocidad en la RAM es la misma? Supongo que ha verificado si tiene batería de respaldo en los discos / controladores ... solo pensando "en voz alta" ... ¿la RAM en ambas cajas es la misma? registrado o no registrado ... AH ... ¿ha verificado que el "interruptor de alimentación" - ACPI está apagado en ambos servidores?
jim_m_somewhere
2
si están sirviendo los mismos datos, ¿hay algún equilibrio de carga desde un fw o dns? ¿Cómo son las estadísticas de la red? ¿las configuraciones de Java son idénticas también? ¿El tamaño del montón de Java es el mismo? disparando en la oscuridad en este caso.
au_stan
2
¿La configuración del software es realmente idéntica? Por ejemplo, ¿AppArmor está habilitado en uno y deshabilitado en el otro? Compruebe también 'dmesg' para ver si hay errores.
Anton Cohen
1
¿Ha verificado el cable de red, el puerto en el Switch y también ve los iops o verifica el estado del HDD ... Saludos

Respuestas:

6

Dos ideas, dependiendo de qué tan lejos quieras llegar con esto:

  1. Cambie los discos de ambos servidores y vea si el rendimiento de la velocidad se mantiene en el hardware o se mueve con el software.

  2. Compare el resultado de /opt/dell/toolkit/bin/syscfg -o complete-bios-config.outsi de alguna manera puede engañar a este paquete para que lo instale.

chutz
fuente
La salida de dstat mostró con bastante claridad, que la diferencia en el rendimiento también ocurre, cuando no está ocurriendo IO. Instalar syscfg en Ubuntu 10.4 parece realmente complicado. Ya comparé la salida de dmidecode, ¿mostraría sysctl más? Quizás sea menos trabajo para las fotos de cada pantalla de BIOS y compararlas. Podría intentar esto.
the.duckman
1
Al intercambiar los discos, no quise investigar el IO, sino más bien si es la configuración (incorrecta) del software la que está causando la lentitud (un parámetro extraño del núcleo, por ejemplo).
chutz
3

Más posibilidades de salida y diff:

  • sysctl -a (asegúrese de que los sintonizables del núcleo sean iguales)
  • cat / proc / interrupts (¿Tal vez hay alguna otra pieza de hardware en mal estado?)
  • lista de sensores de ipmitool (posibilidad remota, pero verifique si hay más diferencias de bajo nivel, sobrecalentamiento, problemas de voltaje, etc.)
SolarKennedy
fuente
Gracias, desafortunadamente no hay diferencia obvia en la salida de estos comandos.
the.duckman
2
Todas las diferencias son obvias si compara archivos usando software . Consulte esta pregunta: ¿Cómo difiero dos archivos de configuración?
Skyhawk
3

Esto suena como si pudiera estar relacionado con el equilibrador de carga. Cuando dices "misma carga de trabajo", ¿cómo estás midiendo esto?
¿Está comparando directamente cada servidor aplicando una carga de prueba de forma aislada?
o ¿Está aplicando algo de carga al equilibrador de carga y mirando los resultados en ambos servidores?

Si está haciendo esto último (midiendo la carga colocada en ambos servidores a través del equilibrador de carga), es posible que su equilibrador de carga no esté dividiendo la carga de trabajo exactamente de manera uniforme entre los servidores (un sesgo del 20% para un par de servidores no es infrecuente dependiendo de cómo su equilibrador de carga decide quién recibe qué solicitudes), lo que está causando que un servidor tome más carga y, por lo tanto, tenga un rendimiento deficiente.

(Si está comparando directamente cada servidor, de forma aislada, sin utilizar el equilibrador de carga como intermediario, y ha verificado que cada componente es idéntico (hasta las revisiones del fabricante) entre ambos sistemas, entonces estoy perdido - No puedo pensar en ninguna otra razón medible para este tipo de diferencia de rendimiento entre servidores que de otro modo serían idénticos)

voretaq7
fuente
Tiene razón, nuestro equilibrador de carga también lo hace: en realidad es una característica. Así que medí de muchas maneras, y sí, incluso "reproduje" las mismas solicitudes en cada servidor individualmente una vez. Pero incluso simplemente poner todo el tráfico en vivo en un solo servidor durante algún tiempo y comparar el tiempo que cada servidor necesitó para preparar la respuesta produce los mismos resultados que las configuraciones más complejas.
the.duckman
Hmm, en ese caso estoy oficialmente perplejo, si todo es realmente idéntico (y parece que hemos confirmado bastante bien que lo es), debería estar dentro de un margen de error razonable en los números de rendimiento (± 5-7%): usted estamos viendo variaciones de más del doble, y no tengo idea de por qué: - /
voretaq7
3

Pruebe algunas herramientas de creación de perfiles, ya sea la creación de perfiles del sistema como perf o la creación de perfiles Java como VisualVM .

Con perf puede perfilar el proceso Java en ejecución por PID o perfilar un punto de referencia. Mire ambos sistemas, vea dónde el sistema lento está gastando su tiempo.

apt-get install linux-tools-common linux-tools

Entonces algo como:

perf record -e cpu-cycles -p <pid>

o

perf record -a -g <benchmark command>

entonces

perf report

Un par de ideas sobre cómo los sistemas pueden funcionar de manera diferente:

Medio ambiente: ¿Es diferente la temperatura del aire o el flujo de aire? ¿Están en bastidores? He visto que los sistemas funcionan de manera diferente en diferentes posiciones de rack, causadas por la vibración. Hay diferentes niveles de vibración en cada rack. Es poco probable, teniendo en cuenta que dijo que casi no se está utilizando E / S. Pero he visto discos que se ralentizan a escrituras secuenciales de 2 MB / seg debido a la vibración en partes de un bastidor.

Fallos de hardware: cualquiera de los componentes del hardware puede estar defectuoso. Usa el perfil para ver qué es lento. Podría ser una CPU o un conjunto de chips defectuosos, un disipador térmico no conectado correctamente, ventiladores fuera de balance que causan vibración, ventiladores fallidos, incluso una PSU defectuosa. Intente intercambiar cosas que sean fáciles de intercambiar.

Anton Cohen
fuente