Linux: scoprire quale processo sta usando tutta la RAM?
Prima di chiedere, tanto per essere chiari: sì, so della cache del disco, e no, non è il mio caso :) Scusate, per questo preambolo :)
Sto usando CentOS 5. Ogni applicazione del sistema si sta scambiando pesantemente, e il sistema è molto lento. Quando faccio free -m
, ecco cosa ho:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
``` ```
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Quindi, in realtà ho solo 42 Mb da usare! Per quanto ho capito, -/+ buffers/cache
in realtà non conta la cache del disco, quindi in realtà ho solo 42 Mb, giusto? Ho pensato, potrei sbagliarmi, così ho provato a spegnere la cache del disco e non ha avuto alcun effetto - l'immagine è rimasta la stessa.
Quindi, ho deciso di scoprire chi sta usando tutta la mia RAM, e ho usato top
per questo. Ma, a quanto pare, riporta che nessun processo sta usando la mia RAM. L'unico processo nel mio top è MySQL, ma sta usando lo 0,1% della RAM e 400Mb di swap. Stessa immagine quando cerco di eseguire altri servizi o applicazioni - tutti vanno in swap, top
mostra che il MEM non viene usato (0,1% massimo per qualsiasi processo).
&001 &001
Restart non aiuta, e, per inciso, è molto lento, cosa che normalmente non mi aspetterei su questa macchina (4 core, 4Gb di RAM, RAID1).
Quindi, con questo - sono abbastanza sicuro che questa non è una cache del disco, chi sta usando la RAM, perché normalmente avrebbe dovuto essere ridotta e lasciare che altri processi usassero la RAM, piuttosto che andare in swap.
Quindi, infine, la domanda è - se qualcuno ha qualche idea su come scoprire quale processo sta effettivamente usando la memoria in modo così pesante?