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 volumineuse qui fait office de serveur Red5 pour un tas de clients flexibles et gère un grand nombre de données d'interaction en temps réel, qui sont finalement éliminées en une Rails api. le problème était sous beaucoup de charge au fil du temps, le nombre de réponses à ces clients augmentait à 3-400 ms alors que normalement <100 ms. Le client soupçonnait qu'il s'agissait d'un problème de mémoire que nous ne pouvions vraiment pas confirmer. Un jour, un serveur de transfert que j'utilisais un test de charge sur a fondamentalement cessé de recevoir des demandes ou a été extrêmement lent.
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?
Tout disque dur est beaucoup plus lent que votre RAM, donc Linux utilise n'importe quel disque de rechange RAM que vous pourriez avoir flottant 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 n'y ait quelque chose ne va pas avec votre disque dur, ou 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 atteint le fin de sa durée de vie.
De toute façon:
man sync
vous dira ce que fait la synchronisation [vide FS tampons]command1 && command2
se décompose en "si la commande1 se termine avec succès, puis exécutez la commande2" command1 || command2
aka 'si command1 échoue alors exécutez command2'La commande qui vous a été donnée est un correctif temporaire au mieux et est symptomatique d'un autre problème 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, soit les deux.
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.