Relatório de uso de memória por processo / programa

1

Como posso obter o uso de memória atual para todos os processos em execução individualmente? De preferência em bytes, para que possam ser adicionados com precisão. Posso reunir os resumos dos processos filhos no processo que os gerou? (por exemplo, todos os threads do apache juntos).

Às vezes, meu servidor fica sem memória e não responde. Eu quero descobrir o que está usando toda a memória. Infelizmente, é provável que não seja um processo único. Alguns programas geram centenas de processos, cada um usando muito pouca memória, mas acrescenta.

    
por Nick Retallack 22.03.2010 / 23:36

4 respostas

2

Isso fará você parte do caminho:

ps axfo %mem,size,rss,vsz,pid,args

A propósito, o Apache provavelmente é pré-formatado em vez de encadeado.

    
por 23.03.2010 / 00:23
1
ps aux

Existe uma coluna chamada RSS, que é o uso de memória não trocada em kilobytes. Eu tive que analisar a saída desse comando e adicioná-lo sozinho para descobrir o total por nome de comando.

    
por 23.03.2010 / 00:16
1

Eu apresento smem , que introduz o conceito de Tamanho do conjunto proporcional :

Because large portions of physical memory are typically shared among multiple applications, the standard measure of memory usage known as resident set size (RSS) will significantly overestimate memory usage. PSS instead measures each application's "fair share" of each shared area to give a realistic measure.

Alternativamente, você pode apenas procurar por logs do oomkiller, ele dirá qual programa foi morto por quebrar o camelo na alocação de memória.

    
por 23.03.2010 / 02:12
0

Você não informa o que você está executando no Unix. Se é Solaris, você pode usar o comando prstat que tem algumas opções úteis, como:

prstat -s rss -a # sorted by RAM usage, per user metrics
    
por 23.03.2010 / 00:23