浅谈Tomcat服务器优化方法

发布时间:2023-04-18 10:11:21

对于Javaweb开发人员来说,Tomcat已经成为默认的web服务器,但在生产环境中使用Tomcat部署应用程序,如果我们使用Tomcat默认配置,特别是内存和线程配置,其配置非常低,容易成为性能瓶颈,因此我们需要优化Tomcat服务器,以提高其运行性能,让我们来看看Tomcat是如何优化的。

一、Tomcat内存优化,启动时告诉JVM需要多少内存(调整内存是最直接的方法)

Windows 下的 catalina.bat

Linux 下的 catalina.sh

jvm内存空间配置在本文件中,如: JAVA_OPTS='-Xms256m -Xmx512m'

-Xms<size> JVM初始化堆的大小

-Xmx<size> 根据服务器配置或项目具体设置JVM堆的最大值,实际参数大小;

二、Tomcat 线程优化 在server.xml配置

比如:

<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" />

maxThreads="X" 最多同时处理X连接

minSpareThreads="X" X连接的初始化

maxSpareThreads="X" 如果最多可以有X线程,一旦超过X线程,则不需要的线程将被关闭

acceptCount="X" 当同时连接的人数达到maxthreads时,也可以排队,队列大小为X.超过X就不处理了

三、Tomcat IO 优化

1:同步阻塞IO(JAVA BIO) 同步和阻塞服务器实现模式是连接一个线程(one connection one thread 想想都觉得恐怖,线程是很有价值的资源),当然可以通过线程池机制来改进.

2:JAVA NIO 它也分为同步非阻塞IO、异步阻塞IO和BIO之间最大的区别 request one thread.多个conection(多路复用)可以复用同一线程处理.

3:异步不阻塞IO(Java NIO2又称AIO) 与NIO的主要区别主要是操作系统的底层区别。你可以做一个比喻:与快递相比,NIO意味着在网上购物后,你应该去官方网站查看快递是否已经到达(可能有很多次),然后自己取快递;AIO意味着快递员上门送货(不要注意快递进度)。

BIO适用于连接数量小、固定的架构,对服务器资源要求高,并发局限于应用。JDK1.4以前唯一的选择,但程序直观、简单、易懂.

NIO方法适用于连接数量多、连接短(轻操作)的架构,如聊天服务器,并发局限于应用,编程复杂,JDK1.4开始支持.

AIO模式用于连接数量多、连接长(重操作)的架构,如相册服务器,充分调用OS参与并发操作,编程复杂,JDK7开始支持.

在server.xml中

<Connector port="80" protocol="org.apache.coyote.http11.NioProtocolHttp11" connectionTimeout="20000" URIEncoding="UTF-8" useBodyEncodingForURI="true" enableLookups="false" redirectPort="8443" />

实现Tomcat的IO切换。

四、大杀器APR

APR是从操作系统级别解决异步IO问题,大大提高性能. (http://apr.apache.org/)。

APR(Apache Portable Runtime)Apache是一个高可移植库 HTTP Server 2.x 核心可以更好地与其他本地web技术集成,使Java作为高性能web服务器平台,而不仅仅是作为后台容器更有效;

在产品环境中,特别是直接使用Tomcat作为WEB服务器时,应使用Tomcat Native可以提高其性能。如果没有APR,基本上300个线程会很快用完,以后的要求就要等了。但配备APR后,并发线程数量明显下降,从原来的300可能会立即下降到几十个,新的要求会毫无阻碍地进来;

在局域网环境测量中,即使是400个并发,也会在瞬间处理/传输,但在真实的Internet环境中,页面处理时间不到0.1%,大部分时间用于页面传输。如果不使用APR,一个线程只能同时处理一个用户,必然会造成堵塞。因此,在生产环境中使用APR是非常必要的.

安装Apache Tomcat Native Library,支持apr直接启动(http://tomcat.apache.org/native-doc/)它本身是基于APR的,排除代码问题Tomcat优化到这个层次,可以满足大部分性能需求;

最后,优化的前提是代码质量好,设计好。

上一篇 必备20道Nginx面试题附答案
下一篇 10分钟带你徒手做个Java线程池

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题