文章目录
一、并发优化
1、并发参数
- 1、maxThreads:最大的并发请求数,当cpu利用率高的时候,不宜增加线程的个数,当cpu利用率不高,大部分是io阻塞类的操作时,可以适当增加该值
- 2、maxSpareThreads:Tomcat连接器的最大空闲 socket 线程数
- 3、acceptCount:当处理任务的线程数达到最大时,接受排队的请求个数
- 4、connectionTimeout:网络连接超时,单位毫秒
- 5、enableLookups:若为false则不进行DNS查询,提高业务能力应设置为false
- 6、disableUploadTimeout:若为true则禁用上传超时
2、tomcat并发设置
在conf下的server.xml文件中<Connector>节点进行配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="30000"
redirectPort="8443"
maxThreads="400"
minSpareThreads="50"
maxSpareThreads="200"
acceptCount="400"
enableLookups="false"
disableUploadTimeout="true" />
二、内存优化
1、对象的生存空间分类
- 新生代:用于存放“早逝”对象(即瞬时对象)。例如:在创建对象时或者调用方法时使用的临时对象或局部变量
- 老年代:用于存放“驻留”对象(即较长时间被引用的对象)。往往体现为一个大型程序中的全局对象或长时间被使用的对象
- 持久代:用于存放“永久”对象。这些对象管理着运行于JVM中的类和方法
2、存在参数
- -server:一定要作为第一个参数,在多个CPU时性能佳
- -Xms:新生代和老年代初始大小。 默认是物理内存的1/64
- -Xmx:总共可用的最大空间。建议均设为物理内存的一半。不可超过物理内存
- -XX:NewSize:新生代的初始空间
- -XX:MaxNewSize:新生代的最大空间
- -XX:PermSize:设定内存的持久代初始大小。缺省值为64M
- -XX:MaxPermSize:设定内存的持久代最大大小。缺省值为64M
- -Xmn:young generation(年轻代)的heap大小。一般设置为Xmx的3、4分之一
3、tomcat内存配置
- 方法1
在bin下的catalina.bat文件中echo Using CATALINA_BASE字段进行配置
在"%CATALINA_BASE%"的前一行加入如下代码
set JAVA_OPTS=%JAVA_OPTS% -server -Xms8192m -Xmx8192m -Xmn1890m
- 方法2
在tomcat启动脚本中添加一个执行环境变量的脚本
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
/bin/setenv.sh
JRE_HOME='/data/app/jdk1.8.0_77'
JAVA_OPTS='-Duser.timezone=GMT+08 -Xms6G -Xmx6G'
JAVA_OPTS对本机上的所有java虚拟机均有效
CATALINA_OPTS仅仅对运行tomcat实例的java虚拟机有效
三、JVM垃圾回收机制
1、jvm垃圾回收参数
- -verbose:gc:显示垃圾收集信息(在虚拟机发生内存回收时在输出设备显示信息)
- UseConcMarkSweepGC:开启此参数使用ParNew & CMS(serial old为替补)搜集器
- MaxTenuringThreshold:晋升老年代的最大年龄。默认为15,比如设为10,则对象在10次普通GC后将会被放入年老代
- -XX:+ExplicitGCInvokesConcurrent:System.gc()可以与应用程序并发执行
- GCTimeRatio:设置系统的吞吐量。比如设为99,则GC时间比为1/1+99=1%,也就是要求吞吐量为99%。若无法满足会缩小新生代大小
- CMSInitiatingOccupancyFraction:触发CMS收集器的内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集
- CMSFullGCsBeforeCompaction:设置在几次CMS垃圾收集后,触发一次内存整理
- -Xnoclassgc:禁用类垃圾回收,性能会高一点
2、垃圾回收配置
垃圾回收配置往往和内存配置是在同一字段,并且要写在同一行才能生效
set JAVA_OPTS=%JAVA_OPTS%
-server -Xms8192m -Xmx8192m -Xmn1890m -verbose:gc
-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=5 -XX:+ExplicitGCInvokesConcurrent -XX:GCTimeRatio=19 -XX:CMSInitiatingOccupancyFraction=70 -XX:CMSFullGCsBeforeCompaction=0 -Xnoclassgc -XX:SoftRefLRUPolicyMSPerMB=0
四、java性能监控工具
1、java常见性能问题
- 内存不足
- 内存泄露
- 线程锁死
- 锁竞争
- java消耗过多的cpu
2、常用性能工具
jps
监控jvm进程状态信息
jps [options] [hostid]
-m:输出传入main方法的参数
-j:显示main类或jar的完全限定名称
-v:为jvm指定的参数
jstack
查看某个java进程内的线程堆栈信息
jstack [options] pid
jmap
查看某个java进程堆进程使用情况
jmap [options] pid