Como verificar qual processo está usando mais memória

33

Quando eu faço check- freein em um servidor Prod, ele mostra que 70% da memória está sendo usada:

             total       used       free     shared    buffers     cached
Mem:     164923172  141171860   23751312          0    4555616   20648048
-/+ buffers/cache:  115968196   48954976
Swap:      8388600          0    8388600

Mas não encontrei qual processo está usando a memória, tentei o topcomando e está mostrando o processo usando apenas a memória 1.1 e 5.4%

Como posso descobrir qual processo está usando a memória?

Abaixo estão os principais resultados do comando:

15085 couchbas  25   0 2784m 2.4g  40m S 183.7  1.5 299597:00 beam.smp
28248 tibco     18   0  124m 100m 3440 S 20.9  0.1   2721:45 tibemsd
15334 couchbas  15   0 9114m 8.6g 3288 S  9.0  5.4  12996:28 memcached
15335 couchbas  18   0  6024  600  468 S  2.0  0.0   1704:54 sigar_port
15319 couchbas  15   0  775m 2516  944 S  0.7  0.0 269:13.41 i386-linux-godu
12167 tibco     16   0 11284 1464  784 R  0.3  0.0   0:00.04 top
12701 root      15   0  451m 427m 2140 S  0.3  0.3  18:25.02 controller
13163 root      11  -5     0    0    0 S  0.3  0.0 289:58.58 vxglm_thread
sandeep
fonte
Obrigado pela resposta rápida, Existe alguma maneira de verificar o que todos os arquivos abertos e qual arquivo está comendo memeory.
11
Tente classificar a saída superior - ao executar, pressione Shift + m
Eenoku 7/14

Respostas:

50

Isso mostrará os 10 principais processos que utilizam mais memória:

ps aux --sort=-%mem | awk 'NR<=10{print $0}'

using top: quando você abre, a imprensa superior mfará um curto processo com base no uso da memória.

Mas isso não resolverá o seu problema, no Linux tudo é arquivo ou processo. então os arquivos que você abriu também consumirão a memória. então isso não vai ajudar.

lsof fornecerá todos os arquivos abertos com o tamanho do arquivo ou o deslocamento do arquivo em bytes.

Hackaholic
fonte
5
Você pode usar em headvez desse script awk - ele fornece a mesma saída e você economiza escrevendo muitos caracteres estranhos.
styrofoam fly
9

Seu carneiro não é realmente usado. O Linux apenas armazena em cache as coisas em seu disco por padrão e coloca o que ele armazena em cache na seção "usada" do ram.

Se você carregar aplicativos que realmente usam essa RAM, eles serão usados.

Consulte http://www.linuxatemyram.com/

Jean-Michaël Celerier
fonte
Quem disse algo sobre o Linux?
Timothy Pulliam
o OP tem um processo "i386-linux-godu" em execução
Jean-Michaël Celerier
6

Você pode canalizar ps e classificar para obter o processo usando mais memória. Também permitirá que você especifique outros detalhes do processo que deseja ver com ele:

ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

PS: O acima pressupõe que sua coluna de memória seja a primeira " classifique -k 1 -n -r "

Hynk
fonte
3

Você pode usar o comando slabtop para visualizar quais objetos da laje são usados ​​pelo kernel.
Além disso, você pode verificar a saída de / proc / meminfo

Procure essas 2 linhas na saída

Slab:              68136 kB
SReclaimable:      21208 kB 

O exemplo acima mostra 68MB de cache de laje sendo usado pelo kernel e 21MB podem ser recuperados. Para recuperar, você pode usar a técnica descrita aqui https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  
Dmitry Zayats
fonte
1

Para uma análise interativa, você pode usar htope pressionar a tecla de função F6para escolher a ordem de classificação, por exemplo PERCENT_CPU(uso da memória em porcentagem), M_RESIDENT(tamanho da memória residente, a memória real usada), M_SIZE(tamanho da memória virtual) ou M_SHARE(tamanho da memória) . memoria compartilhada). Os dois primeiros são os números relevantes .

As linhas verdes são linhas. Pressione (maiúscula) Ke Hpara ocultá-los.

Marc Wäckerlin
fonte