Como posso criar um arquivo de despejo de um processo em execução no Linux?

5

Eu tenho um processo que está girando fora de controle no Linux, e gostaria de criar um arquivo de despejo que eu possa levar para minha máquina dev e examinar lá.

No Windows, é possível criar um "minidump" de um programa em execução de várias maneiras diferentes, incluindo ADVPlus e o Gerenciador de Tarefas do Windows, indo para a aba Processos e selecionando com o botão direito do mouse "Create Dump File."

Existe uma maneira de fazer isso no Linux?

Eu precisaria de pilhas de chamadas, pilha e pilha de memória (especialmente pilha), exceções e todo o resto.

    
por John Dibling 15.03.2012 / 20:42

4 respostas

9

Bem, a maneira de criar um arquivo de despejo é:

   gcore - Generate a core file for a running process

SINOPSE        gcore [-o filename] pid

    
por 10.04.2013 / 21:51
7
pmap <PID>

ou

strace -f -o xxx -p <PID> 

podem ser as ferramentas que você está procurando.

O pmap mostra uma visão geral sobre o uso de memória do processo fornecido. strace rastreia cada ação que um processo leva. Com -f você diz strace para também considerar a supervisão de processos filhos e -o xxx informa ao strace para gravar a saída em um arquivo. Você também pode iniciar um novo processo usando strace, por exemplo com

strace cat /etc/passwd

Se você estiver interessado apenas em informações específicas, como quais arquivos foram abertos, poderá iniciar o strace de acordo:

strace -f -o xxx -e trace=open -p <PID>
    
por 15.03.2012 / 21:04
4

Tente isto:

cat /proc/<pid>/smaps > mem.txt

Este link também pode ajudá-lo.

    
por 15.03.2012 / 20:52
0

Enquanto isso, o ProcDump da suíte da Sysinternals também foi disponibilizado sob o comando muito liberal Licença MIT da respectiva página do GitHub .

Usage: procdump [OPTIONS...] TARGET
   OPTIONS
      -C          CPU threshold at which to create a dump of the process from 0 to 100 * nCPU
      -c          CPU threshold below which to create a dump of the process from 0 to 100 * nCPU
      -M          Memory commit threshold in MB at which to create a dump
      -m          Trigger when memory commit drops below specified MB value.
      -n          Number of dumps to write before exiting
      -s          Consecutive seconds before dump is written (default is 10)
   TARGET must be exactly one of these:
      -p          pid of the process

Assim, como você pode deduzir a partir dos argumentos da linha de comando, é fácil tirar "instantâneos" de um processo que você sabe se comportar mal, pegando quantidades indevidas de recursos para serem posteriormente analisados com gdb ou mais.

Este ProcDump para Linux, no entanto, não é completo em comparação com seu primo Windows.

    
por 08.03.2018 / 17:35

Tags