Quantidade total de uso de memória por um único processo

1

Eu quero obter uma quantidade total de uso de memória para um processo específico. Por exemplo, digamos que eu queira ter a quantidade total de memória obtida pelo link . Então, se eu fizer um comando tail como tail -M , recebo:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                 
10036 mysql     20   0  417m  76m 3820 S  0.3 15.5   0:13.55 mysqld                                                                                  
10453 apache    20   0  229m  67m  42m S  0.0 13.7   0:10.81 httpd                                                                                   
10447 apache    20   0  230m  64m  38m S  0.0 13.0   0:11.54 httpd                                                                                   
10479 apache    20   0  226m  64m  42m S  0.0 13.0   0:09.75 httpd                                                                                   
10478 apache    20   0  230m  63m  38m S  0.0 12.9   0:11.02 httpd                                                                                   
10451 apache    20   0  230m  63m  37m S  0.0 12.8   0:10.37 httpd                                                                                   
 9599 apache    20   0  227m  61m  38m S  0.0 12.4   0:10.80 httpd                                                                                   
10454 apache    20   0  226m  60m  38m S  0.0 12.2   0:09.56 httpd                                                                                   
10476 apache    20   0  225m  58m  38m S  0.0 11.9   0:09.87 httpd                                                                                   
10332 apache    20   0  228m  50m  24m S  0.0 10.2   0:13.73 httpd                                                                                   
10445 apache    20   0  220m  42m  24m S  0.0  8.5   0:10.17 httpd                                                                                   
  637 root      10 -10 32816  25m 1712 S  0.0  5.2   0:00.01 iscsiuio                                                                                
  652 root      10 -10  5128 2972 1876 S  0.0  0.6   0:05.86 iscsid                                                                                  
 9592 root      20   0  207m 2872  900 S  0.0  0.6   0:00.39 httpd                                                                                   
10196 nobody    20   0  136m 2408  500 S  0.0  0.5   0:00.79 memcached              

Neste caso, quero ter o "VIRT", "RES", "SHR", "% CUP", & "% MEM" totalmente adicionado para cada linha da saída.

Existe alguma maneira que eu possa fazer isso?

    
por Aneek Mukhopadhyay 26.01.2013 / 19:01

3 respostas

1

Tente fazer isso usando :

top -b -n1 -c | 
    awk -vOFS=$'\t' '
        $2 == "apache"{
            virt+=$5; res+=$6; shr+=$7; cpu+=$9; mem+=$10; count++
        }
        END{
            print "virt", "res", "shr", "cpu", "mem"
            print virt, res, shr, cpu/count, mem/count
        }
    '
    
por 26.01.2013 / 19:16
0

O uso da memória por um processo não é um conceito bem definido: existem áreas de memória compartilhada (bibliotecas compartilhadas, vários processos compartilhando o executável, dados não modificados compartilhados pai / filho). Se você agora usa threads, por definição todos os threads compartilham os recursos do processo que os contém.

    
por 27.01.2013 / 19:35
0

Os valores de memória relatados por top não podem ser computados devido à memória compartilhada, especialmente com algo como o apache, no qual você tem várias cópias do mesmo processo. Há um script chamado ps_mem.py que lhe dará uma ideia melhor do que está usando a memória como leva em consideração a memória compartilhada, contanto que você tenha um kernel > 2.6.23 que relata " Tamanho do Conjunto Proporcional " ou PSS por processo.

Você também pode calcular os valores Private_* em /proc/[0-9]*/smaps se precisar ter mais uma ideia do uso de memória por pid, onde a memória privada é o único valor que faz sentido.

    
por 26.01.2014 / 02:30