内容简介:java程序员的开发的java应用程序,一般都会选择使用tomcat发布,但是:如何充分的掌控tomcat,并让它发挥最优性能呢?
背景
java程序员的开发的 java 应用程序,一般都会选择使用tomcat发布,但是:
如何充分的掌控tomcat,并让它发挥最优性能呢?
这也是面试的热点问题,结合多年的工作实践,我是李福春,今天总结一下。
tomcat的使用
下载
现在最新的稳定版本是tomcat9, 下载页面: https://tomcat.apache.org/download-90.cgi
5种下载包的区别
一般我们选择的是 core包运行tomcat,或者直接选择 docker 的镜像来运行;
tomcat的目录说明:
安装
直接解压即可,解压指令: tar -zxvf tomcat-xxx.tar.gz
启动和停止
按照running.txt中的说明指导, 两种方式启动:
1, sh ${catalina.home}/bin/startup.sh
2, sh ${catalina.home}/bin/catalina.sh start
对应的两种方式停止tomcat:
1, sh ${catalina.home}/bin/shutdown.sh
2, sh ${catalina.home}/bin/catalina.sh stop
日志
tomcat产生的日志分成4类
1, catalina.date.out 最近的所有级别的日志;
2,localhost-date.log 错误日志
实时查看日志指令: tail -f catalina.out
AJP协议
一般用在tomcat跟其它HTTP服务器建立连接。
比如Apache+Tomcat做动静态分离:
apache处理所有的静态资源;
apache通过JK(负载均衡组件)转发动态资源请求到Tomcat,通过AJP协议。
tomcat的监控
保留默认tomcat下的webapps的 ROOT, host-manager , manager 应用,就可以监控单个tomcat节点的状态。
默认是不可以访问的,需要增加用户和权限才能看到,否则会报403;
增加方法: conf/tomcat-user.xml
<role rolename='admin' /> ... <user username='admin' password='admin' roles='admin,admin-gui,admin-script, manager-script,manager-gui,manager-jmx,manager-status' />
监控页面如下图:
server status: 可以看到tomcat和jvm的版本信息,jvm的分区信息,tomcat内部线程池状态;
manager-app: 管理tomcat下运行的应用,提供控制按钮,启动,停止,重启,卸载,以及不停服安装新的应用;
host-manger:提供了虚拟主机的管理,即配置别名和二级路径到tomcat的应用。
tomcat的IO调优
tomcat9中默认使用的nio处理java的io.
可以从日志中和配置文件中看到。
09-Apr-2020 07:46:27.606 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"]
APR优化IO
使用apr(Apache Portable Runtime),从操作系统层面解决了异步io的问题,可以大幅度提高性能。
如果 linux 安装了apr和tomcat-native,则tomcat启动就支持了apr;
NIO优化老版本的BIO
老版本的tomcat如果采用了BIO(通过日志可以看出),可以调整为NIO,调整方法:
conf/server.xml
老的配置:
<connector protocol="HTTP/1.1" />
新的配置:
//tomcat6选择nio1 <connector protocol="org.apache.coyote.http11.Http11NioProtocol" /> //tomcat8选择nio2,apr性能更好 <connector protocol="org.apache.coyote.http11.Http11Nio2Protocol" /> <connector protocol="org.apache.coyote.http11.Http11AprProtocol" />
tomcat的线程池调优
tomcat默认不启用线程池,可以启用线程池提高线程的利用率
线程池参数:
定义线程池
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
配置Connector启用
<connector executor="tomcatThreadPool">
connector参数
tomcat的jvm参数调优
GC优化
#gc优化 JAVA_GC="-XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom"
jvm和线程池优化
JVM_LEVEL="info" JVM_Xms="100m" JVM_Xmx="2048m" JVM_Xmn="600m" JVM_Xss="256k" TOMCAT_acceptCount=4096 线程可以接受的请求数量 TOMCAT_maxThreads=512 最大线程数 TOMCAT_minSpareThreads=512 初始线程数
小结
本篇回顾了tomcat的基础知识。
以及使用tomcat内置的监控程序对java应用进行监控的一些基础知识点。
然后结合工作经验,从io,线程池,jvm三个方面对tomcat进行调优
原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
我会持续分享Java软件编程知识和 程序员 发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!
以上所述就是小编给大家介绍的《面试刷题32:你对tomcat做了哪些性能调优?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何回答性能优化的问题,才能打动阿里面试官?
- 面试三轮我倒在了一道 SQL 题上:SQL 性能优化
- 面试题:如何通过调优攻破 MySQL 数据库性能瓶颈?
- 阿里p8架构师分享:支付宝三面Java面试题:JVM+缓存+性能+架构
- 面试官:如果让你设计一个消息中间件,如何将其网络通信性能优化10倍以上?【石杉的架构笔记】
- Python面试经验总结,面试一时爽,一直面试一直爽!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twenty Lectures on Algorithmic Game Theory
Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99
Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!