Prima di eseguire un lavoro di benchmarking, come si libererebbe la memoria (RAM) che il kernel Linux sta consumando per i suoi buffer e cache?
Si noti che questo è principalmente utile per il benchmarking. Svuotare i buffer e la cache riduce prestazione! Se sei qui perché pensavi che liberare buffer e cache fosse una cosa positiva, vai a leggere Linux ha mangiato la mia RAM!. La breve storia:la memoria libera è la memoria inutilizzata sprecata memoria.
Risposta accettata:
Svuotamento della cache dei buffer
Se vuoi svuotarlo puoi usare questa catena di comandi.
# free && sync && echo 3 > /proc/sys/vm/drop_caches && free
total used free shared buffers cached
Mem: 1018916 980832 38084 0 46924 355764
-/+ buffers/cache: 578144 440772
Swap: 2064376 128 2064248
total used free shared buffers cached
Mem: 1018916 685008 333908 0 224 108252
-/+ buffers/cache: 576532 442384
Swap: 2064376 128 2064248
Puoi segnalare al kernel Linux di eliminare vari aspetti degli elementi memorizzati nella cache modificando l'argomento numerico nel comando precedente.
-
Per liberare la cache di pagina:
# echo 1 > /proc/sys/vm/drop_caches
-
Per liberare denti e inode:
# echo 2 > /proc/sys/vm/drop_caches
-
Per liberare pagecache, dentries e inode:
# echo 3 > /proc/sys/vm/drop_caches
Quanto sopra è pensato per essere eseguito come root. Se stai provando a farli usando sudo
quindi dovrai cambiare leggermente la sintassi in qualcosa di simile a questi:
$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'
NOTA: C'è una versione più esoterica del comando precedente se ti piace:
$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh
Perché il cambio di sintassi? Il /bin/echo
il programma è in esecuzione come root, a causa di sudo
, ma la shell che reindirizza l'output di echo al file di solo root è ancora in esecuzione come te. La tua shell attuale esegue il reindirizzamento prima sudo
inizia.
Vedere cosa c'è nei buffer e nella cache
Dai un'occhiata a linux-ftools
se desideri analizzare il contenuto dei buffer e della cache. In particolare, se desideri vedere quali file sono attualmente memorizzati nella cache.
fincore
Con questo strumento puoi vedere quali file vengono memorizzati nella cache all'interno di una determinata directory.
fincore [options] files...
--pages=false Do not print pages
--summarize When comparing multiple files, print a summary report
--only-cached Only print stats for files that are actually in cache.
Ad esempio, /var/lib/mysql/blogindex
:
[email protected]:/var/lib/mysql/blogindex# fincore --pages=false --summarize --only-cached *
stats for CLUSTER_LOG_2010_05_21.MYI: file size=93840384 , total pages=22910 , cached pages=1 , cached size=4096, cached perc=0.004365
stats for CLUSTER_LOG_2010_05_22.MYI: file size=417792 , total pages=102 , cached pages=1 , cached size=4096, cached perc=0.980392
stats for CLUSTER_LOG_2010_05_23.MYI: file size=826368 , total pages=201 , cached pages=1 , cached size=4096, cached perc=0.497512
stats for CLUSTER_LOG_2010_05_24.MYI: file size=192512 , total pages=47 , cached pages=1 , cached size=4096, cached perc=2.127660
stats for CLUSTER_LOG_2010_06_03.MYI: file size=345088 , total pages=84 , cached pages=43 , cached size=176128, cached perc=51.190476
stats for CLUSTER_LOG_2010_06_04.MYD: file size=1478552 , total pages=360 , cached pages=97 , cached size=397312, cached perc=26.944444
stats for CLUSTER_LOG_2010_06_04.MYI: file size=205824 , total pages=50 , cached pages=29 , cached size=118784, cached perc=58.000000
stats for COMMENT_CONTENT_2010_06_03.MYI: file size=100051968 , total pages=24426 , cached pages=10253 , cached size=41996288, cached perc=41.975764
stats for COMMENT_CONTENT_2010_06_04.MYD: file size=716369644 , total pages=174894 , cached pages=79821 , cached size=326946816, cached perc=45.639645
stats for COMMENT_CONTENT_2010_06_04.MYI: file size=56832000 , total pages=13875 , cached pages=5365 , cached size=21975040, cached perc=38.666667
stats for FEED_CONTENT_2010_06_03.MYI: file size=1001518080 , total pages=244511 , cached pages=98975 , cached size=405401600, cached perc=40.478751
stats for FEED_CONTENT_2010_06_04.MYD: file size=9206385684 , total pages=2247652 , cached pages=1018661 , cached size=4172435456, cached perc=45.321117
stats for FEED_CONTENT_2010_06_04.MYI: file size=638005248 , total pages=155763 , cached pages=52912 , cached size=216727552, cached perc=33.969556
stats for FEED_CONTENT_2010_06_04.frm: file size=9840 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000
stats for PERMALINK_CONTENT_2010_06_03.MYI: file size=1035290624 , total pages=252756 , cached pages=108563 , cached size=444674048, cached perc=42.951700
stats for PERMALINK_CONTENT_2010_06_04.MYD: file size=55619712720 , total pages=13579031 , cached pages=6590322 , cached size=26993958912, cached perc=48.533080
stats for PERMALINK_CONTENT_2010_06_04.MYI: file size=659397632 , total pages=160985 , cached pages=54304 , cached size=222429184, cached perc=33.732335
stats for PERMALINK_CONTENT_2010_06_04.frm: file size=10156 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000
---
total cached size: 32847278080
Con l'output sopra puoi vedere che ci sono diversi file *.MYD, *.MYI e *.frm che sono attualmente memorizzati nella cache.
Correlati:Debian – Perché "ls" avvolge improvvisamente gli elementi con spazi tra virgolette singole?Scambia
Se vuoi cancellare il tuo scambio puoi usare i seguenti comandi.
$ free
total used free shared buffers cached
Mem: 7987492 7298164 689328 0 30416 457936
-/+ buffers/cache: 6809812 1177680
Swap: 5963772 609452 5354320
Quindi usa questo comando per disabilitare lo scambio:
$ swapoff -a
Puoi confermare che ora è vuoto:
$ free
total used free shared buffers cached
Mem: 7987492 7777912 209580 0 39332 489864
-/+ buffers/cache: 7248716 738776
Swap: 0 0 0
E per riattivarlo:
$ swapon -a
E ora riconferma con free
:
$ free
total used free shared buffers cached
Mem: 7987492 7785572 201920 0 41556 491508
-/+ buffers/cache: 7252508 734984
Swap: 5963772 0 5963772