服务器tomcat优化知识复习总结

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-30 07:23   29   0

相对于mysql数据库优化,tomcat的优化知识在面试中被问的频率会少一些,但是如果被问到tomcat的优化,如果能清晰的,有条理答出来在面试中还是很加分的,虽然在工作中如果没有涉及到高并发访问,其实tomcat的默认配置就挺好,基本上不需要怎么修改配置。整理一下,以备平时及面试使用。

Tomcat配置优化

对于tomcat的优化,主要是从2个方面入手,一是,tomcat自身的配置,另一个是tomcat所运行的jvm虚拟机的调优。

1、部署安装tomcat9

1、下载并安装: https://tomcat.apache.org/download-90.cgi

linux系统下载tar包

2、wget镜像安装

cd /usr/local
mkdir download
cd download
mkdir tomcat9

wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz

tar ‐zxvf apache‐tomcat‐9.0.44.tar.gz

mv apache‐tomcat‐9.0.44 tomcat9

cd tomcat9/apache‐tomcat‐9.0.44/conf

#修改配置文件,配置tomcat的管理用户
vi tomcat‐users.xml

#写入如下内容:
    <role rolename="manager"/>
 <role rolename="manager-gui"/>
 <role rolename="admin"/>
 <role rolename="manager-gui"/>
 <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
#保存退出

#如果是tomcat7,配置了tomcat用户就可以登录系统了,但是tomcat9中不行,还需要修改
另一个配置文件,否则访问不了,提示403
cd ../
vim webapps/manager/META‐INF/context.xml
#将<Valve的内容注释掉
<Context antiResourceLocking="false" privileged="true" >
<!‐‐ <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> ‐‐>
<Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.Cs
rfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

#保存退出即可

#启动tomcat
cd /usr/local/download/tomcat9/apache‐tomcat‐9.0.44/bin/
./startup.sh && tail ‐f ../logs/catalina.out

#打开浏览器进行测试访问
http://106.53.226.148:8080/

点击“Server Status”,输入用户名、密码进行登录,tomcat/tomcat

如果之前在tomcat-user.xml中没有配置 role和user的话也是会提示403,并且页面中会给出各种role和user的作用,以及推荐如何配置

这个就是tomcat-user.xml,现在故意把manager-gui角色配错,多一个空格,

然后重启tomcat,访问Server Status

如果配置格式没有错误,则访问后,页面展示如下:

进入之后即可看到服务器的信息。(进去看看)

ps:安全起见,生产环境会禁用这个管理界面,最直接的办法是删除webapp下的默认项目。因为我们根本不需要从界面上部署。

2、禁用ajp协议(8.5.51之前的版本默认是开启的,后续的版都是禁用的)

在服务状态页面中可以看到,默认状态下会启用AJP服务,并且占用8009端口 。

我在windows电脑上安装的tomcat8,可以查看一下:

我安装的8.5.39,可以看到ajp服务默认是打开的,端口用的是8109

在到linux服务器上看一下tomcat9

tomcat9的server.xml文件中ajp服务默认是关闭的,端口是8009

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

我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。 修改conf下的server.xml文件,将AJP服务禁用掉即可 。

重启tomcat,查看效果。

可以看到AJP服务以及不存在了。

ps:禁用ajp后,看节省了多少内存??查询某个pid占多少内存

3、执行器(线程池)

在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。 修改server.xml文件:

<!‐‐将注释打开(注释没打开的情况下默认10个线程,最小10,最大200)‐‐>
<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" />

保存退出,重启tomcat,查看效果。

ps:idea中源码启动或者用jvisualvm查看线程的变化

4、3种运行模式

tomcat的运行模式有3种:

ps:每个模式都需要线程演示查看

1)、bio(tomcat7演示,压测看线程增长)

默认的模式,性能非常低下,没有经过任何优化处理和支持,tomcat8.5已经舍弃了该模式,默认就是nio模式。

2)、nio(nio2)

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)更好的并发运行性能。NIO2异步的本质是数据从内核态到用户态这个过程是异步的,也就是说nio中这个过程必须完成了才执行下个请求,而nio2不必等这个过程完成就可以执行下个请求,nio2的模式中数据从内核态到用户态这个过程是可以分割的。

3)、apr

apr(Apache portable Run-time libraries/Apache可移植运行库)是Apache HTTP服务器的支持库。

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能。推荐使用nio,不过,在tomcat8及后续的版本中有最新的nio2,速度更快,建议使用nio2。

设置nio2:

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

ps:为什么nio快呢?

简单地说,nio 模式最大化压榨了CPU,把时间片更好利用起来。通俗地说,bio hold住连接不干活也占用线程,nio hold住连接不干活也没关系,让需要处理的连接执行就行了。

如果通道选择apr,apr需要独立安装。

apr安装步骤:

1、先安装gcc, expat-devel,perl-5

yum install gcc

yum install expat-devel

cd /usr/local

wget ftp://mirrors.ustc.edu.cn/CPAN/src/5.0/perl-5.30.1.tar.gz
tar -xzf perl-5.30.1.tar.gz
cd perl-5.30.1
./Configure -des -Dprefix=$HOME/localperl
make
make install

2、安装apr

cd /usr/local

wget https://mirrors.cnnic.cn/apache/apr/apr-1.6.5.tar.gz

tar -zxvf apr-1.6.5.tar.gz

cd  apr-1.6.5

./configure --prefix=/usr/local/apr && make && make install

3、安装apr-util

cd /usr/local

wget  https://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz

##安装apr-util前请确认系统是否安装了expat-devel包,如没安装请安装,不然会报错。yum install expat-devel

tar -zxvf apr-util-1.6.1.tar.gz

cd apr-util-1.6.0

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

4、安装openssl

cd /usr/local

wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz

tar -zxvf openssl-1.0.2l.tar.gz

cd openssl-1.0.2l

./configure --prefix=/usr/local/openssl shared zlib && make && make install

##缺少zlib,会报错,所以得先安装zlib

cd /usr/local

**wget  http://www.zlib.net/zlib-1.2.11.tar.gz**

tar -zxvf zlib-1.2.1.tar.gz

cd zlib-1.2.11

##因为要用共享方式安装,所以执行以下命令

make clean && ./configure --shared && make test && make install

cp zutil.h /usr/local/include

cp zutil.c /usr/local/include

##重新执行

./configure --prefix=/usr/local/openssl shared zlib && make && make install

##检查openssl是否安装成功

/usr/local/openssl/bin/openssl version -a 显示1.0.2l版本为成功

5、安装tomcat-native

tar /usr/local/tomcat9/bin/tomcat-native.tar.gz

cd /usr/local/tomcat9/bin/tomcat-native-1.2.12-src/native

./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk/ --with-ssl=/usr/local/openssl/ && make && make install

6、使tomcat支持apr配置apr库文件

##方式1:配置坏境变量:

echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib" >> /etc/profile

echo "export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib" >> /etc/profile && source /etc/profile

##方式2:catalina.sh脚本文件:在注释行# Register custom URL handlers下添加一行

JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"

7、修改tomcat server.xml文件(把protocol修改成org.apache.coyote.http11.Http11AprProtocol)

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

8、启动tomcat

cd /usr/local/tomcat8/bin

./startup.sh

9、查看tomcat是否以http-apr模式运行,可以查看tomcat管理界面,也可以远程jmx监控查看

##连接远程jmx监控需要在catalina.sh文件中加上
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.0.107 -Dcom.sun.management.jmxremote.port=9999  -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

查看管理页面

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP