Seguem algumas dicas para efetuar um tuning de performance da versao JBoss-as-7.1.1.Final Community em um Linux Debian 7.6.Configuracoes da JVM Dentro do arquivo $JBOSS_home/bin/standalone.conf, voce pode efetuar as seguintes configuracoes: - Memoria: uma configuracao para um servidor de pequeno porte para uma maquina com memoria fisica de 4Gb seria:JAVA_OPTS="-Xms2g -Xmx2g -XX:PermSize=256m -XX:MaxPermSize=512m"- GC Paralelo: caso a maquina tenha varios processadores e interessantes habilitar o GC paralelo e dividir as regioes de memoria.# Paralell GCJAVA_OPTS="$JAVA_OPTS -server -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:SurvivorRatio=2 -XX:NewRatio=2"Configuracoes do Linux- Linux HugePages: Voce pode tambem habilitar o HugePages no sistema operacional e habilitar o uso de large pages na JVM:Veja aqui como habilitar o hugepages para o debian: https://wiki.debian.org/Hugepages. Basicamente e criar um grupo no linux, criar o ponto de montagem, configurar os parametros do kernel e adicionar um usuario ao grupo criado, ou seja, o usuario que ira subir o jboss.Para uma maquina de 4Gb de memoria fisica, temos os seguintes valores para o Hugepages:Arquivo /etc/sysctl.conf:# Total memorykernel.shmmax = 4294967295# Ceil(shmmax/PAGE_SIZE)kernel.shmall = 1048576# Allocate n * 2048kb (Hugepagesize) for HugePageTablesvm.nr_hugepages = 1536Ainda no standalone.conf, para habilitar o uso do Hugepages na JVM, voce precisa usar o parametro abaixo:# Large PagesJAVA_OPTS="$JAVA_OPTS -XX:+UseLargePages"Configuracoes do JBossDentro do standalone.xml, temos:- Compressao do trafego: o mais recomendavel e que voce utilize um servidor web como Apache Web Server para receber as requisicoes e direcione para o jboss, mas mesmo assim e interessante verificar como compactar alguns tipos de arquivos:<system-properties> <property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION" value="on"/> <property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES" value="text/html,text/xml,text/plain,text/css,text/javascript,text/json,application/x-javascript,application/javascript,application/json"/> <property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIN_SIZE" value="1024"/></system-properties>- Logger: diminua os niveis de logger do jboss, e se for o caso, remova o CONSOLE handler dele, para a maioria dos casos, voce pode so diminuir o nivel para WARN e deixar INFO para as mensagens de inicializacao do JBoss: <logger category="org.jboss.as"> <level name="INFO"/> </logger> ... <root-logger> <level name="WARN"/> </root-logger> - Thread Pool: configure um thread pool para receber as requisicoes web, estimando a quantidade de usuarios concorrentes que voce espera que aquele servidor suporte. Abaixo segue uma configuracao para suportar em torno de 200 usuarios concorrentes. <subsystem xmlns="urn:jboss:domain:threads:1.1"> <bounded-queue-thread-pool name="http-executor" blocking="true"> <core-threads count="200" /> <queue-length count="1000" /> <max-threads count="300" /> <keepalive-time time="5" unit="seconds"/> </bounded-queue-thread-pool> <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="true"> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" executor="http-executor" enable-lookups="false" max-connections="300" max-post-size="2048" max-save-post-size="4096" /> - Mail/Default: caso seu servidor nao utilize o mail-session do JBoss, voce pode remover a extension, o subsystem e o socket-binding conforme abaixo. Isso ira deixar a inicializacao do servidor mais rapida. <extension module="org.jboss.as.mail"/> ... <subsystem xmlns="urn:jboss:domain:mail:1.0"> <mail-session jndi-name="java:jboss/mail/Default"> <smtp-server outbound-socket-binding-ref="mail-smtp"/> </mail-session> </subsystem> ... <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding>- JBoss Web Native: instale os connectors nativos para uma melhor performance das conexoes HTTP.Abaixo segue o link para fazer download dos binarios ja compilados para cada plataforma:http://jbossweb.jboss.org/downloads/jboss-native-2-0-10.htmlDescompacte dentro da $JBOSS_HOME/bin/native:ls -l $JBOSS_HOME/bin/native/lib*-1.so Habilite dentro do arquivo standalone.xml:<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="true">- Deployment Scanner: desabilite a checagem do scanner, assim ele nao ira fazer hot-deploy de arquivos. Isso pode ser um falha de seguranca e diminui o overhead no disco. Com a configuracao abaixo, ele so ira fazer o deploy durante a inicializacao do JBoss: <subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1"> <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="0"/> </subsystem> - Compilation JSP e arquivos estativos: