zoukankan      html  css  js  c++  java
  • Tomcat7-配置调优

    提高Tomcat的性能可以分为两个方向。


    1、服务器资源

    服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomcat性能的方式。


    2、优化配置

    优化配置之前,我们需要配置一个tomcat管理员账户,来登录查看Tomcat控制台提高的各种参数。

    在conf/ tomcat-users.xml下添加用户:

    <role rolename="manager"/>
    <role rolename="manager-gui"/>
    <role rolename="admin"/>
    <role rolename="admin-gui"/>
    <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

    启动tomcat,登录查看信息:http://127.0.0.1:8080/   

    tomcat/tomcat登录

    tomcat的3种运行模式  

    bio 
    默认的模式,性能非常低下,没有经过任何优化处理和支持.

    nio 
    nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即Java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。

    apr 
    安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.


    启动NIO模式

    修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol

    <!--我这里的端口是8081为例 --> 
     <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"  
                   connectionTimeout="20000"
                   redirectPort="8443" />

    执行器优化(线程池)

    在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。

    打开<service name="catalina">下的这个执行器,executor name="tomcatThreadPool"
    配置根据实际情况调整。

    在Connector的参数executor name="tomcatThreadPool"中指定使用共享线程池

     <Connector executor="tomcatThreadPool" 
                   port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000"
                   redirectPort="8443" 
                   enableLookups="false"
                   maxPostSize="0"  
                   acceptCount="100"
                   acceptorThreadCount="2"
                   disableUploadTimeout="true"
                   maxConnections="10000"
                   SSLEnabled="false"/>
    maxPostSize="UTF-8" 在后台出现报错,这句大家可以删掉。

     

    查看Tomcat控制台

    Executor重要参数说明:

    name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;

    namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

    maxThreads:该线程池可以容纳的最大线程数。默认值:200;

    maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

    minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

    threadPriority:线程的等级。默认是Thread.NORM_PRIORITY

    Connector重要参数说明:

    executor:表示使用该参数值对应的线程池;

    minProcessors:服务器启动时创建的处理请求的线程数;

    maxProcessors:最大可以创建的处理请求的线程数;

    acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

    参数最佳实践

     

    禁用AJP连接器

    AJPApache JServer Protocol 
    AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。

     我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。

     

     

     

     

     

     

    为之一笑:
    客户被绑,蒙眼,惊问:“想干什么?” 对方不语,鞭笞之,客户求饶:“别打,要钱?” 又一鞭,“十万够不?” 又一鞭,“一百万?” 又一鞭。客户崩溃:“你们TMD到底要啥?” “要什么?我帮你做项目,写代码的时候也很想知道你TMD到底想要啥!”
  • 相关阅读:
    MySQL事务隔离级别和MVCC
    windows环境下查看端口是否被占用
    jar找不到问题解决
    Java注解
    Fastjson
    mybatis
    Idea快捷键
    Date与String的相互转换
    Windows快捷键
    [转]linux awk命令详解
  • 原文地址:https://www.cnblogs.com/XuanZP/p/13749873.html
Copyright © 2011-2022 走看看