面试刷题32:你对tomcat做了哪些性能调优?

栏目: IT技术 · 发布时间: 4年前

内容简介:java程序员的开发的java应用程序,一般都会选择使用tomcat发布,但是:如何充分的掌控tomcat,并让它发挥最优性能呢?

面试刷题32:你对tomcat做了哪些性能调优?

背景

java程序员的开发的 java 应用程序,一般都会选择使用tomcat发布,但是:

如何充分的掌控tomcat,并让它发挥最优性能呢?

这也是面试的热点问题,结合多年的工作实践,我是李福春,今天总结一下。

tomcat的使用

下载

现在最新的稳定版本是tomcat9, 下载页面: https://tomcat.apache.org/download-90.cgi

5种下载包的区别

面试刷题32:你对tomcat做了哪些性能调优?

一般我们选择的是 core包运行tomcat,或者直接选择 docker 的镜像来运行;

tomcat的目录说明:

面试刷题32:你对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' />

监控页面如下图:

面试刷题32:你对tomcat做了哪些性能调优?

server status: 可以看到tomcat和jvm的版本信息,jvm的分区信息,tomcat内部线程池状态;

面试刷题32:你对tomcat做了哪些性能调优?

manager-app: 管理tomcat下运行的应用,提供控制按钮,启动,停止,重启,卸载,以及不停服安装新的应用;

面试刷题32:你对tomcat做了哪些性能调优?

host-manger:提供了虚拟主机的管理,即配置别名和二级路径到tomcat的应用。

面试刷题32:你对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默认不启用线程池,可以启用线程池提高线程的利用率

线程池参数:

面试刷题32:你对tomcat做了哪些性能调优?

定义线程池

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

配置Connector启用

<connector executor="tomcatThreadPool">

connector参数

面试刷题32:你对tomcat做了哪些性能调优?

tomcat的jvm参数调优

GC优化

#gc优化
JAVA_GC="-XX:SurvivorRatio=10 
-XX:MaxTenuringThreshold=15 
-XX:NewRatio=2 
-XX:+DisableExplicitGC 
-Djava.security.egd=file:/dev/./urandom"

面试刷题32:你对tomcat做了哪些性能调优?

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 初始线程数

面试刷题32:你对tomcat做了哪些性能调优?

小结

本篇回顾了tomcat的基础知识。

以及使用tomcat内置的监控程序对java应用进行监控的一些基础知识点。

然后结合工作经验,从io,线程池,jvm三个方面对tomcat进行调优

原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。

我会持续分享Java软件编程知识和 程序员 发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

面试刷题32:你对tomcat做了哪些性能调优?

以上所述就是小编给大家介绍的《面试刷题32:你对tomcat做了哪些性能调优?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

群体智能

群体智能

James Kennedy、Russell C Eberhart、Yuhui Shi / 人民邮电出版社 / 2009-2-1 / 75.00元

群体智能是近年来发展迅速的人工智能学科领域.通过研究分散,自组织的动物群体和人类社会的智能行为, 学者们提出了许多迥异于传统思路的智能算法, 很好地解决了不少原来非常棘手的复杂工程问题.与蚁群算法齐名的粒子群优化(particle swarm optimization, 简称PSO)算法就是其中最受瞩目,应用最为广泛的成果之一. 本书由粒子群优化算法之父撰写,是该领域毋庸置疑的经典著作.作者......一起来看看 《群体智能》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具