# Lua JIT generates /tmp/perf-<PID>.map files that perf needs to resolve symbols
# We need to map PIDs from Container to Host and copy the corrosponding files so
# perf can resolve the symbols
# Compile LuaJIT in DockerFile with --with-luajit-xcflags="-DLUAJIT_USE_PERFTOOLS"
#!/bin/bash
perf report --sort comm 2> perfErr.txt | gawk '{print $3};'
cat perfErr.txt | awk '{print $4}' | sort -u | grep -E "perf-[0-9]+" | awk -F "[/.]" '{print $3}' | awk -F "-" '{print $2}' | tr '\n' ' ' > perfErrPIDs.dat
cat perfErrPIDs.dat | xargs ps -f | awk '{print $2 "," $3}' | grep -E '[0-9]+' > ContainerErrIDs.csv
cat perfErr.txt | awk '{print $4}' | sort -u | grep -E "perf-[0-9]+" | awk -F "[/.]" '{print $3}' | awk -F "-" '{print $2}' > perfErrPIDs.dat
while read p; do
cat /proc/$p/status | grep NSpid | awk '{print $2 "," $3}' >> PIDMappings.csv
done < perfErrPIDs.dat
while read p; do
ConatinerPID=$(echo $p | awk -F ',' '{print $2}')
HostProcPID=$(echo $p | awk -F ',' '{print $1}')
ContainerProcPID=$(cat PIDMappings.csv | grep $HostProcPID | awk -F ',' '{print $2}')
ContainerName=$(docker ps -q | xargs docker inspect --format '{{.State.Pid}} {{.Name}}' | grep $ConatinerPID | awk '{print $2}' | awk -F '/' '{print $2}')
#echo $ContainerName, $HostProcPID, $ContainerProcID
docker cp $ContainerName:/tmp/perf-$ContainerProcPID.map /tmp/perf-$HostProcPID.map
done < ContainerErrIDs.csv
rm PIDMappings.csv ContainerErrIDs.csv perfErr.txt perfErrPIDs.dat
Last active
August 20, 2020 12:55
-
-
Save Kadle11/7589ab7e8d74195bd01f646387c5e8b1 to your computer and use it in GitHub Desktop.
Generate /tmp/perf-<PID>.map files for OpenResty-Nginx Docker container
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment