专栏首页JavaWebWeb服务器加速之Tomcat7性能如何调优

Web服务器加速之Tomcat7性能如何调优

Web服务器加速之Tomcat7性能如何调优

1.     Tomcat是一个运行在Java JVM(虚拟机)环境的的一个应用,使用Java开发的。

2.     Tomcat也有自己的web管理功能,分别对应了Tomcat下webapps下的项目如下:

都对应了不同的角色能访问到具体的项目,目前掌握的Tomcat只有如下:

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<role rolename="admin "/>
<role rolename="admin "/>

这里的配置是配置管理员账号,目的是进入Tomcat默认部署的项目,进行相关Tomcat启动参数和启动信息

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

3.     疑问:由于没有阅读和百度到具体的角色权限访问项目的详细描述,暂时不知道admin,manager和manager-gui,admin-gui(这二个主要是配置server status和host manager管理页面访问)角色区别,都对应了什么样的权限问题?

4.     客户端动态请求访问Tomcat下webapps下的项目动态资源(http1.0或http1.1)会直接根据http1.0或http1.1直接返回资源,但在在访问静态资源的时候,在tomcat(服务端)不会直接返回静态资源,会在客户端和服务端多一层静态资源的处理,服务端-->ajp(协议)-->静态资源处理-->http协议-->客户端,但通常ajp的协议一般都用不到的。

中间静态资源处理也不是本地就能直接处理的,而是转发到Apache基金下的服务器来做静态资源处理的,很消耗资源,又不是常用到,而且做静态资源处理的时候一般都用Nginx+Tomcat来处理,且Nginx处理性能比ajp快很多,所有可以得到如下优化手段:禁用ajp协议

5.     Tomcat优化手段

a)     虚拟机(Jvm)优化

b)    通信协议优化(到底使用Bio,Nio,Aio和禁用ajp协议)

c)     外部连接池优化(可根据业务量和资源合理调配连接池数量),可以根据第三方工具去开启并发测试来确定一个最好线程池连接数。

d)    更加深入内部配置(server.xml)

6.     根据Tomcat的通信协议引发对通信协议的优化(Bio,Nio,Aio)

如何查看Tomcat启动时用的是什么通信模式,可以看启动日志:

参考博客地址:Tomcat Bio,Nio,Aio 模式性能测试与个人看法,https://yq.aliyun.com/articles/14768

7.     server.xml 是Tomcat的核心配置文件其中包括了Tomcat整体架构信息和各组件之间的联系,service.xml 文件配置介绍参考博客地址:https://www.cnblogs.com/kismetv/p/7228274.html

8.     对比Bio,Nio的高效处理来与是:同步非阻塞,多了(通道和缓冲区和选择器,并存在连接池的概念,所有可以根据业务量来设置具体的连接处max数来优化性能,默认连接池数量为150)。

9.     Jetty比Tomcat性能高,但为什么还有这么多企业都在使用Tomcat,是在于Tomcat本身虽然没有Jetty性能高,但对应的Tomcat优化后和Tomcat的可扩展性决定Tomcat还是没法被Jetty直接取代,而且基于Tomcat还是J2ee制定规范者开发的,也带来了不少人使用它。Tomcat能够进行细粒度控制和nginx搭配优化而更加厉害了,而且Tomcat内部优化非常多。

10.  Tomcat 中虚拟机(Jvm)优化参数,可以直接配置到catalina.bat中

11.  连接器参数优化(主要用于受理客户端请求处理的,所有它的参数配置也特别重要)

12.  启用(外部配置连接池),可根据业务场景和我们的一个服务器硬件资源条件可以适当加大线程连接池连接池。

13.  疑问:现在下载的Tomcat默认使用的是Apr模式的通信协议而不是Bio,要怎么才能配置出Bio的通信协议?

14.  疑问:使用Nio通信模式的时候,配置外部线程池数量不好用,管理台提示线程池数量为-1?

15.  Tomcat集群的时候,根据我们的项目来确定是否使用Nio模式,如果说我们的项目的类库比较新,都是1.5类库(jdk版本)之后 那么不妨我们将我们集群当中的每一个Tomcai服务器的启动模式设置为高并发高性能的应答模式-->NIO模式。

16. server.xml 配置文件如下:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

	<!-- 优化手段之三:启动外部连接池,来满足高并发已经复用的请求,根据业务场景(如每秒并发数)在硬件资源条件下可以加大线程连接池 -->
	<!-- 模拟并发来测试线程连接池在多少比较合适:使用第三方并非测试工具来模拟(telnet) -->
	<!-- 
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->

	<!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
	-->
	<!-- 优化手段之二:关闭bio,启动nio(高性能的应答模式), -->		
	<!-- 优化手段之四:连接器的优化,可以根据经验设置一个最佳实践配置参数 -->
	<!-- 细粒度控制问题决定一个企业要选择tomcat,而不选择jetty,要选择mybatis而不选择hibernate,架构师都是可控灵活的架构 -->
	<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
		   connectionTimeout="20000"
		   redirectPort="8443" />
	
	<!-- 优化手段之五:JVM参数的优化 -->
	<!-- 优化手段之六:虚拟机的性能优化 -->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
	
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 优化手段之一,禁用ajp 减少集群处理时间 -->
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
		
      </Host>
    </Engine>
  </Service>
</Server>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 业务场景-互联网电商系统难点解密,优雅实现超时订单自动关闭

    重点摘要:定时任务(批量处理数据或任务)、延时任务(某事件触发一定时候后需要触发另一个任务,不是统一执行)

    秋日芒草
  • 面试-HashMap底层实现原理 原

    参考博客:https://www.cnblogs.com/wuhuangdi/p/4175991.html

    秋日芒草
  • 项目中Spring 声明式事务使用的一些坑点分析01

    秋日芒草
  • JavaWeb项目搭建

    1.官⽹下载压缩⽂件。https://tomcat.apache.org/download-90.cgi

    乐心湖
  • 创建银行账户管理系统项目及Tomcat服务器搭建

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • Java Web入门基础之Tomcat

    可以这么理解Tomcat:开源的Web应用服务器,一般用于中小型系统和并发访问用户不是很多的情况下,是开发和调试JSP的首选。对于一个初学者来说,可以这样认为,...

    黄桂期
  • tomcat安全加固

    1. 升级到最新稳定版,这个是老生常谈了。目前Tomcat支持6.0和7.0两个版本。

    zhangdd
  • Tomcat 优雅关闭之路

    本文通过阅读Tomcat启动和关闭流程的源码,深入分析不同的Tomcat关闭方式背后的原理,让开发人员能够了解在使用不同的关闭方式时需要注意的点,避免因JVM进...

    2020labs小助手
  • 【JavaWeb】87:初学Tomcat相关问题大概都在这儿了

    据说开发工具IDEA新版本自带有Tomcat,暂且不管,从安装到配置运行,学一遍Tomcat。

    刘小爱
  • 思维导图学 Tomcat & Jetty

    作为一个Servlet容器,Tomcat的核心功能就是维护网络请求,将客户端的请求分解处理,分发到对应的具体处理逻辑中,然后获取响应结果包装返回给客户端。

    Yano_nankai

扫码关注云+社区

领取腾讯云代金券