En relation avec cette question sur StackOverflow , je me demande s'il existe un moyen pour moi de vider le cache NFS / forcer Linux à voir la copie la plus à jour d'un fichier qui se trouve sur un partage NFS.
J'ai une situation où quatre serveurs Apache montent le même répertoire via NFS, et lorsqu'un serveur modifie un fichier, il faut environ 5 à 10 secondes aux autres serveurs pour voir ce changement. Si une deuxième modification est apportée à ce fichier dans cette fenêtre, il peut remplacer la première modification.
L' fstab
entrée pour le système de fichiers est:
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
Existe-t-il une commande qui forcera Linux à vider le cache d'un fichier sur un partage NFS?
Réponses:
Vérifiez ces éléments et voyez si certains travaux vous conviennent:
Sur le client , si vous n'utilisez pas déjà l'
cto
option dans la colonne des options de la/etc/fstab
ligne pour votre système de fichiers NFS, ajoutez-la.cto
indique au client nfs d'ouvrir les fichiers via close-to-open, ce qui leur fait actualiser le fichier chaque fois qu'ils l'ouvrent.Sur le serveur , assurez-vous que votre système de fichiers est exporté avec l'
sync
option, et nonasync
. Avec les écritures synchrones, le client videra le disque lorsque le fichier sera fermé. ( ou avec nfs V3, chaque fois qu'un commit () est effectué ). Il peut y avoir un impact sur les performances de cette façon, mais si vous effectuez des écritures sur un système de fichiers NFS, vous voulez certainementsync
définir.Dans la foulée de ce post stackoverflow, l'ouverture du fichier avec O_DIRECT ne fonctionne que si le noyau a été compilé avec CONFIG_NFS_DIRECTIO.
Assurez-vous également que vous disposez des paramètres suivants dans votre fichier httpd.conf:
EnableMMAP off
EnableSendfile off
Dans la documentation de réglage des performances d'apache:
la source
cto
sur le client et je vais essayer cela. Je n'aisync
ni l' un ni l' autreasync
sur le serveur; Je viens d'ajoutersync
.O_DIRECT
ne m'a pas aidé, car c'est en fait PHP qui lit ces fichiers et il ne peut pas les ouvrirO_DIRECT
de quelque manière que ce soit.Dans un processus donné, appeler opendir et closedir dans le répertoire parent d'un fichier invalide le cache NFS. Je l'ai utilisé lors de la programmation d'un planificateur de travaux. Très, très utile. Essayez!
la source
Si vous ouvrez le fichier donné dans un programme non mis en cache (comme vim ou emacs) puis fermez, il mettra à jour / effacera le cache de ce fichier
la source