线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下:
- Linux内核的优化
- 服务器资源JVM 配置的优化
- Tomcat参数优化
- Tomcat配置连接器
- 配置负载集群优化
这里着重讲解tomcat参数的优化:server.xml文件,关闭DNS查询、配置最大并发等参数。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测试的基础上来不断的调优分析。
1,vim /usr/local/tomcat/conf/server.xml 优化http 8080访问端口段加入以下优化,再把默认的删掉
真实企业也是一下的参数 不变
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="5000"
minSpareThreads="20"
acceptCount="1000"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
2,Catalina.sh JVM 参数优化,java系统内存优化 ,根据自己虚拟机得内存来优化一下Xms
Xmx Xmn的参数 这里配置的内存不要太大一般位置系统内存的3/1 真实企业系统内存最低要留2个G 其中Xmn为Xmx内存的4/1
如果不配置优化jvm tomcat默认是502
参数添加位置 如下: 其中参数一般有开发人员来配置算出最优值
添加如下内容:vim /usr/local/tomcat/bin/ catalina.sh
CATALINA_OPTS="$CATALINA_OPTS –Xms1024M –Xmx1024M –Xmn512M -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE -DRAMDISK=/ -DUSE_RAM_DISK=ture -DRAM_DISK=true
3,优化server.conf配置文件
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" //最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断 minSpareThreads="100" //Tomcat 初始化时创建的线程数,默认设置 25 prestartminSpareThreads = "true"//在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就无效 maxQueueSize = "100"//最大的等待队列数,超过则拒绝请求 /> <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" //Tomcat 8 设置 nio2 更好,Tomcat 6 、7设置nio更好:org.apache.coyote.http11.Http11NioProtocol connectionTimeout="20000" minSpareThreads="100" maxSpareThreads="1000"最大处理连接数线程 minProcessors="100“同时处理请求的最小数 maxProcessors=“1000”同时处理请求的最大数 maxConnections="1000" redirectPort="8443" enableLookups="false" //禁用DNS查询 acceptCount="100" //指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 maxPostSize="10485760" //以 FORM URL 参数方式的 POST 提交方式,限制提交最大的大小,默认是2097152(2兆),它使用的单位是字节。10485760 为 10M。如果要禁用限制,则可以设置为 -1。 compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" //用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核CPU一般配置为 2. compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/ja vascript" URIEncoding="utf-8" keepAliveTimeout="0" 关闭shutdown端口:<Server port="-1" shutdown="SHUTDOWN"> 关闭ajp连接:注释<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 取消访问日志Valve阀门 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> /> |
4,tomcat配置连接器
Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式
bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O操作(即Java.io包及其子包)。 一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。默认的模式,性能最差,没有经过任何优化处理和支持。
=============================================================================
nio(non-blocking I/O),java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Javanio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。拥有比传统I/O操作(bio)更好的并发运行性能。利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。
#查看日志默认 tail -10 catalina.out
18-Jun-2019 05:30:31.727 INFO [main] org.apache.coyote.AbstractProtocol.start StartingProtocolHandler ["http-nio-8080"]
=============================================================================
apr(apache Portable Runtime/Nginx可移植运行时库),Tomcat将以JNI的形式调用apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。从操作系统级别来解决异步的IO问题,大幅度的提高性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。#修改默认模式为apr模式,Apr 效率最高
要让Tomcat以apr模式来运行,必须安装apr和native
安装apr:
yum -y install apr apr-devel gcc-c++
安装native:
cd /usr/local/tomcat/bin/
wget -c http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.21/source/tomcat-native-1.2.21-src.tar.gz
tar xzfv tomcat-native-1.2.21-src.tar.gz
cd /usr/local/tomcat/bin/tomcat-native-1.2.21-src/native
./configure --with-apr=/usr/bin/apr-1-config#编译之前需要提前部署java 环境
make && make install
整合Tomcat apr:
设置环境变量
方法:在/etc/profile中加入:
export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
source /etc/profile
修改配置文件:vim tomcat/conf/server.xml
修改以下内容:
修改protocol的值为org.apache.coyote.http11.Http11NioProtocol
<Connector port=“8080” protocol=“org.apache.coyote.http11.Http11AprProtocol”
connectionTimeout=“20000”
redirectPort=“8443” />#查看日志默认 tail -10 catalina.out
18-Jun-2019 05:57:04.550 INFO [main] org.apache.coyote.AbstractProtocol.start Starting
ProtocolHandler ["http-apr-8080"]
5,配置多个tomcat实例,方法也很简单,只需要在服务器上cp多个tomcat,然后修改三个端口和发布目录即可,然后分别启动即可。
为了提升整个网站的性能,还需要在tomcat前面架设nginx web反向代理服务器,用以提高用户高速访问。