您的位置:首页 > 运维架构 > Tomcat

JVM优化-Tomcat8优化

2020-08-07 00:00 1026 查看

Tomcat配置优化

需要先下载这个Tomcat8的服务器,JDK等一系列操作

优化前配置

给Tomcat设置角色

cd /tmp wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apachetomcat-8.5.34.tar.gz

tar -xvf apache-tomcat-8.5.34.tar.gz cd apache-tomcat-8.5.34/conf
#修改配置文件,配置tomcat的管理用户
vim 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"/>

#保存退出

#如果是tomcat7,配置了tomcat用户就可以登录系统了,但是tomcat8中不行,还需要修改另一个配置文件,否则访 问不了,提示403

vim webapps/manager/META-INF/context.xml

将Valve的内容注释掉


去bin目录下去打开Tomcat服务器

./startup.sh # 开启服务

操作Tomcat

点击这里登陆用户名密码我们前边设置了都是tomcat

登陆之后的效果就是这样

优化点1: 禁用AJP的连接

在服务状态下,默认启用AJP服务,还占用了8009端口

什么是AJP?

AJP(Apache JServer Protocol),AJPv13协议是面向包的,Web服务器和Servlet容器通过TCP连接来交互,为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到Servlet容器,并且在多个请求和响应周期过程会重用连接

我们一般是使用Nginx+Tomcat的架构,所以用不着AJP协议,所以AJP连接器禁用。

修改Conf下的server.xml文件,将AJP服务禁用

<!-- 注释这一行 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

我们打开文件来看看(通常是116行)

禁用AJP以后的效果

优化点2:执行器(线程池)优化

在tomcat里媒体哥用户请求都是一个线程,所以可以使用线程池提高性能。

优化打开Exeutor,修改server.xml文件

<!--将注释打开-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>
<!-参数说明:
maxThreads:大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业务来判断 minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化
minSpareThreads 的参数值,如果不等于 true,
minSpareThreads 的值就没啥效果了
maxQueueSize,大的等待队列数,超过则拒绝请求
-->
<!--在Connector中设置executor属性指向上面的执行器-->
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

修改上面配置以后,可以看到这个基本数据都配置成功了,但是有一个-1

在页面中显示大线程数为-1,这个是正常的,仅仅是显示的问题,实际使用的指定的值。

Tomcat三种运行模式

tomcat的运行模式有3种:

  1. BIO:默认的模式,性能低下,没有经过过任何优化处理和支持
  2. NIO (New I/O),是Java SE1.4及后续版本提供的一种新的I/O操作方式(既java.nio包及其子包),java nio是一个基于缓冲区,并能提供非阻塞/O操作的JavaAPI,因此NIO也被看做是Non-Blocking I/O的缩写,它拥有比传统I/O操作(BIO更好的并发运行性能
  3. APR:安装器来困难,但是先操作系统级别来解决异步的IO问题,大幅度提高性能

我们推介是我用他那个NIO,但是Tomcat8会有NIO2,速度更快,因此使用NIO2

设置NO2

<Connector executor="tomcatThreadPool"  port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" />


这样就设置好了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: