在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验。
1. 服务器资源
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
(1) 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。
(2) 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降。
(3) 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办法还是利用下面提到的缓存。
2. 利用缓存和压缩
对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。
另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。可以参考之前写的《利用nginx加速web访问》。
除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。
3. 采用集群
单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作。可以参考之前写的《利用nginx+tomcat+memcached组建web服务器负载均衡》。
4. 优化tomcat参数
这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,主要是优化连接配置,关闭客户端dns查询。
- <Connector port="8080"
- protocol="org.apache.coyote.http11.Http11NioProtocol"
- connectionTimeout="20000"
- redirectPort="8443"
- maxThreads="500"
- minSpareThreads="20"
- acceptCount="100"
- disableUploadTimeout="true"
- enableLookups="false"
- URIEncoding="UTF-8" />
5. 改用APR库
tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。
NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重启即可生效。上面配置我已经改过了,默认的是HTTP/1.1。
APR则需要安装第三方库,在高并发下会让性能有明显提升。具体安装办法可以参考http://www.cnblogs.com/huangjingzhou/articles/2097241.html。安装完成后重启即可生效。如使用默认protocal就是apr,但最好把将protocol修改成org.apache.coyote.http11.Http11AprProtocol,会更加明确。
在官方找到一个表格详细说明了这三种方式的区别:
- Java Blocking Connector Java Nio Blocking Connector APR/native Connector
- BIO NIO APR
- Classname AjpProtocol AjpNioProtocol AjpAprProtocol
- Tomcat Version 3.x onwards 7.x onwards 5.5.x onwards
- Support Polling NO YES YES
- Polling Size N/A maxConnections maxConnections
- Read Request Headers Blocking Sim Blocking Blocking
- Read Request Body Blocking Sim Blocking Blocking
- Write Response Blocking Sim Blocking Blocking
- Wait for next Request Blocking Non Blocking Non Blocking
- Max Connections maxConnections maxConnections maxConnections
6. 优化网络
Joel也明确提出了优化网卡驱动可以有效提升性能,这个对于集群环境工作的时候尤为重要。由于我们采用了linux服务器,所以优化内核参数也是一个非常重要的工作。给一个参考的优化参数:
- 1. 修改/etc/sysctl.cnf文件,在最后追加如下内容:
- net.core.netdev_max_backlog = 32768
- net.core.somaxconn = 32768
- net.core.wmem_default = 8388608
- net.core.rmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.ip_local_port_range = 1024 65000
- net.ipv4.route.gc_timeout = 100
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_timestamps = 0
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_mem = 94500000 915000000 927000000
- net.ipv4.tcp_max_orphans = 3276800
- net.ipv4.tcp_max_syn_backlog = 65536
- 2. 保存退出,执行sysctl -p生效
7. 让测试说话
优化系统最忌讳的就是只调优不测试,有时不适当的优化反而会让性能更低。以上所有的优化方法都要在本地进行性能测试过后再不断调整参数,这样最终才能达到最佳的优化效果。
补充Bio、Nio、Apr模式的测试结果:
对于这几种模式,我用ab命令模拟1000并发测试10000词,测试结果比较意外,为了确认结果,我每种方式反复测试了10多次,并且在两个服务器上都 测试了一遍。结果发现Bio和Nio性能差别非常微弱,难怪默认居然还是Bio。但是采用apr,连接建立的速度会有50%~100%的提升。直接调用操 作系统层果然神速啊,这里强烈推荐apr方式!
原文地址:http://passover.blog.51cto.com/2431658/732629
相关推荐
Tomcat服务器性能调优是提升应用程序运行效率的关键环节,涉及到多个层面的调整。以下将详细阐述从操作系统、Java虚拟机、Apache与Tomcat的集成以及Apache和Tomcat集群等方面的调优策略。 首先,**操作系统调优**是...
本文将围绕“Tomcat7性能优化”这一主题,详细介绍如何通过优化配置提高Tomcat服务器的并发能力,并深入探讨服务器资源(如CPU、内存、硬盘等)对处理能力的影响。 #### 二、理解服务器资源的重要性 在优化Tomcat...
在IT行业中,Tomcat服务器是Java Web...总的来说,Tomcat服务器集群和负载均衡是提升Web应用性能和可用性的有效手段。通过精心设计和配置,可以创建一个高可用、高性能的Java Web服务环境,以满足不断增长的用户需求。
Tomcat作为流行的Java应用服务器,其性能优化能显著提升应用程序的运行效率。本文将深入探讨如何针对Tomcat7进行调优。 首先,我们关注的是**线程池(Thread Pool)优化**。线程池管理着处理客户端请求的线程,通过...
### Apache+Tomcat服务器集群配置详细步骤 #### 一、引言 在现代Web开发中,随着业务规模的不断扩大和用户需求的日益增长,单一服务器往往难以满足高性能、高可靠性的要求。为了应对这一挑战,通常采用Apache+...
**Tomcat服务器工作原理** ...理解Tomcat的工作原理有助于我们更好地管理和优化Java Web应用,提升服务器性能,解决运行中可能出现的问题。通过深入学习,我们可以根据应用需求定制Tomcat配置,使其达到最佳运行状态。
标题中的“tomcat 性能检测软件”指的是用于分析和监控Apache Tomcat服务器性能的工具。...这份文档和工具包将对那些管理和维护Tomcat服务器的人来说非常有价值,帮助他们提升监控效率,优化应用性能。
【标题】"Tomcat服务器开发源码...通过深入学习Tomcat源码,开发者不仅可以提升Java Web开发技能,还能对服务器端软件的设计和实现有更深入的理解,这对于任何想要成为专业Java Web开发者的人都是一次宝贵的学习机会。
标题中的“Tomcat7本地服务器”指的是Apache Tomcat 7,这是一个开源的、基于Java的Web应用程序服务器,特别适合小型到中型的项目。Tomcat是Java Servlet和JavaServer Pages(JSP)技术的主要实现,它允许开发人员...
【标题】:深入理解Tomcat服务器 【描述】:Tomcat是Java EE(现在被称为Jakarta EE)领域中广泛使用的开源Web服务器和Servlet容器。它以其轻量级、高效和可扩展性而闻名,是开发和部署Java Web应用程序的理想选择...
【标题】:“Tomcat性能优化”意味着我们正在探讨如何提升Apache Tomcat服务器的运行效率,使其在处理Web应用时能够更快、更稳定地工作。Tomcat是一个开源的Java Servlet容器,广泛用于部署Java Web应用程序。 ...
10. **性能优化**:讨论如何调整JVM参数,如堆内存大小、垃圾收集策略,以及Tomcat的线程池设置,以提升服务器性能。 11. **故障排查**:学习如何通过日志、控制台输出以及服务器状态检查来诊断和解决常见的运行...
标题中的"tomcat服务器"指的是Apache Tomcat,它是一个执行Java Servlet和JavaServer Pages(JSP)的服务器,也是Java EE应用程序的容器。Tomcat与Sun Microsystems(现为Oracle)的Java Servlet和JSP规范兼容,并且...
了解Tomcat服务器的主要作用 掌握Tomcat服务器的安装与配置 掌握Tomcat安装目录下的主要目录作用 理解JSP页面的执行流程 编写第一个交互式程序
Tomcat是Apache 软件基金会(Apache Software ...因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是7.0。
在Eclipse中部署Tomcat服务器时,需要正确地配置Tomcat服务器,清除Tomcat服务器的缓存,添加项目路径到Tomcat服务器的配置文件中,并启动Tomcat服务器。按照这些步骤进行,可以确保在Eclipse中部署Tomcat服务器时...
这个版本是Tomcat服务器的一个重要里程碑,引入了许多改进和新特性,旨在提高性能、安全性和稳定性。 首先,Tomcat 7.0遵循Java Servlet 3.0和JavaServer Pages (JSP) 2.2规范。Servlet 3.0引入了注解配置,允许...
Tomcat作为一个轻量级的服务器,广泛应用于小型到中型企业级应用,因为它简单、易用且性能优秀。 **一、Tomcat的结构与组件** Tomcat主要由以下几个核心组件构成: 1. **Catalina**:这是Tomcat的主要部分,负责...
在本场景中,我们关注的是如何在Android设备上使用Tomcat来搭建这样的服务器。Tomcat是一个开源的Java Servlet容器,它支持Java Server Pages (JSP) 和Servlet,是Java Web应用程序开发的理想选择。 首先,让我们...