E / S disque élevées lorsque le cache est utilisé?

9

Il y a quelques jours, j'ai remarqué une attente d'E / S disque et une baisse d'activité du disque (ce qui était super). Ensuite, je remarque également que mon cache était plein (*) et fragmenté. Puis j'ai vidé le cache. Après cela, la latence et l'activité du disque sont passées au niveau précédent (ce qui était mauvais).

IOtop montre que [jbd2 / sda2-8] et [flush-8: 00] sont toujours au sommet de l'utilisation du disque. Il s'agit d'un Dell R210, RAID 1 matériel (H200) avec beaucoup de mémoire disponible (16 Go au total, dont environ 8 Go sont de mémoire tampon / cache).

(*) Le cache est le cache d'opcode APC pour PHP, ce qui réduit l'accès au disque pour l'exécution des scripts PHP. Le cache était plein et fragmenté car il comprenait des fichiers de l'instance de développement. Quand j'ai remarqué cela, je les ai filtrés.

La question est: pourquoi les E / S disque augmentent-elles alors qu'en théorie elles devraient diminuer? Voici quelques graphiques de munin. Le cache était plein du 6 au 8 février.

entrez la description de l'image ici entrez la description de l'image ici Le cache APC est actuellement correct.

Changer après avoir commenté apc.mmap_file_mask comme dit par @ cyberx86

entrez la description de l'image ici entrez la description de l'image ici

Et après quelques jours https://serverfault.com/a/362152/88934

jcisio
la source
2
Ce graphique ne montre pas une augmentation des E / S.
psusi
1
Si vous utilisez un mappage de mémoire sur fichier (par exemple apc.mmap_file_mask=/tmp/apc.XXXXXX), vous pouvez voir des E / S élevées. Essayez de configurer apc.mmap_file_maskpour utiliser la mémoire partagée (par exemple /apc.shm.XXXXXX) ou pour /dev/zero(mémoire mmappée anonyme).
cyberx86
1
@psusi du 6 février 12h au 8 février 12h c'était bas, puis augmenté.
jcisio
@ cyberx86 Je viens de le changer (a commenté cette ligne pour utiliser une mémoire mmappée anonyme) et cela ressemble à cette aide. Je surveillerai encore quelques minutes pour voir. Merci.
jcisio
2
@psusi Il y a / il y avait plusieurs problèmes que je ne peux que résumer, pas expliquer: 1 / APC cache miss (mais le cache du système d'exploitation a touché ces fichiers PHP, donc très peu d'E / S de disque, moins de temps d'attente mais plus de temps moyen d'E / S , qui a principalement validé la transaction MySQL InnoDB) 2 / APC cache hit mais APC utilisait des fichiers (alors le cache du système d'exploitation manque, je ne sais pas pourquoi) 3 / bref, ma question est "lorsque le cache a mal fonctionné, il n'y a (presque) pas de disque I / O "- ce que vous dites est complètement contraire à cela.
jcisio

Réponses:

10

Si vous utilisez un mappage de mémoire sur fichier (par exemple apc.mmap_file_mask=/tmp/apc.XXXXXX), vous pouvez voir des E / S élevées.

Essayez de configurer apc.mmap_file_maskpour utiliser la mémoire partagée (par exemple /apc.shm.XXXXXX) ou pour /dev/zero(mémoire mmappée anonyme). Si le paramètre n'est pas défini par défaut, il utilise la mémoire mmappée anonyme.

Habituellement, les fichiers mmappés sont une bonne chose:

  • Par rapport au stockage complet de quelque chose en mémoire, les fichiers mappés nécessitent généralement moins de mémoire
  • Par rapport à l'enregistrement de quelque chose dans un fichier, les fichiers mmappés nécessitent moins d'E / S disque (car les écritures peuvent être agrégées ensemble).

Cependant, par rapport au stockage de quelque chose de purement en mémoire, ils entraînent des E / S supplémentaires - considérablement donc lorsque le fichier change continuellement. L'inconvénient de ne pas utiliser de fichiers mmappés est un manque de persistance - votre cache ne survivra pas à un redémarrage, car il n'est stocké qu'en mémoire.

On peut donc suggérer que, tandis que le cache se remplissait et se stabilisait, il subissait le plus de changements, qui devaient être constamment écrits sur le disque; une fois que le cache était plein, le ttl pour chaque objet a ralenti la vitesse à laquelle les données du cache étaient retournées, diminuant la modification et réduisant les écritures sur disque.

cyberx86
la source
4

Après quelques jours, je veux maintenant revenir avec quelques graphiques. Le changement améliore beaucoup cette situation. Cela réduit tout, sauf le temps de service IO (je pense que c'est parce qu'il n'y a plus de petit fichier PHP trivial lu qui est bon marché).

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

La charge du serveur (elle était déjà assez faible, donc je n'avais pas découvert le changement).

entrez la description de l'image ici

jcisio
la source
Pourriez-vous s'il vous plaît fournir les modifications que vous avez apportées?
Mircea Vutcovici
Lisez le commentaire de la question et la réponse acceptée. J'ai commentéapc.mmap_file_mask=/tmp/apc.XXXXXX
jcisio
Hé, désolé de vous déranger. Avez-vous déjà vu un effet secondaire sur la mise en commentaire de la ligne mmap_file_mask?. Je vois le même problème ... et cela résout clairement mes problèmes d'utilisation d'E / S. Mais je me demandais ... si rien d'autre ne se cassera!. Merci!
Jorge Leandro Perez
Je n'ai eu aucun problème à commenter cette ligne.
jcisio