Eu tentei uma pesquisa, mas parece que não há muita coisa lá fora no pmap, então aqui vai.
Eu tenho um script que funciona com instâncias do WebLogic para coletar dados sobre eles, que podemos enviar para nossos desenvolvedores para solução de problemas. Incluído na coleta de dados está um pmap no PID da instância especificada, mas quando a instância está enfrentando encadeamentos presos, OC grande ou está em um estado com falha, o pmap trava.
Devido ao fato de que o tempo limite não está instalado nos Servidores com os quais trabalhamos (e não pode ser), tentei gravar uma condição para permitir que o processo pmap fosse executado por não mais de 45 segundos e eliminá-lo, mas não parece estar funcionando, pois o pmap ainda trava nas instâncias afetadas.
Este é o código:
echo "Running pmap for a maximum of 45 seconds..."
pmap -x $1 > /tmp/pmapdump.txt &
pmapPID=$!
sleep 10
pmapRunning=$(pgrep -fl "${pmapPID}" |head -1 |awk '{print $1}')
if [ "${pmapRunning}" != "" ]; then
sleep 30
echo "The pmap appears to be stuck. This typically happens if the instance is in a failed state or has stuck threads."
echo "Killing the pmap and moving on with the rest of the script..."
kill -9 "${pmapPID}"
else
:
fi
Isso é chamado pelo script principal e parece ser executado corretamente, exceto por NÃO ter matado o processo e interrompido como antes de eu decidir criar este script.
Qualquer ajuda / conselho é muito apreciada, já que estou começando a puxar o cabelo por causa disso.