记一次 java程序优化
优化原因
环境中部署两个程序:
- web应用 tomcat 10G(webservice服务端,前端web服务)
- java应用 5G(webservice客户端,socket客户端)
之前的设计思路是打算web应用作为前端不做业务处理,后端使用webservice做能力接入。
1天能力处理量大概在150W次到两百万次左右:
- 并发数量web端口在12tps
- 应用端在20tps左右(能力聚合的时候可能会调用几个能力做聚合操作)。
jvm优化
之前的应用服务的启动参数
-Xss1024k -Xms1g -Xmx3g -Xmn2g -XX:PermSize=64m -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+UseParallelGC优化后:
-server -Xss1024k -Xms3g -Xmx3g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+UseParNewGC -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
- 将jvm设置为server模式(如下默认值为server也可不设)
[linkage@zhczint1 ~]$ java -version java version "1.6.0_33" Java(TM) SE Runtime Environment (build 1.6.0_33-b04) Java HotSpot(TM) 64-Bit <strong>Server</strong> VM (build 20.8-b03, mixed mode)
- 将Xms与Xmx,XX:MaxPermSize与XX:PermSize设置为相同,防止在伸缩的时候性能降低
- 将原有年轻态并行收集器,年老太串行收集器设置(默认) 修改为 年轻态并行收集器,年老态并发收集器。
修改完后,性能稳定了不少,同时对web服务器进行了jvm参数的相应优化
linux参数优化
查看打开文件限制 (调优socket情况)
more /etc/security/limits.conf
#<domain> <type> <item> <value> # * soft nofile <strong>65535</strong> * hard nofile <strong>65535</strong> #* soft core 0 #* hard rss 10000 #@student hard nproc 20查看网络连接情况
[linkage@zhczweb1 ~]$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 132 FIN_WAIT2 23 ESTABLISHED 79 SYN_RECV 30设置连接情况
~ [linkage@zhczweb1 ~]$ vi /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 <span style="font-size: 1em; line-height: 1.5;">[linkage@zhczweb1 ~]$ </span>/etc/rc.d/init.d/network restart
参考:
java server与client模式区别