Considerando una installazione di JBoss in ambiente Linux a 32 bit. L'utente che esegue JBoss è "
root", l'installazione è in
/usr/local/jboss-4.0.4.GA
Questo è il file contenente i parametri di ottimizzazione di JBoss:
/usr/local/jboss-4.0.4.GA/bin/run.conf in cui sostituiremo la seguente stringa:
JAVA_OPTS="-server -Xms1048m -Xmx1048m -XX:ThreadStackSize=128 -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dfile.encoding=ISO-8859-1 -Duser.timezone=Europe/Rome"
Le opzioni selezionate servono a bilanciare la quantità di Heap Size e il numero di Threads Disponibili, infatti in un ambiente a 32 bit la quantità totale disponibile di memoria per singolo processo è di circa 1.5Mbyte, se l'Heap Size (Xms e Xmx) è troppo alta, la memoria disponibile per i Thread (ThreadStackSize) limita il numero di Thread disponibili.
Nel file
/etc/sysctl.conf inseriamo i parametri di ottimizzazione del kernel
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 20
kernel.shmmax=2147483648
kernel.sem=250 32000 100 128
fs.file-max=794598
net.ipv4.ip_local_port_range=1024 65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
Nel file
/etc/security/limits.conf aumentiamo il numero di file che possono essere aperti, naturalmente se l'utente con cui viene fatto girare JBoss è diverso dovrà essere modificato di conseguenza:
root soft nofile 790598
root hard nofile 790598
Nel caso di connessioni verso un database Oracle occorre modificare e ottimizzare il seguente file
/usr/local/jboss-4.0.4.GA/server/all/deploy/oracle-ds.xml per aumentare il numero di pool di connessioni.
<min-pool-size>100</min-pool-size>
<max-pool-size>100</max-pool-size>
Se JBoss viene indirizzato da un Load Balancer che verifica la disponibilità del servizio attraverso il protocollo AJP è necessario aumentare il tempo di timeout nel file
server.xml del Tomcat embedded in JBoss:
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443"
connectionTimeout="600000" maxThreads="200" keepAliveTimeout="600000"
protocol="AJP/1.3"/>
Script di start, stop e restart di JBoss da inserire in
/etc/init.d/jboss
#!/bin/sh
#
# JBoss Control Script
#
# chkconfig: 3 80 20
# description: JBoss EJB Container
#
# To use this script
# run it as root - it will switch to the specified user
# It loses all console output - use the log.
#
# Here is a little (and extremely primitive)
# startup/shutdown script for RedHat systems. It assumes
# that JBoss lives in /usr/local/jboss, it's run by user
# 'jboss' and JDK binaries are in /usr/local/jdk/bin. All
# this can be changed in the script itself.
# Bojan
# [ #420297 ] JBoss startup/shutdown for RedHat
export JAVA_HOME="/usr/java/jdk1.5.0_10"
export LD_LIBRARY_PATH="/home/oracle/instantclient/lib"
export ORACLE_HOME="/home/oracle/instantclient"
export PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/java/jdk1.5.0_10/bin:/root/bin"
export TNS_ADMIN="/home/oracle/instantclient"
#define where jboss is
JBOSS_HOME=${JBOSS_HOME:-"/usr/local/jboss-4.0.4.GA"}
#make java is on your path
JAVAPTH=${JAVAPTH:-"/usr/java/jdk1.5.0_10/bin"}
#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jbossall-client.jar"}
#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c all"}
if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
# ensure the file exists
touch $JBOSS_CONSOLE
fi
if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE"
echo "WARNING: ignoring it and using /dev/null"
JBOSS_CONSOLE="/dev/null"
fi
#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"}
CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
# inserire la password per lo shutdown
CMD_STOP="$JBOSS_HOME/bin/shutdown.sh -S -u admin -p admin"
# se l'utente è diverso da root inserire il comando su -
SUBIT=""
if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
export PATH=$PATH:$JAVAPTH
fi
if [ ! -d "$JBOSS_HOME" ]; then
echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
exit 1
fi
echo CMD_START = $CMD_START
case "$1" in
start)
cd $JBOSS_HOME/bin
if [ -z "$SUBIT" ]; then
eval $CMD_START >${JBOSS_CONSOLE} 2>&1 &
else
$SUBIT "$CMD_START >${JBOSS_CONSOLE} 2>&1 &"
fi
logger "Jboss Started"
;;
stop)
if [ -z "$SUBIT" ]; then
$CMD_STOP
else
$SUBIT "$CMD_STOP"
fi
logger "Jboss Stopped"
;;
restart)
$0 stop
sleep 10
$0 start
;;
*)
echo "usage: $0 (start|stop|restart|help)"
esac