1. JVM 优化(Tomcat 启动行参数)
Linux 修改 catalin.sh
Windows 修改 catalin.bat
Linux系统中tomcat的启动参数
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts
-XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC
-XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "
Windows系统中tomcat的启动参数
set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k
-XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M
-XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly
-Djava.awt.headless=true
-server 生产环境必须添加此参数,可以改变 Tomcat 的运行模式,更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量。
-Xms–Xmx JVM内存设置,建议设置成同一个值,可以在命令行中使用 java -Xmx1500m -version 来测试当前服务器可以设置的最大内存。(-Xmx 的值太大时,JVM 无法启动)
-Xmn 年轻代 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m。
-Xss 是指设定每个线程的堆栈大小。一般不超过 1M。
-XX:+AggressiveOpts 根据 JDK 的不同而采用不同的优化策略。
-XX:+UseBiasedLocking 优化线程锁。
-XX:PermSize=128M-XX:MaxPermSize=256M 非堆内存初始值和最大值。默认值为物理内存的 1/64 和 1/4。
-XX:+DisableExplicitGC 控制程序代码中不允许显示调用 System.gc()。
-XX:+UseParNewGC 对年轻代采用多线程并行回收,这样收得快。
-XX:+UseConcMarkSweepGC 使用更好的 GC 技术。
-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC 的情况下, 尽量减少 mark 的时间
-XX:+UseCMSCompactAtFullCollection 减少 Memory 碎片。
-XX:LargePageSizeInBytes 指定 Java heap 的分页页面大小
-XX:+UseFastAccessorMethods get,set 方法转成本地代码
-XX:+UseCMSInitiatingOccupancyOnly 指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集
-XX:CMSInitiatingOccupancyFraction=70 年老代到 70% 满的时候开始执行对年老代的并发垃圾回收((Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn)
-Djava.awt.headless=true 解决图片在 Linux 上无法显示图片的问题
2.Tomcat容器内的优化
修改 server.xml文件
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000" acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5" useURIValidationHack="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain" redirectPort="8443" />
URIEncoding="UTF-8"
maxSpareThreads 最大空闲线程数,大于这个数将终止多余的线程。
minSpareThreads 初始化线程数。
enableLookups 不使用 Look。
connectionTimeout 连接超时毫秒数。
maxThreads 即 Tomcat 可创建的最大的线程数,即最大并发数。
acceptCount 当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection。
maxProcessors与minProcessors 最大线程数和最小线程数。
useURIValidationHack 减少对一些url的不必要的检查从而减省开销。
enableLookups="false" 关闭DNS查询。
disableUploadTimeout
compression 给Tomcat配置gzip压缩(HTTP压缩)功能。
3.Tomcat 性能检测
VisualVM监控( JDK 自带)
推荐使用。
内存分析,CPU 分析,线程分析等。
LambdaProbe监控
需要打成 war 放入 tomcat webapp 目录下。
JProfiler监控
商业的主要用于检查和跟踪系统的性能的工具。需要在服务器端安装 JProfiler 软件。
参考: