Tomcat参数配置

1. JAVA_OPTS内存优化

Tomcat内存优化主要是对启动参数的优化,能够在Tomcat的启动脚本catalina.sh中设置JAVA_OPTS参数。javascript

-server  启用jdk 的 server 版;  
    -Xms    java虚拟机初始化时的最小内存;  
    -Xmx   java虚拟机可以使用的最大内存;

配置完成后重启Tomcat,经过如下命令查看配置是否生效。css

1.首先查看Tomcat进程号html

ps -ef|grep java;进程号22222前端

2.经过进程号查看配置是否生效java

sudo jmap -heap 22222nginx

2. server.xml优化

Tomcat的主要配置文件,该配置中包含不少元素service、host、connector等。web

<Server>
  <Listener />
  <GlobaNamingResources>
  </GlobaNamingResources
  <Service>
    <Connector />
    <Engine>
      <Logger />
      <Realm />
      <host>
         <Logger />
         <Context />
      </host>
    </Engine>
  </Service>
</Server>

maxThreads 客户请求最大线程数,默认200shell

minSpareThreads Tomcat初始化时建立的 socket 线程数apache

maxSpareThreads Tomcat链接器的最大空闲 socket 线程数浏览器

minProcessors:最小空闲链接线程数,用于提升系统处理性能,默认值为 10

maxProcessors:最大链接线程数,即:并发处理的最大请求数,默认值为 75

acceptCount:容许的最大链接数,应大于等于 maxProcessors ,默认值为 100

enableLookups:是否反查域名,取值为: true 或 false 。为了提升处理能力,应设置为 false

redirectPort 在须要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口

acceptAccount 监听端口队列最大数,满了以后客户请求会被拒绝(不能小于maxSpareThreads )

connectionTimeout:网络链接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。一般可设置为30000 毫秒。

URIEncoding URL统一编码

其中和最大链接数相关的参数为maxProcessors 和 acceptCount 。若是要加大并发链接数,应同时加大这两个参数。

<Connector port="9027"   
                protocol="HTTP/1.1"  
                maxHttpHeaderSize="8192"  
                maxThreads="1000"  
                minSpareThreads="100"  
                maxSpareThreads="1000"  
                minProcessors="100"  
                maxProcessors="1000"  
                enableLookups="false"  
                URIEncoding="utf-8"  
                acceptCount="1000"  
                redirectPort="8443"  
                disableUploadTimeout="true"/>

maxThreads 和acceptCount生效状况

maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200

acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100

状况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。

状况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。

状况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝这次请求,返回connection refused

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="800" acceptCount="1000"/>

 

3. 多个虚拟机

强烈建议不要使用 Tomcat 的虚拟主机,推荐每一个站点使用一个实例。即,能够启动多个 Tomcat,而不是启动一个 Tomcat 里面包含多个虚拟主机。由于 Tomcat是多线程,共享内存,任何一个虚拟主机中的应用崩溃,都会影响到全部应用程序。虽然采用多实例的方式会产生过多的开销,但至少保障了应用程序的隔离和安全。

4. 压缩传输

tomcat做为一个应用服务器,也是支持 gzip 压缩功能的。咱们能够在 server.xml 配置文件中的 Connector 节点中配置以下参数,来实现对指定资源类型进行压缩。

compression="on"             # 打开压缩功能 
compressionMinSize="50"      # 启用压缩的输出内容大小,默认为2KB 
noCompressionUserAgents="gozilla, traviata"      # 对于如下的浏览器,不启用压缩 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些资源类型须要压缩

Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程 HTML、CSS、Javascript和Text,它能够节省40% 左右的流量。更为重要的是,它能够对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。可是, 压缩会增长 Tomcat 的负担,所以最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,将压缩的任务交由 Nginx/Apache 去作。

Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持 压缩功能,若是这个值包含有gzip,就代表浏览器支持gzip压缩内容的浏览

5. 管理AJP端口

AJP是为 Tomcat 与 HTTP 服务器之间通讯而定制的协议,能提供较高的通讯速度和效率。若是tomcat前端放的是apache的时候,会使用到AJP这个链接器。因为咱们公司前端是由nginx作的反向代理,所以不使用此链接器,所以须要注销掉该链接器。

<!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->

6. 更改关闭 Tomcat 实例的指令

server.xml中定义了能够直接关闭 Tomcat 实例的管理端口。咱们经过 telnet 链接上该端口以后,输入 SHUTDOWN (此为默认关闭指令)便可关闭 Tomcat 实例(注意,此时虽然实例关闭了,可是进程仍是存在的)。因为默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。所以咱们须要将关闭指令修改复杂一点。

固然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,所以你们也没必要担忧。除非黑客登录到tomcat本机去执行关闭操做。

<Server port="8005" shutdow n="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">

7. 更改 Tomcat 的服务监听端口

通常公司的 Tomcat 都是放在内网的,所以咱们针对 Tomcat 服务的监听地址都是内网地址。

<Connector port="8080" address="172.16.100.1" />

8. 关闭war自动部署

默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,所以咱们要关闭自动部署。

<Host name="localhost"  appBase=""
            unpackWARs="false" autoDeploy="false">

9. Tomcat性能优化

1.配置Tomcat运行内存;2.利用缓存和压缩《利用nginx加速web访问》;3.采用集群《利用nginx+tomcat+memcached组建web服务器负载均衡》4.Tomcat的参数优化;5.改用APR库

tomcat默认采用的BIO模型,在几百并发下性能会有很严重的降低。tomcat自带还有NIO的模型,另外也能够调用APR的库来实现操做系统级别控制。

<Connector port="80" protocol="HTTP/1.1"        connectionTimeout="20000"         redirectPort="8443" />

修改成

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol "   connectionTimeout="20000"     redirectPort="8443" />

NIO模型是内置的,调用很方便,只须要将上面配置文件中protocol修改为org.apache.coyote.http11.Http11NioProtocol,重启便可生效。上面配置我已经改过了,默认的是HTTP/1.1。

APR则须要安装第三方库,在高并发下会让性能有明显提高。

Tomcat的四种基于HTTP协议的Connector性能比较

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"                           connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443"/> 
<Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<Connector executor="tomcatThreadPool"
               port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

Connector按照顺序命名为 NIO, HTTP, POOL, NIOP

NIO HTTP POOL NIOP

281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363

10. 使用 Server JRE 替代JDK

服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不须要编译器,代码应该在Release服务器上完成编译打包工做。

理由:一旦服务器被控制,能够防止在其服务器上编译其余恶意代码并植入到你的程序中。

11. Tomcat 安全配置

1. 禁用Tomcat管理页面,删除webapps下面的全部代码,删除conf/Catalina/localhost/下的host-manager.xml和manager.xml这两个文件。

rm -rf /srv/apache-tomcat/webapps/*

2. 注释或删除 tomcat-users.xml 全部用户权限

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
</tomcat-users>

3. 隐藏Tomcat版本信息

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
				maxThreads="8192"
				minSpareThreads="64"
				maxSpareThreads="128"
				acceptCount="128"
				enableLookups="false"
                server="Neo App Srv 1.0"/>

4. 启动用户与端口

建立一个用户,这个用户只用于启动Tomcat

groupadd -g 80 daemon
adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon
chown daemon:daemon -R /srv/*
su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

应用程序的部署和Tomcat启动不能使用同一用户(tomcat被植入web shell程序时,不能建立或编辑应用程序目录下任何内容)

5. 关闭自动部署

unpackWARs="false" autoDeploy="false";防止被植入木马等恶意程序

6. JSESSIONID

修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改成PHPSESSID。

7. 超时自动退出

查看tomcat配置文件server.xml是否有设置connectionTimeout值,设置帐户自动登出。

session超时失效设置

<session-config>  
        <session-timeout>30</session-timeout>  
</session-config>

8. 自定义错误页面

<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.html</location>
</error-page>

9. 禁止列目录(高版本默认已禁止)

编辑tomcat/conf/web.xml配置文件

<init-param>
      <param-name>listings</param-name>
      <param-value>false</param-value>
</init-param>

当WEB目录中没有默认首页如index.html,index.jsp等文件时,不会列出目录内容,直接访问http://ip:8800/webadd。

10. 配置httponly

可在conf/context.xml配置文件中配置

<Context useHttpOnly="true"></context>

而且修改tomcat/conf/web.xml配置文件

<session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
        </cookie-config>
</session-config>

11. 配置cookie加密传输

在web.xml中sesion-config节点配置cookie-config中secure属性,此配置只容许cookie在加密方式下传输。只有当使用https协议链接时cookie才能够被页面访问.

<session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
            <secure>true</secure>
        </cookie-config>
</session-config>

12. HTTPS加密协议

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11Protocol" 
           maxThreads="150" 
           SSLEnabled="true" 
           scheme="https" 
           secure="true" 
           clientAuth="false" 
           sslProtocol="TLS" />
相关文章
相关标签/搜索