Stai affrontando un problema di prestazioni e sospetti che possa essere correlato all'utilizzo della cache? Un utilizzo elevato della cache normalmente non dovrebbe causare problemi di prestazioni, ma in alcuni rari casi potrebbe essere la causa principale.
Cos'è la cache di memoria
Per velocizzare le operazioni e ridurre l'I/O del disco, il kernel di solito esegue la memorizzazione nella cache della stessa quantità di memoria In base alla progettazione, le pagine contenenti dati memorizzati nella cache possono essere riproposte su richiesta per altri usi (ad es. app) Riutilizzo della memoria per l'uso in questo modo non è più lento che rivendicare pagine incontaminate e incontaminate.
Qual è lo scopo di /proc/sys/vm/drop_caches
La scrittura in /proc/sys/vm/drop_caches consente di richiedere al kernel di eliminare immediatamente il maggior numero possibile di dati memorizzati nella cache. Questo di solito si tradurrà in una parte della memoria che diventa più ovviamente disponibile; tuttavia, in circostanze normali, ciò non dovrebbe essere necessario.
Come cancellare la cache di memoria utilizzando /proc/sys/vm/drop_caches
Scrivendo il valore appropriato nel file /proc/sys/vm/drop_caches fa sì che il kernel elimini cache, dentry e inode puliti dalla memoria, liberando quella memoria.
# sync; echo 1 > /proc/sys/vm/drop_caches
# sync; echo 2 > /proc/sys/vm/drop_caches
# sync; echo 3 > /proc/sys/vm/drop_caches
L'esecuzione della sincronizzazione scrive le pagine sporche sui dischi. Normalmente le pagine sporche sono la memoria in uso, quindi non sono disponibili per la liberazione. Quindi, eseguire la sincronizzazione può aiutare le successive operazioni di rilascio a liberare più memoria.
Cache della pagina è la memoria trattenuta dopo la lettura dei file. Il kernel Linux preferisce mantenere la cache delle pagine inutilizzata presupponendo che i file letti una volta saranno probabilmente letti di nuovo nel prossimo futuro, evitando così l'impatto sulle prestazioni sull'IO del disco.
dentry e inode_cache sono memoria conservata dopo aver letto gli attributi di directory/file, come open() e stat(). dentry è comune a tutti i file system, ma inode_cache è in base al file system. Il kernel Linux preferisce mantenere queste informazioni presumendo che saranno nuovamente necessarie nel prossimo futuro, evitando quindi l'IO del disco.
Nota :Iniziare con il comando di sincronizzazione come mostrato nei 3 comandi precedenti è facoltativo. Il comando sync consente al kernel di scrivere sul disco quante più pagine di cache sporca possibile (per massimizzare il numero di pagine di cache di dati che possono essere eliminate)Come cancellare la cache di memoria usando sysctl
Puoi anche attivare l'eliminazione della cache utilizzando sysctl -w vm.drop_caches=[numero] comando.
sysctl -w vm.drop_caches=3
sysctl -w vm.drop_caches=2
sysctl -w vm.drop_caches=1Nota :L'uso di vm.drop_caches può causare un deadlock se il sistema ha una memoria pesante e un carico di I/O!!!
I dati memorizzati nella cache "puliti" possono essere eliminati. I dati memorizzati nella cache "sporchi" devono essere scritti da qualche parte. L'uso di vm.drop_caches non attiverà mai il kernel per eliminare la cache sporca.