共计 1835 个字符,预计需要花费 5 分钟才能阅读完成。
Tomcat 在各位 JavaWeb 从业者常常就是默认的开发环境,但是 Tomcat 的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. 幸好 Tomcat 还有很多的提升空间. 下文介绍一下 Tomcat 优化, 可以分为内存, 线程,IO.
Tomcat 在各位 JavaWeb 从业者常常就是默认的开发环境,但是 Tomcat 的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈.
幸好 Tomcat 还有很多的提升空间. 下文介绍一下 Tomcat 优化, 可以分为内存, 线程,IO.
Windows 下的 catalina.bat
Linux 下的 catalina.sh 如:
JAVA_OPTS='-Xms256m -Xmx512m'
-Xms
-Xmx
maxThreads=”X” 表示最多同时处理 X 个连接
minSpareThreads=”X” 初始化 X 个连接
maxSpareThreads=”X” 表示如果最多可以有 X 个线程,一旦超过 X 个, 则会关闭不在需要的线程
acceptCount=”X” 当同时连接的人数达到 maxThreads 时, 还可以排队, 队列大小为 X. 超过 X 就不处理
1: 同步阻塞 IO(JAVA BIO)同步并阻塞,服务器实现模式为一个连接一个线程 (one connection one thread 想想都觉得恐怖, 线程可是非常宝贵的资源),当然可以通过线程池机制改善.
2:JAVA NIO: 又分为同步非阻塞 IO, 异步阻塞 IO 与 BIO 最大的区别 one request one thread. 可以复用同一个线程处理多个 connection(多路复用).
3:, 异步非阻塞 IO(Java NIO2 又叫 AIO) 主要与 NIO 的区别主要是操作系统的底层区别. 可以做个比喻: 比作快递,NIO 就是网购后要自己到官网查下快递是否已经到了 (可能是多次),然后自己去取快递;AIO 就是快递员送货上门了 (不用关注快递进度)。
BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,但程序直观简单易理解.
NIO 方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4 开始支持.
AIO 方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作,编程比较复杂,JDK7 开始支持.
在 server.xml 中
实现对 Tomcat 的 IO 切换.
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 优化到这个层次, 可以应对大部分性能需求.
最后一句话 "再牛 B 的服务器, 也顶不住一个傻 B 的代码". 优化的前提条件是良好的代码质量和设计.