为了优化JBoss或Wildfly应用服务器的性能,我们推荐的优化配置如下:
目录
windows
1、编辑<JBOSS_HOME>\bin下的standalone.conf.bat,使用以下建议值设置JAVA_OPTS中的JVM参数:
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true
如果需要超过4gb,请在下面介绍的推荐设置进行更积极的垃圾收集。
示例:
set "JAVA_OPTS=-Xms8192m -Xmx8192m -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -Djava.awt.headless=true -Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true"
Linux
linux下编辑<JBOSS_HOME>/bin下的standalone.conf,示例:
JAVA_OPTS="$JAVA_OPTS -Xms8192m -Xmx8192m -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom -Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true"
在所有JBoss或WildFly服务器上,为运行JBoss或WildFly进程的用户将Open Files (ulimit -n)设置为至少50000。
在所有JBoss或WildFly服务器上,为运行JBoss或WildFly进程的用户设置用户进程(ulimit -u)至少为131072。
当接收的连接请求过多导致连接失败时,将echo参数的值修改为3000:
echo 3000 > /proc/sys/net/core/netdev_max_backlog
echo 3000 > /proc/sys/net/core/somaxconn
TCP_KEEPALIVE_INTERVAL参数决定了isAlive间隔探测之间的等待时间。
将TCP_KEEPALIVE_INTERVAL参数的值设置为为15秒。默认值为75秒。
echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
TCP_KEEPALIVE_PROBES参数决定超时前探测的数量。
将TCP_KEEPALIVE_PROBES参数的值设置为5秒,为推荐值。默认值为9秒。
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
在/etc/sysctl.conf文件中设置:
vm.nr_hugepages = 2048
vm.nr_hugepages_mempolicy = 2048 #2048 = 8192 (Max Heap Size) /4 (Page Size)
#确保以下参数至少设置为以下值(如果已经设置为更高的数值,则更好)
kernel.shmmax = 8689934592 #8689934592 = 8192 * 1048576 bytes/MB + 100000000 bytes
kernel.shmall = 2172483648 #2172483648 = 8689934592 (shmmax) ) / 4 (Page Size)
在所有CA单点登录服务器上,通过添加以下rngd守护进程来增加内核熵:
1、请确保已安装rng-tool,Linux服务器上安装rng-tools
yum –y install rng-tools
2、编辑
vi /etc/sysconfig/rngd
# Add extra options here
EXTRAOPTIONS="-r /dev/urandom -o /dev/random -t 1 -W 4096"
使用命令测试熵值:
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
如果返回值小于1000,则考虑向所有服务器添加熵泵。
你可以根据应用程序的性能需求调整垃圾收集,方法是在JVM命令行中输入以下选项:
-Xms8g -Xmx8g -XX:+UseG1GC -XX:ConcGCThreads=12 -XX:ParallelGCThreads=22
-XX:MaxGCPauseMillis=1000 -XX:InitiatingHeapOccupancyPercent=40
-XX:G1HeapWastePercent=2 -XX:G1ReservePercent=15
-XX:+UnlockExperimentalVMOptions -XX:G1OldCSetRegionThresholdPercent=15
-XX:G1MixedGCLiveThresholdPercent=90 -XX:G1NewSizePercent=20
-XX:G1MaxNewSizePercent=25
设置并行标记线程的数量。将n设置为大约1/4的并行垃圾收集线程(ParallelGCThreads)。
设置STW工作线程的值。将n的值设置为逻辑处理器的数量。n的值与不超过8的逻辑处理器的数量相同。
设置所需最大暂停时间的目标值。缺省值是200毫秒。指定值适应您的堆大小。
设置触发标记周期的Java堆占用阈值。默认的占用率是整个Java堆的45%。
设置您愿意浪费的堆百分比。当可回收百分比小于堆浪费百分比时,Java HotSpot VM不会启动混合垃圾收集循环。默认是10%。
设置保持空闲的预留内存百分比,以减少空间溢出的风险。默认是10%。当您增加或减少百分比时,请确保以相同的数量调整Java堆的总数。
设置混合垃圾收集周期中要收集的旧区域数量的上限。默认值是Java堆的10%。
设置要包含在混合垃圾收集循环中的旧区域的占用阈值。默认入住率为65%。
将堆的百分比设置为年轻代大小的最小值。默认值为Java堆的5%。这是实验性的标记。
将堆大小的百分比设置为年轻代大小的最大值。默认值是Java堆的60%。这是实验性的标记。