Tomcat
Tomcat的配置
1)找到Tomcat目录下的conf文件夹
2)进入conf文件夹里面找到server.xml文件
3)打开server.xml文件
修改配置,比如端口:
4)在server.xml文件里面找到下列信息 port="8080"改成你想要的端口
tomcat 有哪几种Connector 运行模式(优化)?
Doc
protocol
Sets the protocol to handle incoming traffic. The default value is HTTP/1.1 which uses an auto-switching mechanism to select either a Java NIO based connector or an APR/native based connector. If the PATH (Windows) or LD_LIBRARY_PATH (on most unix systems) environment variables contain the Tomcat native library, and the AprLifecycleListener that is used to initialize APR has its useAprConnector attribute set to true, the APR/native connector will be used. If the native library cannot be found or the attribute is not configured, the Java NIO based connector will be used. Note that the APR/native connector has different settings for HTTPS than the Java connectors.
To use an explicit protocol rather than rely on the auto-switching mechanism described above, the following values may be used:
- org.apache.coyote.http11.Http11NioProtocol - non blocking Java NIO connector
- org.apache.coyote.http11.Http11Nio2Protocol - non blocking Java NIO2 connector
- org.apache.coyote.http11.Http11AprProtocol - the APR/native connector.
- Custom implementations may also be used.
Take a look at our Connector Comparison chart. The configuration for both Java connectors is identical, for http and https.
For more information on the APR connector and APR specific SSL settings please visit the APR documentation
Tomcat 支持以下协议:
- HTTP/1.1:Tomcat 默认使用的 HTTP 协议,支持持久连接、分块传输编码等特性,可以提高性能和效率。
- HTTP/2:Tomcat 从版本 8.5 开始支持 HTTP/2 协议,可以通过启用 HTTP/2 连接器来使用该协议。HTTP/2 支持二进制数据传输、多路复用等特性,可以进一步提高性能和效率。
- AJP(Apache JServ Protocol):AJP 协议是专门为 Web 服务器和 Servlet 容器之间的通信设计的协议,由 Apache 开发。Tomcat 可以使用 AJP 协议作为与 Apache Web 服务器之间的通信协议。
Tomcat支持以下Connector:
- HTTP Connector:用于处理 HTTP 请求和响应。默认端口为 8080。
- HTTPS Connector:用于处理 HTTPS 请求。默认端口为 8443。
- AJP Connector:用于 Tomcat 和 Web 服务器(如 Apache)之间的通信。通过 AJP 协议传输数据,以提高性能。默认端口为 8009。
- JMX Connector:用于监控和管理 Tomcat 运行状态。可以通过 JMX 客户端连接到 JMX Connector,并获取 Tomcat 运行状态信息。默认端口为 1099。
Tomcat 中的 NIO、AIO 和 APR 是三种不同的 IO 模型,用于提高 Tomcat 的并发性能和吞吐量。
其含义分别如下:
- NIO(Non-blocking I/O,非阻塞式I/O):Java 1.4 引入的一种 IO 模型,提供了用于高速读/写的 Buffer 和 Selector,可以支持非阻塞的 Socket 连接,提高了并发能力。使用 NIO 可以实现更高的并发性和吞吐量,但实现和使用复杂,需要使用选择器和缓冲区等技术。
在 Tomcat 的 server.xml 配置文件中的 Connector 标签中添加 useNio=“true”,即可启用 NIO 模型。例如:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
useNio="true"/>
- AIO(Asynchronous I/O,异步I/O):Java 7 新增的一种 IO 模型,支持异步读/写操作,可以将 I/O 操作交给系统来完成,从而实现更高的并发性和吞吐量。使用 AIO 可以避免面对繁琐的 I/O 事件通知编程,但因为它是 Java 7 中新增的特性,因此在某些较早的版本中可能无法使用。
在 catalina.sh 或 catalina.bat(Windows 系统)中添加如下行:
.JAVA_OPTS="-Dtomcat.nio=true"
- APR(Apache Portable Runtime,Apache 便携式运行环境):是一个开源的、跨平台的库,提供了一组跨平台的 API,允许应用程序更高效地访问底层操作系统。Tomcat 提供了 APR 连接器,通过将 APR 库与 Tomcat 集成,可以实现更高的性能和稳定性,特别是在处理高并发连接时。
需要先安装 APR 库和 Native Connector,并在 Tomcat 的 server.xml 配置文件中的 Connector 标签中添加以下属性:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
protocolHandlerClassName="org.apache.coyote.http11.Http11AprProtocol" />
总之,Tomcat 中的 NIO、AIO 和 APR 是三种不同的 IO 模型,用于提高 Tomcat 的并发性能和吞吐量。需要根据实际需求和环境选择合适的 IO 模型。
Example
<!--
<Connector connectionTimeout="20000" port="8000" protocol="HTTP/1.1"
redirectPort="8443" uriEncoding="utf-8"/>
-->
<!-- protocol 启用 nio模式,(tomcat8默认使用的是nio)(apr模式利用系统级异步io) -->
<!-- minProcessors最小空闲连接线程数-->
<!-- maxProcessors最大连接线程数-->
<!-- acceptCount允许的最大连接数,应大于等于maxProcessors-->
<!-- enableLookups 如果为true,requst.getRemoteHost会执行DNS查找,反向解析ip对应域
名或主机名-->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443
maxThreads=“500”
minSpareThreads=“100”
maxSpareThreads=“200”
acceptCount="200"
enableLookups="false"
/>
其他配置
• maxHttpHeaderSize=“8192” http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
• URIEncoding=“UTF-8” 指定Tomcat容器的URL编码格式。
• disableUploadTimeout=“true” 上传时是否使用超时机制
• enableLookups=“false”–是否反查域名,默认值为true。为了提高处理能力,应设置为false
• compression=“on” 打开压缩功能
• compressionMinSize=“10240” 启用压缩的输出内容大小,默认为2KB
• noCompressionUserAgents=“gozilla, traviata” 对于以下的浏览器,不启用压缩
• compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain” 哪• 些资源类型需要压缩
tomcat 如何优化?
1、优化连接配置.这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。
参数解释:
- URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译
- maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
- minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。
- enableLookups : 这个功效和Apache中的HostnameLookups一样,设为关闭。
- connectionTimeout : connectionTimeout为网络连接超时时间毫秒数。
- maxThreads : maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。
- acceptCount : acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection
- useURIValidationHack: false
- enableLookups=”false” :为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改 server.xml文件中的enableLookups参数值。
- disableUploadTimeout :类似于Apache中的keeyalive一样
- 给Tomcat配置gzip压缩(HTTP压缩)功能 compression=”on” compressionMinSize=”2048″ compressableMimeType=”text/html,text/xml,text/JavaScript,text/css,text/plain”
HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩, 再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。- compression=”on” 打开压缩功能
- compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB
- noCompressionUserAgents=”gozilla, traviata” 对于以下的浏览器,不启用压缩
- compressableMimeType=”text/html,text/xml” 压缩类型
最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端 口这个段的配置.
<!–enable tomcat ssl–>
<Connector port=”8443″ protocol=”HTTP/1.1″
URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″
acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″
useURIValidationHack=”false”
compression=”on” compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
SSLEnabled=”true”
scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS”
keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”
/>
JVM内存调优
内存方式的设置是在catalina.sh(或setenv.sh file(tomcat/bin/setenv.sh)中,调整一下JAVA_OPTS(或CATALINA_OPTS)变量即可,因为后面的启动参数会把 JAVA_OPTS作为JVM的启动参数来处理。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
其各项参数如下:
- -Xmx3550m:设置JVM最大可用内存为3550M。
- -Xms3550m:设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分 配内存。
- -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大 小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆 的3/8。
- -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为 256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作 系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
- -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为 4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
- -XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区 与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
- -XX:MaxPermSize=16m:设置持久代大小为16m。
- -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对 象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
JVM GC调优(G1)
垃圾回收的设置也是在catalina.sh或setenv.sh file(tomcat/bin/setenv.sh)中,调整JAVA_OPTS或CATALINA_OPTS变量。
export CATALINA_OPTS = "-XX:+UseG1GC"
You can set this env variable in setenv.sh file(tomcat/bin/setenv.sh) or jvmsettings.sh file(/etc/profile.d/jvmsettings.sh).
Addition to the GC type you can pass other jvm parameters to the same command
export CATALINA_OPTS="-Xms4096M -Xmx4096M -XX:+UseG1GC -XX:+PrintGCDetails -Xloggc:/settings/logs/gc.log"
After completing the configurations, restart the tomcat server. Then execute the following command to get the currently using GC type
jmap -heap <process_id>
Tomcat的性能调优主要有那些参数?
Tomcat是一个流行的Java Web应用程序服务器,其性能调优可以通过调整以下参数来实现:
• JVM参数:包括堆大小、垃圾收集器、线程栈大小等。
• Tomcat Connector参数:包括请求和响应缓冲区大小、最大连接数、线程池大小等。
• 应用程序配置参数:包括Servlet、JSP和数据库连接池等。
• 操作系统参数:包括文件句柄、网络缓冲区大小等。
• Web服务器参数:包括负载均衡、反向代理等。
• 数据库参数:包括连接池大小、缓冲区大小等。
在调优Tomcat性能时,需要根据具体情况进行调整,并进行逐步测试和优化。建议先进行基准测试以了解当前性能瓶颈,然后分析数据,调整参数以提高性能。