首页技术文章正文

tomcat优化【黑马java培训】

更新时间:2019年07月26日 10时48分51秒 来源:黑马程序员论坛

#Tomcat优化

##为何要进行tomcat优化
​       
   随着电商的发展,高并发的问题已经越来越严重,在高并发的情况,无时无刻不考验着服务器性能的优化,高可用也成为了一个开发者所必备的知识点,作为一个程序的开发者,性能的优化通常有三大块 1、服务器优化 2、数据库优化 3、JVM优化,那么接下来咱们来研究研究tomcat的优化内容

##tomcat的可视化视图说明和优化介绍
   tomcat优化分为三块: 1. JVM参数优化  2.JVM高并发优化  3.JVM启动优化
   1.当我们在在linux环境下启动了tomcat,在屏幕右上角有一个server status,我们需要在conf/ tomcat-users.xml 下设置登陆的用户
   <role rolename="manager"/>
   <role rolename="manager-gui"/>
   <role rolename="admin"/>
   <role rolename="admin-gui"/>
   <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

   该信息赋予了tomcat的用户权限,以及用户名,密码
   登陆完毕 ,可以看到JVM占有情况(Free memory: 51.70 MB Total memory: 95.75 MB Max memory: 419.50 MB)可以发现此时JVM所使用到的内容是linux虚拟机中的最大占有内存1/4 ,年轻代,年老代,永久带内存空间,为了让性能更加优越,除了可以进行tomcat自身优化,还可以进行在tomcat上进行JVM的调优,和当前tomcat的启动模式       

##tomcat优化一 catalina文件优化&&JVM优化
   在tomcat的catalina.sh文件下

  



   export JAVA_OPTS="-server -Xms1600M -Xmx1600M -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: jdk的server版
   只要你的tomcat运行在生产环境中的,这个参数必须添加
   因为tomcat默认是以一种叫java -client 的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也意味着你的tomcat 会拥有更大,更高的并发处理能力,以及更强更敏捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量

   -Xms -Xmx :初始堆大小,和最大堆大小
   在实际生产过程中JVM的堆内存一定要同样大,如果在一个区间,在最小内存时存在内存不足,此时触发GC,但此时若内存突然变大,GC将变得没有意义,所以在实际生产过程中需要不能将堆内存设置成空间值(默认是堆内存小于40%时,JVM将增大堆到-Xmx最大限制,空余堆大于70%时,会减少至-xms最小限制)

   -Xss512k 调整栈大小,最好不要超过1M

   AggressiveOpts:从单词上看是积极,生猛,将最新版的JDK优化后的新特性自动注入

   UseBiasedLocking:启动了优化的线程锁,对于高并发访问很重要,太多请求忙不过来时,它就自动优化,对于各自长短不一的请求,排队,会自动进行优化
​         
   DisableExplicitGC:关闭明显的GC操作,避免内存的大起大落,忽略手动调用GC,使System.gc() 成为一个空调用

   MaxTenuringThreshold: 设置新生代存活的次数  
   若年老代对象过多,可以将这个年龄设置为0 ,但通常不建议

   -Djava.awt.headless=true:这个参数都是放在最后的,我们在J2EE工程中使用一些图标工具如:jfreechart,在web网页输出GIF、JPG流
   在window环境下不会有问题,但在生产环境下可能会出现不显示,此时这个配置可以解决这个参数

##tomcat优化二:启动模式优化  conf/server.xml
   在server.xml中除了能修改端口号和编码集以外,还能进行一项非常重要的修改,启动模式!

   1.bio 默认的模式,性能非常低下,没有经过任何优化处理和支持.
   2.nio nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
   3.apr 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

   <Connector port="8080" protocol="HTTP/1.1"
​                    connectionTimeout="20000"
​                    redirectPort="8443" />
​   
   优化配置1:标准版(亲测有效)
   <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
   maxThreads="600"

   minSpareThreads="100"
   maxSpareThreads="500"

   acceptCount="700"



   connectionTimeout="20000"
   redirectPort="8843"/>

   maxThreads:支持并发访问线程
   minSpareThreads:最小备用线程,初始化默认是10
   maxSpareThreads:最大备用线程
   URIEncoding:编码集
   enableLookups:当我们通过调用request.getRemoteHost()进行DNS查询时,期望返回客户实际主机名,将此属性设置为true ,但通常设置为false,节约性能

   disableUploadTimeout disableUploadTimeout = true
   是否需要对tomcat容器单独的设置上传时间

   connectionTimeout:网络链接超时,单位毫秒,设置为-1表示用户超时

   acceptCount:当线程达到了maxThreads后,后续将请求放置到一个等待队列中,这个acceptCount是这个队列的大小,若这个队列也满了,就直接refuse connection ,默认是100



   maxThreads :同时处理线程的能力,默认200 ,建议600-800
   minProcessors:在java中线程是程序运行时的路径,是在一个程序中与其他控制线程无关的,能够独立运行的代码块,使空闲时间最低,充分利用cpu资源



总结:

相信通过本次学习,同学们对于tomcat已经有了一定的了解,谢谢各位

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!