I / O su disco alto quando viene utilizzata la cache?


9

Alcuni giorni fa ho notato un'attesa di I / O su disco e un calo dell'attività del disco (il che era fantastico). Poi noto anche che la mia cache era piena (*) e frammentata. Quindi ho svuotato la cache. Successivamente, la latenza del disco e l'attività del disco sono passate al livello precedente (che era male).

IOtop mostra che [jbd2 / sda2-8] e [flush-8: 00] sono sempre in cima all'utilizzo del disco. Questo è un Dell R210, RAID 1 hardware (H200) con molta memoria libera (16 GB in totale, di cui circa 8 GB sono buffer / cache).

(*) La cache è cache opcode APC per PHP, che riduce l'accesso al disco per l'esecuzione dello script PHP. La cache era piena e frammentata perché includeva file dall'istanza di sviluppo. Quando l'ho notato, li ho filtrati.

La domanda è: perché l'I / O del disco aumenta quando teoricamente dovrebbe diminuire? Di seguito sono riportati alcuni grafici di Monaco. La cache era piena dal 6 all'8 febbraio.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine La cache APC è attualmente ok.

Cambia dopo aver commentato apc.mmap_file_mask come detto da @ cyberx86

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

E dopo qualche giorno https://serverfault.com/a/362152/88934


2
Quel grafico non mostra un aumento dell'IO.
psusi,

1
Se si utilizza la mappatura della memoria supportata da file (ad es. apc.mmap_file_mask=/tmp/apc.XXXXXX), È possibile che si verifichi I / O elevato. Prova a impostare apc.mmap_file_maskl'uso della memoria condivisa (ad esempio /apc.shm.XXXXXX) o /dev/zero(memoria mmapped anonima).
cyberx86,

1
@psusi dal 6 febbraio alle 12 all'8 febbraio alle 12 era basso, poi aumentato.
jcisio,

@ cyberx86 L'ho appena cambiato (commentato quella riga per usare la memoria mmapped anonima) e sembra che aiuti. Controllerò ancora qualche minuto per vedere. Grazie.
jcisio,

2
@psusi Ci sono / sono stati diversi problemi che posso solo riprendere, non spiegare: 1 / APC cache miss (ma hit della cache del sistema operativo per quei file PHP, quindi I / O su disco molto poco, meno tempo di attesa ma più tempo di I / O avg , che per lo più MySQL InnoDB effettua il commit della transazione) 2 / APC hit della cache ma APC utilizzava i file (quindi mancava la cache del sistema operativo, non so perché) 3 / breve, la mia domanda è "quando la cache ha funzionato male, non c'è (quasi) nessun disco I / O "- quello che stai dicendo è completamente contrario.
jcisio,

Risposte:


10

Se si utilizza la mappatura della memoria supportata da file (ad es. apc.mmap_file_mask=/tmp/apc.XXXXXX), È possibile che si verifichi I / O elevato.

Prova a impostare apc.mmap_file_maskl'uso della memoria condivisa (ad esempio /apc.shm.XXXXXX) o /dev/zero(memoria mmapped anonima). Mantenere l'impostazione non definita per impostazione predefinita viene utilizzata la memoria mmapped anonima.

Di solito, i file mmapped sono un'ottima cosa:

  • Rispetto alla memorizzazione di qualcosa di completamente in memoria, i file mmapped di solito richiedono meno memoria
  • Rispetto al salvataggio di qualcosa in un file, i file mmapped richiedono meno I / O su disco (poiché le scritture possono essere aggregate insieme).

Tuttavia, rispetto alla memorizzazione di qualcosa di puramente in memoria, comportano I / O aggiunto, in modo considerevole quando il file cambia continuamente. L'aspetto negativo di non utilizzare i file mmapped è la mancanza di persistenza: la cache non sopravviverà a un riavvio, poiché è memorizzata solo in memoria.

Si potrebbe quindi suggerire che, mentre la cache si stava riempiendo e stabilizzando, stava subendo il maggior numero di modifiche, che dovevano essere costantemente scritte su disco; una volta che la cache era piena, il ttl per ogni oggetto ha rallentato la velocità con cui i dati nella cache venivano invertiti, diminuendo la modifica e riducendo le scritture del disco.


4

Dopo alcuni giorni, ora voglio tornare con alcuni grafici. Il cambiamento migliora molto quella situazione. Riduce tutto, tranne il tempo di servizio IO (penso che sia perché non c'è più un piccolo file PHP banale letto che è economico).

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Il carico del server (era già abbastanza basso, quindi non avevo scoperto la modifica).

inserisci qui la descrizione dell'immagine


Potresti fornire le modifiche che hai apportato?
Mircea Vutcovici,

Leggi il commento alla domanda e la risposta accettata. Ho commentatoapc.mmap_file_mask=/tmp/apc.XXXXXX
jcisio il

Ehi, mi dispiace disturbarla. Hai mai visto alcun effetto collaterale nel commentare la riga mmap_file_mask ?. Sto riscontrando lo stesso problema ... e questo risolve chiaramente i miei problemi di utilizzo I / O. Ma mi chiedevo ... se nient'altro si romperà !. Grazie!
Jorge Leandro Perez,

Non ho avuto problemi a commentare quella riga.
jcisio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.