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 dstat
averiguar 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!
fuente
Respuestas:
Dos ideas, dependiendo de qué tan lejos quieras llegar con esto:
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.
Compare el resultado de
/opt/dell/toolkit/bin/syscfg -o complete-bios-config.out
si de alguna manera puede engañar a este paquete para que lo instale.fuente
Más posibilidades de salida y diff:
fuente
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)
fuente
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.
Entonces algo como:
o
entonces
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.
fuente
¿Por qué nadie ha sugerido 'sysprof' ...?
Para esto fue diseñado.
O ummm segundo pensamiento ... intente rellenar algunos límites en /etc/security/limits.conf
Prueba ambos.
Si no obtiene nada ... es muy probable que tenga un problema de seguridad o un defecto físico.
vea también: Mi servidor Linux "Número de procesos creados" y "Contexto cambia" están creciendo increíblemente rápido
fuente