Last active
November 5, 2025 16:30
-
-
Save s0kil/6b1db453cfac58858e1c38c6caaed558 to your computer and use it in GitHub Desktop.
questdb + graalvm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # QuestDB startup script using GraalVM | |
| # Configuration - adjust these paths as needed | |
| GRAALVM_DIR="$HOME/graalvm/graalvm-community-openjdk-25.0.1+8.1" | |
| QUESTDB_JAR="$HOME/questdb/questdb-9.1.1-no-jre-bin/questdb.jar" | |
| QUESTDB_ROOT="$HOME/.questdb" | |
| # Derived paths | |
| JAVA_BIN="$GRAALVM_DIR/bin/java" | |
| PID_FILE="$QUESTDB_ROOT/questdb.pid" | |
| LOG_FILE="$QUESTDB_ROOT/questdb.log" | |
| start() { | |
| if [ -f "$PID_FILE" ]; then | |
| PID=$(cat "$PID_FILE") | |
| if ps -p $PID > /dev/null 2>&1; then | |
| echo "QuestDB is already running (PID: $PID)" | |
| return 1 | |
| else | |
| echo "Removing stale PID file" | |
| rm -f "$PID_FILE" | |
| fi | |
| fi | |
| # Verify Java exists | |
| if [ ! -f "$JAVA_BIN" ]; then | |
| echo "Error: GraalVM not found at $JAVA_BIN" | |
| exit 1 | |
| fi | |
| # Verify QuestDB jar exists | |
| if [ ! -f "$QUESTDB_JAR" ]; then | |
| echo "Error: QuestDB jar not found at $QUESTDB_JAR" | |
| exit 1 | |
| fi | |
| # Set file limits - both hard and soft | |
| echo "Setting file limits..." | |
| ulimit -H -n 1048576 2>/dev/null || ulimit -H -n $(ulimit -Hn) | |
| ulimit -S -n 1048576 2>/dev/null || ulimit -S -n $(ulimit -Hn) | |
| echo "Hard limit: $(ulimit -Hn)" | |
| echo "Soft limit: $(ulimit -Sn)" | |
| echo "Starting QuestDB with GraalVM..." | |
| echo "Java: $JAVA_BIN" | |
| "$JAVA_BIN" -version | |
| mkdir -p "$QUESTDB_ROOT" | |
| nohup "$JAVA_BIN" \ | |
| -Djava.awt.headless=true \ | |
| -XX:+UnlockExperimentalVMOptions \ | |
| -XX:+AlwaysPreTouch \ | |
| -XX:+UseParallelGC \ | |
| -XX:ErrorFile=$QUESTDB_ROOT/db/hs_err_pid%p.log \ | |
| -Dquestdb.server.root=$QUESTDB_ROOT \ | |
| -jar "$QUESTDB_JAR" \ | |
| -d "$QUESTDB_ROOT" > "$LOG_FILE" 2>&1 & | |
| echo $! > "$PID_FILE" | |
| echo "QuestDB started (PID: $(cat $PID_FILE))" | |
| echo "Logs: $LOG_FILE" | |
| } | |
| stop() { | |
| if [ ! -f "$PID_FILE" ]; then | |
| echo "QuestDB is not running (no PID file)" | |
| return 1 | |
| fi | |
| PID=$(cat "$PID_FILE") | |
| if ps -p $PID > /dev/null 2>&1; then | |
| echo "Stopping QuestDB (PID: $PID)..." | |
| kill $PID | |
| # Wait for process to stop | |
| for i in {1..30}; do | |
| if ! ps -p $PID > /dev/null 2>&1; then | |
| echo "QuestDB stopped" | |
| rm -f "$PID_FILE" | |
| return 0 | |
| fi | |
| sleep 1 | |
| done | |
| echo "Force killing QuestDB..." | |
| kill -9 $PID | |
| rm -f "$PID_FILE" | |
| else | |
| echo "QuestDB is not running (stale PID file)" | |
| rm -f "$PID_FILE" | |
| fi | |
| } | |
| status() { | |
| if [ -f "$PID_FILE" ]; then | |
| PID=$(cat "$PID_FILE") | |
| if ps -p $PID > /dev/null 2>&1; then | |
| echo "QuestDB is running (PID: $PID)" | |
| return 0 | |
| else | |
| echo "QuestDB is not running (stale PID file)" | |
| return 1 | |
| fi | |
| else | |
| echo "QuestDB is not running" | |
| return 1 | |
| fi | |
| } | |
| case "$1" in | |
| start) | |
| start | |
| ;; | |
| stop) | |
| stop | |
| ;; | |
| restart) | |
| stop | |
| sleep 2 | |
| start | |
| ;; | |
| status) | |
| status | |
| ;; | |
| *) | |
| echo "Usage: $0 {start|stop|restart|status}" | |
| exit 1 | |
| ;; | |
| esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment