Je sais ce que ça fait ... Je suppose que je suis curieux de savoir pourquoi cela résout un problème dans une application dont j'ai hérité. J'ai repris une application tomcat assez grande qui fait office de serveur Red5 pour un tas de clients flexibles, et gère beaucoup de données d'interaction en temps réel, qui sont finalement transférées vers une API de rails. Le problème était sous beaucoup de charge au fil du temps, le nombre de réponses à ces clients augmentait à 3-400 ms alors qu'il était normalement <100 ms. Le client soupçonnait qu'il s'agissait d'un problème de mémoire que nous n'avons vraiment jamais pu confirmer. Un jour, un serveur intermédiaire sur lequel j'exécutais un test de charge a cessé de recevoir des demandes ou était extrêmement lent. Sur un coup de tête que j'ai envoyé
sync && echo 3 > /proc/sys/vm/drop_caches
et comme par magie, le serveur est revenu à la vie et a commencé à fonctionner à pleine vitesse au service de ces connexions. Était-ce une coïncidence ou ce comportement a-t-il un sens et pourquoi?
sync
ou juste leecho
. Ensuite, essayez de comprendre pourquoi le serveur est lent dans les cas où cela résout (le processeur est-il au maximum? Les IO sont-ils au maximum? La pagination du système?)Réponses:
Tout disque dur est beaucoup plus lent que votre RAM, donc Linux utilise toute la RAM disponible que vous pourriez avoir pour mettre en cache les données du système de fichiers. Cependant, cela ne devrait jamais causer de problèmes de performances à moins qu'il y ait un problème avec votre disque dur ou que les services sur votre serveur tentent d'écrire des données à un taux aussi élevé pendant aussi longtemps que le serveur ne peut pas mettre en cache ou récupérer les données. Cela pourrait également être un signe que votre disque dur arrive à la fin de sa durée de vie.
De toute façon:
man sync
vous dira ce que fait la synchronisation [vide les tampons FS]command1 && command2
se décompose en «si command1 se termine avec succès, puis exécutez command2»command1 || command2
alias 'si command1 échoue alors exécutez command2'La commande qui vous a été donnée est au mieux une correction temporaire et est symptomatique de quelque chose d'autre qui ne va pas avec votre système. Soit vos disques sont en fin de vie, soit votre système est trop sous-alimenté pour ce que vous en faites, ou les deux .
la source
AWS n'est pas pour les timides, et vous venez de rencontrer l'une des raisons pour lesquelles. La mauvaise situation d'E / S disque sur AWS est bien connue, et l'un des principaux facteurs à prendre en compte pour quiconque construit une application par-dessus. Il existe des instances optimisées pour le disque et quelques autres astuces (comme la construction d'un RAID 0 à partir de volumes EBS) que vous pouvez essayer d'améliorer. Assurez-vous d'utiliser des instances plus grandes (au moins m1.large) pour vous assurer que le noyau peut mettre en tampon les E / S de disque.
la source