`
shibin_1109
  • 浏览: 79379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

优化tomcat来提高性能

阅读更多
对tomcat调优主要是分为一下几点:
一,如果条件允许,我们可以部署tomcat集群通过nginx去转发请求,以减少单个服务器的压力.这样我们就要解决一个tomcat的session共享问题.
多个tomcat要一起协同工作session共享有几种办法,可以考虑的方案有以下几个:
  1. 使用tomcat自带的cluster方式,多个tomcat见自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。
  2. 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但是我们的应用很可能是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。
  3. 利用memcached把多个tomcat的session集中管理,这是最直接的解决方案,但是操作起来也最为复杂。
    我们的系统既要求性能,又要比较好的利用上负载均衡,所以第3个方案是首选。接下来就是安装搭建之路了。

memcached的安装:

1.下载libevent,安装libevent
cd /tmp
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar -zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr/local/libevent
make && make install

2.下载memcached,安装memcached
wget http://memcached.org/latest 
tar -zxvf memcached-1.4.17.tar.gz
cd memcached-1.4.17
./configure --prefix=/usr/local/memcache --with-libevent=/usr/local/libevent/
make &&  make install
cd /usr/local/memcached/bin
./memcached -d -m 64 -u root -p 55001 -c 2048 

查看memcached的状态
ps -ax|grep memcache

链接到memcache
telnet cache.expai.com 55001
查看状态
stats

查看缓存占了多少空间
cat /proc/id/statm
启动参数
./memcached -d -m 1024 -u root -p 55001 -c 2048

memcached启动参数
 
-p 指定端口号(默认11211)  
-U <num> UDP监听端口 (默认: 11211, 0 时关闭) 
-s <file>     用于监听的UNIX套接字路径(禁用网络支持)
-a <mask>     UNIX套接字访问掩码,八进制数字(默认:0700)
-m 指定最大使用内存大小(默认64MB)   
-t 线程数(默认4)
 
-l <ip_addr> 绑定地址 (默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问) 
-d start 启动memcached服务   
-d restart 重起memcached服务   
-d stop|shutdown 关闭正在运行的memcached服务   
-u <username> 绑定使用指定用于运行进程 <username>  (只有root用户可以使用这个参数)
-P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用
-m 最大内存使用,单位MB。默认64MB     www.2cto.com  
 
-M 内存耗尽时返回错误,而不是删除项   
-c 最大同时连接数,默认是1024 
-f 块大小增长因子,默认是1.25 
-n <bytes>最小分配空间,key+value+flags默认是48
-k锁定所有内存页。注意你可以锁定的内存上限。
 
试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。
(不是前面的 -u <username> 参数;在sh下,使用命令"ulimit -S -l NUM_KB"来设置。)
-v 提示信息(在事件循环中打印错误/警告信息。)
-vv 详细信息(还打印客户端命令/响应)
-vvv 超详细信息(还打印内部状态的变化)
-h 打印这个帮助信息并退出。
-i  打印memcached和libevent的许可。
-L 尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提高运行效率。  www.2cto.com  
 
              为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块。
-D <char>     使用 <char> 作为前缀和ID的分隔符。
              这个用于按前缀获得状态报告。默认是":"(冒号)。
              如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启。
-t <num>      使用的线程数(默认:4)
-R 每个连接可处理的最大请求数。
-C 禁用CAS。
-b 设置后台日志队列的长度(默认:1024)
-B 绑定协议 - 可能值:ascii,binary,auto(默认)
-I 重写每个数据页尺寸。调整数据项最大尺寸。

默认memcache会监听11221端口,如果想清空服务器上memecache的缓存,大家一般使用的是:
telnet localhost 11211
flush_all

同样也可以使用:
echo "flush_all" | nc localhost 11211

使用flush_all 后并不是删除memcache上的key,而是置为过期

[size=medium]memcached-session-manager配置
    让tomcat调用memcached来存储session早就是一个很成熟的解决方案了,开源的msm就可以解决这个问题。比较折腾的就是要用到的jar包,官方文档说的也比较含糊,我这里用的是kryo的序列化方案,所以用到的包多一些,分别是:
kryo-1.03.jar
kryo-serializers-0.8.jar
memcached-2.5.jar(我在官方看最新已经到2.7了,但是msm官方说用2.5,可能新包没测试过,特别是2.6版本changelog里面提到api有调整,还是不要乱升的好)
memcached-session-manager-1.5.1.jar
memcached-session-manager-tc7-1.5.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.5.1.jar
reflectasm-0.9.jar
    以上这些包都放在$CATALINA_HOME/lib目录下。
    另外提一下,官方给出的4种序列化方案,其中kryo是效率最高的,具体比较看http://code.google.com/p/memcached-session-manager/wiki/SerializationStrategies。

    接下来是修改tomcat的配置文件$CATALINA_HOME/conf/context.xml,调整成新的session存储方式。配置文件中加入以下内容:[/size]
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
      memcachedNodes="n1:127.0.0.1:11211" 
      sticky="false" 
      lockingMode="auto" 
      sessionBackupAsync="false"   
      sessionBackupTimeout="1000"  
 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" 
      />


在$CATALINA_HOME/conf/logging.properties文件中添加de.javakaffee.web.msm.level=FINE,就可以在catalina.out的日志中看到详细的session存取情况。

二,改用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,会更加明确。


三,优化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" /> 


四,利用缓存和压缩
    对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。

    另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。可以参考之前写的《利用nginx加速web访问》。

    除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。

五,服务器资源
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
    (1) 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。
    (2) 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降。
    (3) 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办法还是利用下面提到的缓存。
分享到:
评论

相关推荐

    Tomcat性能优化

    【文件】:“Tomcat7性能优化调优.docx”可能包含了关于Tomcat7性能优化的具体步骤、最佳实践和案例分析,这对于我们深入理解如何优化Tomcat7非常有价值。 以下是一些可能的Tomcat性能优化知识点: 1. **内存配置*...

    Tomcat7性能优化

    在优化Tomcat前,了解服务器资源的基本情况是非常必要的。服务器所能提供的CPU、内存、硬盘等硬件资源对网站的处理能力有着决定性的影响。硬件配置越高,理论上能够处理的并发请求也就越多。虽然硬件升级可以直接...

    tomcat7 优化 性能调优

    然而,在面对高并发访问场景时,如何有效地优化Tomcat以提高其性能变得至关重要。本文将围绕“Tomcat7优化与性能调优”的主题,深入探讨优化策略,包括但不限于配置调整、启动模式选择、线程池设置、JVM参数调整等...

    优化提高tomcat性能.Tomcat参数调优

    合理设置可以避免频繁的垃圾回收,提升性能。一般推荐设置为服务器物理内存的1/4到1/3,例如`-Xms2g -Xmx4g`。 - `-XX:NewRatio`: 控制年轻代和老年代的比例,对于Tomcat这样的短生命周期对象较多的应用,通常年轻...

    tomcat性能优化.pdf

    优化Tomcat中的compression压缩属性,可以减少数据传输量,提高响应速度,但需要与sendfile功能的互斥性进行权衡。另外,通过调整Tomcat的deferAccept参数,可以改善TCP连接的响应速度。Keep-alive的实现逻辑及优化...

    Tomcat性能优化.rar

    2. 启用NIO或APR:相较于BIO,NIO提供了非阻塞I/O,而APR(Apache Portable Runtime)利用操作系统的原生I/O接口,能显著提升性能。 3. 禁用无用的服务和模块:如AJP、JMX等,减少不必要的资源消耗。 4. 配置连接...

    Tomcat7 性能优化

    除了上述配置外,还有一些其他的最佳实践可以帮助进一步优化Tomcat7的性能: - **禁用DNS查找**:通过设置`URIEncoding="UTF-8"`和`useAddr="false"`来禁用DNS查找,避免不必要的延迟。 - **优化JVM参数**:根据...

    Tomcat优化-Tomcat 的性能调优的原理和方法

    本文旨在介绍Tomcat性能调优的基本原理与具体实施方法,帮助技术人员更好地理解和优化Tomcat,提升其在各种应用场景下的性能表现。 #### 二、调优分类 由于Tomcat的运行高度依赖于Java虚拟机(JVM),我们可以将其...

    tomcat性能优化

    在本文中,我们将讨论 Tomcat 的性能优化方法,以提高网站的并发能力。 一、目的 通过优化 Tomcat,提高网站的并发能力。服务器资源的性能对处理能力有决定性影响,因此,优化 Tomcat 配置是提高网站并发能力的...

    tomcat性能优化,调优

    Tomcat性能优化是指通过调整Tomcat服务器的配置和虚拟机参数,以提高Tomcat服务器的性能和可扩展性。Tomcat服务器的性能优化可以分为两类:外部环境调优和自身调优。 外部环境调优是指调整Tomcat运行环境的操作系统...

    Tomcat7性能优化.docx

    虽然金钱投入能提升性能,但优化配置同样重要,尤其是在预算有限的情况下。 2. 优化配置 - 管理员账户配置:在`conf/tomcat-users.xml`文件中添加管理员账户,以便监控和管理Tomcat。例如,增加如下配置: ```...

    【高并发】高并发环境下如何优化Tomcat性能?看完我懂了!

    Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? Tomcat运行模式 Tomcat的运行模式有3种。 1.bio模式 默认的模式,性能非常...

    tomcat8.5.56_X64_nio2模式性能优化版+垃圾处理机制.zip

    总的来说,这个Tomcat版本是针对性能和稳定性的深度定制,尤其适合需要高并发处理和优化日志输出的场景。通过使用NIO2模式,它能够更好地处理大量并发连接,而垃圾回收机制的优化则可以降低系统资源消耗,提高服务...

    Tomcat性能优化及JVM内存工作原理

    在Tomcat的配置文件中,可以通过调整Connector的参数来优化Tomcat的性能。例如,调整最大连接数、调整工作模式、启用gzip压缩等。同时,也可以通过调整JVM的参数来优化JVM的性能。例如,调整JVM的最大堆大小、调整...

    Tomcat性能优化笔记

    优化Tomcat性能的过程是一个持续调整的过程,需要根据实际的负载状况、应用特性以及硬件资源进行细致的测试和调优。每个环节的优化都可能带来显著的性能提升,但在调整时也需要平衡各种因素,确保系统的稳定性和响应...

Global site tag (gtag.js) - Google Analytics