JBoss EAP 6 Standalone ๋ชจ๋์ ์ด์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด, JVM ์ต์ ๊ณผ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ณ๋์ ์ค์ ํ์ผ(Config Shell)๋ก ๋ถ๋ฆฌํ๊ณ ์ด๋ฅผ ๋ก๋ํ์ฌ ์๋ฒ๋ฅผ ์ ์ด(Start/Stop/Status)ํ๋ ์ปค์คํ ์ ์คํฌ๋ฆฝํธ ์์ฑ๋ฒ์ ๊ณต์ ํฉ๋๋ค.
Test Environment
- OS: CentOS 7.2
- Middleware: JBoss EAP 6.4
1. ์คํฌ๋ฆฝํธ ๊ตฌ์กฐ ๋ฐ ์ ๋ต
์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ์ํด ์คํฌ๋ฆฝํธ๋ฅผ ๋ ๊ฐ์ ํ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- Config Script (config1.sh): JVM ์ต์ , ๊ฒฝ๋ก, IP, ํฌํธ ๋ฑ ๋ณ์ ์ ์.
- Control Script (jboss_ctl.sh): Config๋ฅผ ๋ก๋ํ์ฌ ์ค์ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๋ ๋ก์ง.
2. ์ค์ ์คํฌ๋ฆฝํธ (config1.sh)
์๋ฒ ์ธ์คํด์ค๋ณ ๊ณ ์ ํ ์ค์ ์ ์ด๊ณณ์ ์ ์ํฉ๋๋ค. JAVA_OPTS๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋ฐ GC ๋ก๊ทธ ์ค์ ์ ์์ธํ๊ฒ ํ๋ํ ์ ์์ต๋๋ค.
#!/bin/sh
DATE=`date +%Y%m%d%H%M%S`
##### 1. Basic Configuration #####
export JBOSS_HOME=/SW/was/JBoss
export SERVER_HOME=/SW/was/JBoss/TEST/TESTServer11
export LOG_PATH=/app/logs/was
export NODE_NAME=TESTServer11
export CONFIG_FILE=standalone-ha.xml
# Network & Port Offset
export SERVER_IP=10.252.16.25
export PORT_OFFSET=750
export MGMT_ADDR=$SERVER_IP
# Controller Port Calculation (Base 9999 + Offset)
let CONTROLLER_PORT=9999+$PORT_OFFSET
export CONTROLLER_PORT
# Admin User (Shutdown์ฉ)
export USER=admin
##### 2. JVM Options (Memory & GC) #####
# Heap Memory
export JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
# GC Logging
export JAVA_OPTS=" $JAVA_OPTS -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails "
export JAVA_OPTS=" $JAVA_OPTS -Xloggc:$LOG_PATH/log/gclog/gc_$DATE.log "
# GC Algorithm (ParallelGC)
export JAVA_OPTS=" $JAVA_OPTS -XX:+UseParallelGC -XX:+ExplicitGCInvokesConcurrent"
# Heap Dump on OOM
export JAVA_OPTS=" $JAVA_OPTS -XX:-HeapDumpOnOutOfMemoryError "
export JAVA_OPTS=" $JAVA_OPTS -XX:HeapDumpPath=$LOG_PATH/heap/$NODE_NAME "
##### 3. System Properties (-D options) #####
export JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true"
export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.resolver.warning=true"
export JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true"
export JAVA_OPTS=" $JAVA_OPTS -DjvmRoute=$NODE_NAME"
# JBoss Path & Binding
export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.base.dir=$SERVER_HOME"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.log.dir=$LOG_PATH/$NODE_NAME"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.socket.binding.port-offset=$PORT_OFFSET"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.node.name=$NODE_NAME"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address.management=$MGMT_ADDR"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address=$SERVER_IP"
# Clustering (Multicast)
export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.jgroups.stack=tcp"
# export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.multicast.address=230.1.0.1"
echo "Configuration Loaded: $NODE_NAME"
3. ์ ์ด ์คํฌ๋ฆฝํธ (jboss_ctl.sh)
์ค์ ๊ธฐ๋ ๋ฐ ์ ์ง๋ฅผ ๋ด๋นํ๋ ๋ฉ์ธ ์คํฌ๋ฆฝํธ์
๋๋ค. ./config/config1.sh๋ฅผ ๋ก๋ํ์ฌ ๋ณ์๋ค์ ๊ฐ์ ธ์ต๋๋ค.
#!/bin/sh
# Config ํ์ผ ๋ก๋ (๊ฒฝ๋ก ์ฃผ์)
. ./config/config1.sh
start(){
# ํ๋ก์ธ์ค ์ค๋ณต ์คํ ๋ฐฉ์ง
PID=`ps -ef | grep java | grep "jboss.node.name=$NODE_NAME " | awk '{print $2}'`
if [ "x$PID" != "x" ]; then
echo "###############################################"
echo "ERROR: JBoss SERVER ($NODE_NAME) is already RUNNING (PID=$PID)"
echo "###############################################"
exit 1
fi
echo "#######################"
echo " Starting JBoss EAP "
echo "#######################"
# nohup์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ, ๋ก๊ทธ ๋ฆฌ๋ค์ด๋ ์
nohup $JBOSS_HOME/bin/standalone.sh --server-config=$CONFIG_FILE >> $LOG_PATH/console.log 2>&1 &
echo "Starting... Wait for checking status..."
sleep 5
status
}
stop(){
echo "#######################"
echo " Stopping JBoss "
echo "#######################"
# ๋ณด์์ ์ํด ํจ์ค์๋๋ ์
๋ ฅ๋ฐ๋๋ก ์ฒ๋ฆฌ (์๋ํ ์ ๋ณ์๋ก ๋์ฒด ๊ฐ๋ฅ)
echo -n "Enter Controller Password: "
read -s PASSWORD
echo ""
# CLI๋ฅผ ์ด์ฉํ ์์ ํ ์ข
๋ฃ (Graceful Shutdown)
$JBOSS_HOME/bin/jboss-cli.sh --connect --controller=$SERVER_IP:$CONTROLLER_PORT --command=:shutdown --user=$USER --password=$PASSWORD
}
status() {
# ํฌํธ ๋ฆฌ์จ ์ํ๋ก ๊ตฌ๋ ์ฌ๋ถ ํ์ธ
_up=`netstat -an | grep $CONTROLLER_PORT | grep LISTEN | wc -l`
if [ "$_up" -ne 0 ]; then
PID=`ps -ef | grep java | grep "jboss.node.name=$NODE_NAME " | awk '{print $2}'`
echo "###############################################"
echo " JBoss Server is RUNNING !! "
echo " Node: $NODE_NAME (PID: $PID)"
echo " Port: $CONTROLLER_PORT (Management)"
echo "###############################################"
else
echo "##################################"
echo " JBoss Server is STOPPED !! "
echo " Node: $NODE_NAME "
echo "##################################"
fi
}
# ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
sleep 5
start
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
esac
exit 0
4. ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฐ ์ฃผ์์ฌํญ
์ฌ์ฉ๋ฒ
# ์คํ ๊ถํ ๋ถ์ฌ
chmod +x jboss_ctl.sh
# ๊ธฐ๋
./jboss_ctl.sh start
# ์ํ ํ์ธ
./jboss_ctl.sh status
# ์ ์ง (ํจ์ค์๋ ์
๋ ฅ ํ์)
./jboss_ctl.sh stop
config1.sh ํ์ผ ๋ด์ PORT_OFFSET ๋ณ์๋ฅผ ํ์ฉํ๋ฉด, ํ๋์ ๋ฌผ๋ฆฌ ์๋ฒ์์ ํฌํธ ์ถฉ๋ ์์ด ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋์ธ ์ ์์ต๋๋ค. (์: 0, 100, 200...)