2015-04-25 14 views
9

appena appreso queste 3 nuove tecniche da https://unix.stackexchange.com/questions/87908/how-do-you-empty-the-buffers-and-cache-on-a-linux-system:cosa sono pagecache, dentries, inode?


Per pagecache gratis:

# echo 1 > /proc/sys/vm/drop_caches 

Per dentries gratuiti e inode:

# echo 2 > /proc/sys/vm/drop_caches 

per liberare pagecache, dentries e inode:

# echo 3 > /proc/sys/vm/drop_caches 

Sto cercando di capire quali sono esattamente la pagecache, le dentiste e gli inodi. Cosa sono esattamente?

Do loro liberando anche rimuovere l'utile memcached e/o Redis di cache?

-

Perché sto facendo questa domanda? La mia RAM del server Amazon EC2 si stava riempendo nel corso dei giorni - dal 6% al 95% nel giro di 7 giorni. Devo eseguire un cronjob bisettimanale per rimuovere queste cache. Quindi l'utilizzo della memoria scende nuovamente al 6%.

+0

Questi approcci non dovrebbero in realtà avere nulla a che fare con memcached o redis. Queste due applicazioni manterrebbero i loro meccanismi interni di caching per fornire le loro funzionalità all'utente finale e se le vostre 3 operazioni di sistema abbiano o meno impatto su di esse sono un dettaglio di implementazione di Memcached o redis. – jdi

+0

Sono un po 'in ritardo con questa discussione, ma sarebbe bene sapere come si determina che il 95% della RAM è usato nel tuo VM. Spesso c'è un equivoco che tutta la memoria fisica è usata mentre è esattamente nella cache dei buffer + che stiamo discutendo qui. Vedi [link] (http://www.linuxatemyram.com/) per una buona spiegazione di quelle colonne. – bfloriang

+0

Amazon EC2 monitoraggio dettagliato riporta l'utilizzo della memoria (RAM) e utilizzato per mostrare il 95% di utilizzo .. A volte anche 98-99% –

risposta

8

Con una semplificazione eccessiva, vorrei provare a spiegare in quello che sembra essere il contesto della tua domanda perché ci sono più risposte.

Sembra che si stia lavorando con la memorizzazione nella cache delle strutture di directory. An inode nel proprio contesto è una struttura di dati che rappresenta un file. A dentries è una struttura di dati che rappresenta una directory. Queste strutture potrebbero essere utilizzate per costruire una memoria cache che rappresenta la struttura del file su un disco. Per ottenere un elenco direttamente, il sistema operativo potrebbe andare alle denterie - se la directory è lì - elencarne il contenuto (una serie di inode). In caso contrario, vai sul disco e leggilo nella memoria in modo che possa essere riutilizzato.

La cache pagina poteva contenere tutti i mapping di memoria a blocchi su disco. Questo potrebbe essere l'I/O bufferizzato, i file mappati in memoria, le aree di paging dei file eseguibili, tutto ciò che il sistema operativo potrebbe conservare in memoria da un file.

I comandi scaricano questi buffer.

+0

Quindi ho capito, la cancellazione di questi non avrà alcun impatto sull'utile cache in memoria di redis e/o memcache? –

+0

Probabilmente no. Non dovresti davvero aver bisogno di cancellare le cache nella maggior parte dei casi. – user3344003

+1

Effettivamente ... La RAM AWS ec2 passa dal 5% al ​​95% in circa una settimana e non va mai giù (ancora non so perché) ... Devo pulire queste cache su base bi settimanale usando un cronjob –

1

Comune idea sbagliata è che la "memoria libera" è importante. La memoria è destinata a essere utilizzata.

Quindi cerchiamo di chiarire che fuori: la memoria

  • C'è utilizzato, che è dove i dati importanti sono memorizzati, e se questo raggiunge il 100% sei morto
  • Poi c'è cache/buffer che viene utilizzato finché c'è spazio per farlo. È la memoria facoltativa per accedere ai file su disco più velocemente, soprattutto. Se esaurisci la memoria libera, questo si libera solo e ti consente di accedere direttamente al disco.

Cancellare la memoria cache come suggerisci è quasi inutile e significa che stai disattivando un'ottimizzazione, quindi rallenterai.

Se la memoria utilizzata è veramente esaurita, ovvero se la "memoria utilizzata" è alta e si inizia a vedere l'utilizzo dello swap, è necessario fare qualcosa.

TUTTO IL: c'è un bug noto in esecuzione su istanze AWS, con cache dentry che mangia memoria senza un motivo apparente. È chiaramente descritto e risolto in this blog.

La mia esperienza con questo bug è che la cache "dentry" consuma sia la memoria "used" che quella "cache" e non sembra rilasciarla in tempo, causando eventualmente lo scambio. Lo stesso bug può consumare risorse in ogni caso, quindi è necessario esaminarlo.

+0

il tuo link porta a una pagina che uccide il mio browser: il malware è attento. –

+0

che il collegamento è morto –

5

Sto cercando di capire quali sono esattamente gli inpecie, le dentature e gli inode . Cosa sono esattamente?

user3344003 ha già fornito una risposta esatta a quella domanda specifica, ma è comunque importante notare che le strutture di memoria sono allocate dinamicamente.

Quando non c'è un uso migliore per "memoria libera", la memoria verrà utilizzata per quelle cache, ma automaticamente eliminata e liberata quando alcune altre applicazioni "più importanti" desiderano allocare memoria.

No, quelle cache non hanno alcun effetto sulle cache gestite da alcuna applicazione (compresi redis e memcached).

Il mio server RAM Amazon EC2 è stato sempre riempito durante i giorni - dal 6% al fino al 95% nel giro di 7 giorni. Devo eseguire un cronjob bisettimanale per rimuovere queste cache. Quindi l'utilizzo della memoria scende nuovamente al 6%.

Probabilmente stai interpretando male la situazione: il tuo sistema potrebbe semplicemente fare un uso efficiente delle sue risorse.

Semplificare un po 'le cose: la memoria "libera" può anche essere vista come "inutilizzata", o anche più drammatica - uno spreco di risorse: hai pagato per questo, ma non utilizzarlo. Questa è una situazione molto poco economica, e il kernel di Linux cerca di fare un uso "più utile" della memoria "libera".

Parte della sua strategia consiste nell'utilizzarlo per salvare vari tipi di I/O su disco utilizzando varie cache di memoria di dimensioni dinamiche. Un rapido accesso alla memoria cache risparmia l'accesso "lento" al disco, quindi è spesso un'idea utile.

Non appena un processo "più importante" vuole allocare memoria, il kernel di Linux libera volontariamente quelle cache e rende la memoria disponibile per il processo di richiesta. Quindi di solito non è necessario "liberare manualmente" quelle cache.

Il kernel Linux può anche decidere di scambiare la memoria di un processo altrimenti inattivo su disco (spazio di swap), liberando RAM da utilizzare per attività "più importanti", probabilmente anche per essere utilizzata come cache.

Quindi, fintanto che il sistema non esegue attivamente lo swap in/out, ci sono pochi motivi per svuotare manualmente le cache.

Un caso comune di "svuotamento manuale" di tali cache è puramente per confronto comparativo: la tua prima corsa benchmark può essere eseguita con cache "vuote" e quindi dare scarsi risultati, mentre una seconda sessione mostrerà risultati "migliori" (dovuti alle cache pre-riscaldate). Scaricando le cache prima dell'esecuzione di un benchmark, si rimuovono le cache "riscaldate" e quindi le serie di benchmark sono più "giuste" per essere confrontate l'una con l'altra.