Skip to content

Instantly share code, notes, and snippets.

@valtoni
Created June 4, 2020 11:16
Show Gist options
  • Save valtoni/8bc14f2d0e3aaf66fe73a1020581dd67 to your computer and use it in GitHub Desktop.
Save valtoni/8bc14f2d0e3aaf66fe73a1020581dd67 to your computer and use it in GitHub Desktop.
Full dump of program in jdk
#!/bin/bash
LOCAL_DIR=~/
PROGRAM_NAME=my-jar-exe
HOST=$(hostname | cut -d "." -f 1)
PROGRAM_PIDS=$(jps -v | grep $PROGRAM_NAME | cut -d " " -f 1)
function insert_sqlite {
FILE=$2
DATE=$3
PID=$4
ENVIROMENT=$5
TYPE=$1
CONTENT=$(cat $FILE)
DB_SQLITE=$LOCAL_DIR/dump.db
if [ ! -f $DB_SQLITE ]; then
sqlite3 $DB_SQLITE "CREATE TABLE DUMP (id integer primary key autoincrement, date TIMESTAMP, host text, pid int, env text, type text, output text)"
fi
# Scape special chars
#CONTENT=${CONTENT/\'/\\\'}
#CONTENT=${CONTENT/\"/\\\"}
sqlite3 $DB_SQLITE "INSERT INTO DUMP (date, host, pid, env, type, output) VALUES ('$DATE', '$HOST', '$PID', '$ENVIROMENT', '$TYPE', '$CONTENT')"
}
for PROGRAM_PID in $PROGRAM_PIDS; do
# Create one file per PID
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
DB_DATE=$(date +"%Y-%m-%d %H:%M:%S")
# You can do a ENVIRONMENT thing here
# Do it if you want
THREAD_FILE_DUMP=${LOCAL_DIR}/${HOST}_${PROGRAM_PID}_${ENVIRONMENT}_${TIMESTAMP}
THREAD_FILE_DUMP_JSTACK=${THREAD_FILE_DUMP}_jstack
THREAD_FILE_DUMP_THREADS=${THREAD_FILE_DUMP}_ps
THREAD_FILE_DUMP_CLASSES=${THREAD_FILE_DUMP}_classes
THREAD_FILE_DUMP_GC=${THREAD_FILE_DUMP}_gc
# Thread Stack dump
echo "----------------------------------------" >> $THREAD_FILE_DUMP_JSTACK
echo "Thread Stack Dump" >> $THREAD_FILE_DUMP_JSTACK
echo "----------------------------------------" >> $THREAD_FILE_DUMP_JSTACK
jstack -l $PROGRAM_PID >> $THREAD_FILE_DUMP_JSTACK
insert_sqlite jstack $THREAD_FILE_DUMP_JSTACK "$DB_DATE" $PROGRAM_PID $ENVIRONMENT
# System thread dump
echo "----------------------------------------" >> $THREAD_FILE_DUMP_THREADS
echo "System Stack Dump" >> $THREAD_FILE_DUMP_THREADS
echo "----------------------------------------" >> $THREAD_FILE_DUMP_THREADS
echo "Threads active: $(ps -w -T $PROGRAM_PID | wc -l)" >> $THREAD_FILE_DUMP_THREADS
insert_sqlite threads $THREAD_FILE_DUMP_THREADS "$DB_DATE" $PROGRAM_PID $ENVIRONMENT
# Loaded classes
echo "----------------------------------------" >> $THREAD_FILE_DUMP_CLASSES
echo "Stats of Loaded classes" >> $THREAD_FILE_DUMP_CLASSES
echo "----------------------------------------" >> $THREAD_FILE_DUMP_CLASSES
jstat -class $PROGRAM_PID 1 1 >> $THREAD_FILE_DUMP_CLASSES
insert_sqlite classes $THREAD_FILE_DUMP_CLASSES "$DB_DATE" $PROGRAM_PID $ENVIRONMENT
# Garbage collection
echo "----------------------------------------" >> $THREAD_FILE_DUMP_GC
echo "Stats of Garbage Collection" >> $THREAD_FILE_DUMP_GC
echo "----------------------------------------" >> $THREAD_FILE_DUMP_GC
jstat -gc $PROGRAM_PID 1 1 >> $THREAD_FILE_DUMP_GC
insert_sqlite gc $THREAD_FILE_DUMP_GC "$DB_DATE" $PROGRAM_PID $ENVIRONMENT
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment