O comando time
inclui um parâmetro de formato "M", que, de acordo com a página time
man no Linux, é usado para o seguinte:
Maximum resident set size of the process during its lifetime, in Kilobytes.
No entanto, não parece que time
seja capaz de medir o tamanho máximo do conjunto virtual de um processo durante sua vida útil. Como posso conseguir isso no Linux?
Só para ficar claro, eu tenho controle sobre os processos sendo perfilados, então se eu precisar fazer este processo filho emitir um sinal no final de sua execução que indica que ele está pronto para terminar, para que o processo pai possa ler seu VSZ via ps
ou pmap
, e então o processo pai terminar explicitamente o filho depois que a memória for lida, eu posso fazê-lo, mas seria doloroso, então eu esperava que houvesse uma solução mais simples que não envolveu instrumentar o código do programa que está sendo analisado - algo como um equivalente drop-in para time
que também pode medir o tamanho máximo do conjunto virtual seria ideal. Eu posso escrever um programa C personalizado para iniciar o processo filho, se necessário. No entanto, se eu fosse para a rota C, não sei quais chamadas de sistema eu usaria para habilitar o rastreamento de kernel do VSZ no processo filho.
Qualquer orientação seria apreciada.
EDIT: Isso acaba por ser não trivial. Soluções possíveis aqui: link