¿Qué hace el comando de sincronización?

15

Sé lo que hace ... Creo que tengo curiosidad por qué está solucionando un problema en una aplicación que heredé. Me hice cargo de una aplicación tomcat bastante grande que actúa como servidor Red5 para un grupo de clientes flexibles, y manejo una gran cantidad de datos de interacción en tiempo real, que finalmente se descargan en una API de rieles. El problema estaba bajo mucha carga con el tiempo, las respuestas a estos clientes aumentaban a 3-400 ms donde normalmente <100 ms. El cliente sospechaba que era un problema de memoria que realmente nunca pudimos confirmar. Un día, un servidor de ensayo en el que estaba ejecutando una prueba de carga básicamente dejó de recibir solicitudes o fue extremadamente lento. Por capricho envié

sync && echo 3 > /proc/sys/vm/drop_caches

y, mágicamente, el servidor volvió a la vida y comenzó a funcionar a toda velocidad sirviendo estas conexiones. ¿Fue una coincidencia o este comportamiento tiene sentido y por qué?

j_mcnally
fuente
44
Esos son dos comandos. ¿Cuál tuvo el efecto que notaste?
Michael Hampton
linuxtidbits.wordpress.com/2008/02/20/purge-memory sugirió ejecutarlos juntos, así que no lo sé.
j_mcnally
esto se refactorizó aquí: commandlinefu.com/commands/view/1026/…
j_mcnally
44
Es difícil de decir. No esperaría que estos comandos hagan algo beneficioso en un servidor a menos que se haya desajustado horriblemente. Pero ciertamente no se puede descartar sin un estudio más cuidadoso. Si vuelve a ocurrir, intente solo con el synco solo con el echo. Luego, intente averiguar por qué el servidor es lento en los casos en que esto soluciona (¿la CPU está maximizada? ¿IO está maximizada? ¿La paginación del sistema?)
David Schwartz

Respuestas:

20

Cualquier disco duro es un orden de magnitud más lento que su RAM, por lo que Linux utiliza cualquier RAM adicional que pueda tener flotando para almacenar en caché los datos del sistema de archivos. Sin embargo, esto nunca debería causar problemas de rendimiento a menos que haya algún problema con su disco duro o que los servicios en su servidor intenten escribir datos a una velocidad tan alta durante tanto tiempo que el servidor no pueda almacenar en caché o recuperar los datos. También podría ser una señal de que su disco duro está llegando al final de su vida útil.

De todos modos:

  • la ejecución man syncle dirá qué hace la sincronización [descarga los buffers FS]
  • googlear 'linux drop_caches' le dirá que al hacer eco del número 3 libera todas las páginas de memoria innecesarias del caché [esto no debería ser necesario en un sistema saludable]
  • command1 && command2 se desglosa en 'si el comando1 finaliza correctamente y luego ejecuta el comando2'
    • el socio para esto es command1 || command2también conocido como 'si el comando1 falla, ejecute el comando2'

El comando que se le dio es una solución temporal en el mejor de los casos y es sintomático de algo más mal en su sistema. O sus discos están en el final de su vida útil, o su sistema tiene muy poca potencia para lo que está haciendo con él, o ambos .

Sammitch
fuente
gracias, no estoy seguro, pensé que era una solución a muy corto plazo. Supongo que quería una idea de por qué esto podría estar funcionando. El servidor está en EC2, así que no estoy seguro acerca de la idea HD EOL.
j_mcnally
@j_mcnally EC2? Bueno, entonces solo puedo adivinar cómo se ve su instancia particular, pero es probable que sea una combinación de factores como que EBS sea súper escamoso en todo momento, pequeñas asignaciones de RAM y la ausencia de una partición de intercambio.
Sammitch
Entonces, ¿estás diciendo que la solución puede ser válida, jaja?
j_mcnally
@j_mcnally lamentablemente, si no estás en una de las instancias optimizadas de E / S de un millón de dólares por mes, potencialmente sí.
Sammitch
5

AWS no es para los pusilánimes, y acabas de encontrar uno de los motivos. La mala situación de E / S de disco en AWS es bien conocida, y uno de los principales factores a tener en cuenta para cualquiera que cree una aplicación encima. Hay instancias optimizadas en disco y algunos otros trucos (como construir un RAID 0 a partir de volúmenes EBS) que puede intentar mejorar. Asegúrese de utilizar instancias más grandes (al menos m1.large) para asegurarse de que el núcleo pueda almacenar en memoria intermedia las E / S del disco.

Joel E Salas
fuente
sí usando m1.large. Estos servidores se hacen girar para la aplicación y luego se rompen horas después ... así que no estoy seguro de una inversión de tiempo, etc., para el disco io. Agradezco la opinión de todos y las sugerencias parecen que la solución puede ser válida incluso si no es preferible. gracias de nuevo.
j_mcnally