obtém o uso de swap para um processo

5

Eu estou procurando um caminho, a partir de um script de shell, para obter o uso de swap para um processo específico. O topo pode mostrar essa informação, mas apenas no modo interativo. O modo em lote mostrará apenas personalizações quando um .toprc estiver presente, mas você não poderá especificar um .toprc específico na linha de comando. Eu encontrei este script , mas não há entradas de swap em / proc / * / smaps no meu servidor:

# find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi swap '{}'/smaps \;
#

, então o script apenas gera 0 para cada processo.

Existe uma maneira de encontrar essa informação? Estou no RHEL5.1 2.6.18-53.el5 x86_64.

Editar:

Para ser claro, quando eu pergunto sobre "uso de troca", quero dizer a quantidade de memória usada por um processo que foi paginado para o sistema de arquivos de troca (o que não está atualmente na memória principal). Supondo que não há melhor maneira, vou usar o padrão para calculá-lo com (virtual - rss) através dos valores de ps -o vsz,rss .

    
por Christopher Neylan 11.04.2012 / 21:59

3 respostas

3

Uma pergunta interessante que me fez coçar a cabeça por um tempo.

Primeiro, por que você não tem a linha Swap: embora em teoria isso tenha sido adicionado no kernel 2.6.16, ele não apareceu no RHEL até 5.3 ou mais (kernel 2.6.18-99.el5). Aqui está o commit (infelizmente não acessível no RH Bugzilla; se você tiver uma conta com privilégios apropriados, o ID do Bugzilla é 443749). link

Segundo, isso implica que os dados principais não são confiáveis, pois não estão lendo os smaps (isto é, virt-res):

    case P_SWP:
       MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));

Em terceiro lugar, lamento dizer que o kernel é o One True Oracle em quanto swap é usado e, até onde eu sei, os vários patches para disponibilizar as informações em smaps e status são a única maneira de expor isso em formação. Infelizmente, vejo a atualização do seu kernel como a única maneira de obter informações precisas; seja remendando a fonte ( patch de amostra, sem garantia ) ou atualizando para o kernel 2.6.18-99.el5.

Eu gostaria que houvesse uma resposta mais fácil; culpa Linus.

    
por 12.04.2012 / 16:46
1

Procure em /proc/<pid>/status . Você verá uma linha VmSwap .

    
por 11.04.2012 / 22:38
-2

Parece a partir da página man do ps (1) para o CentOS 5 ( 1 )  que você pode especificar vsize (VSZ) como um campo de saída, assim seria algo como:

/bin/ps -p $pid -o vsize=

faz o truque para você? Isso extrai o "tamanho da memória virtual do processo em KiB (unidades de 1024 bytes)" e o = faz com que ele saia do cabeçalho da coluna.

    
por 11.04.2012 / 22:14

Tags