打赏

tomcat优化

Tomcat 运行环境介绍
1.Tomcat 本身无法直接在计算机上运行,需要依赖硬件基础上的操作系统和Java虚拟机;
2.Java 程序启动时JVM都会分配一个初始内存和最大内存给这个应用;
3.当应用程序用到最大内存的时刻,就会触发JVM做垃圾回收(GC)动作,释放被占用的内存;
4.因此想要调整Java程序启动时的初始内存和最大内存,需要向JVM申请;
5.如果初始内存大小设置过小,且此时初始化的应用对象过多,虚拟机就必须重复的加载内存来满足使用;
6.基于以上原因,最好把初始内存大小(Xms)和最大内存(Xmx)设置成一样;
7.JVM上所有的对象都在"""堆区(heap)"""上分配内存(也有在"栈"上分配内存的)
8.堆区的大小是可以动态扩展的,但"""堆"""的大小受限于系统使用的物理内存,当应用程序需要的内存超出"堆"的最大值时,JVM虚拟机就会抛出内存溢出异常,并且导致应用程序奔溃;
9.基于以上原因,建议“堆”的大小设置成物理内存的80%

1、内存优化

Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。

 JAVA_OPTS参数说明 
  -server 启用jdk 的 server 版; 
  -Xms java虚拟机初始化时的最小内存; 
  -Xmx java虚拟机可使用的最大内存; 
  -XX: PermSize 内存永久保留区域 
  -XX:MaxPermSize 内存最大永久保留区域 

建议配置:

   对于服务器内存2G来说 ,所以可以采取以下配置:

  JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’

  配置完成后可重启Tomcat ,通过以下命令进行查看配置是否生效: 
  看到Tomcat 进程号是 15242 。 
  查看是否配置生效:
  sudo jmap – heap 15242
  我们可以看到MaxHeapSize 等参数已经生效。

2、并发优化

调整连接器connector的并发处理能力;在Tomcat 配置文件 server.xml 中的

<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  minProcessors="100"
  maxProcessors="1000"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>
View Code

参数说明:

   maxThreads 客户请求最大线程数 
  minSpareThreads Tomcat初始化时创建的 socket 线程数 
  maxSpareThreads Tomcat连接器的最大空闲 socket 线程数 
  enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名 
  redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口 
  acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads ) 
  connectionTimeout 连接超时 
  minProcessors 服务器创建时的最小处理线程数 
  maxProcessors 服务器同时最大处理线程数 
  URIEncoding URL统一编码

3、缓存压缩优化

打开tomcat的压缩功能;tomcat的压缩优化就是将返回的html页面等内容经过压缩,压缩成gzip格式之后,发送给浏览器,浏览器在本地解压缩的过程。

<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="100"
  maxSpareThreads="1000"
  minProcessors="100"
  maxProcessors="1000"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>
View Code

其中:

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

缓存策略:

开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推动整体性能。

    ①浏览器第一次请求tomcat服务器某资源

    ②tomcat查询到该资源,并将该资源最后修改的时间保存在响应头的Last-Modified中 (Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT) 

    ③浏览器第二次访问tomcat请求该资源,并将之前该资源的最后修改时间放入If-Modified-Since请求头中

    ④服务器收到该请求,比较该请求中的If-Modified-Since与资源最后修改时间Last-Modified是否一致,如果一致则不向其发送该资源并向其发送响应代码304告诉其去本地取缓存。

4、安全优化

#降权启动

以普通用户启动tomcat,降权启动,防止不法分子通过tomcat获得root权限。

#修改端口号

修改tomcat配置文件server.xml中的全球人都知道的http连接器端口号,防止黑客攻击。

#更改关闭Tomcat的指令

   这个端口是有安全隐患的,直接Telnet远程连接主机,输入shutdown即可关闭tomcat。

shown端口是写在Server参数里的,直接去掉是不管用,也是会默认启动的,一般在安全设置时候建议把端口修改为其他端口,shutdown修改为其他复杂字串。实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1即可:
<Server port="-1" shutdown="SHUTDOWN">

#修改管理员用户名,密码

修改tomcat-user.xml中默认的Manager用户名和密码

  <?xml version=’1.0’ encoding=’utf-8’?>
                   <tomcat-users>
                       <role rolename=”manager”/>
                            <user username=”temobi” password=”temobi8090” roles=”manager”/>
                  </tomcat-users>

#清空站点目录下ROOT下管理页面等文件

 ROOT下有一些站点的管理程序可以查看tomcat的各种信息及配置,因此我们需要清空这些文件或者将站点目录更改。

 生产环境一般不适用Tomcat默认的管理界面,这些页面存放在Tomcat 的webapps安装目录下,
          把该目录下的所有文件删除即可:rm -rf  /usr/local/tomcat8/webapps/*

5、数据库性能调优

      Tomcat性能在等待数据库查询被执行期间会降低。如今大多数应用程序都是使用可能包含“命名查询”的关系型数据库。如果是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提升性能。

另一件重要事是确保所有数据库连接正确地关闭。给数据库连接池设置正确值也是十分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。

因为配置依赖与应用要求,我也不能在本文指定正确的值。你可以通过调用数据库性能测试来找到正确的值。  

6、其他优化

#错误页面优雅显示

#隐藏版本号

#禁用DNS查询

      当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。

为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值改为false:enableLookups="false"

#设置session过期时间

Tomcat采用数据库连接池技术,当用户在一定时间不对数据库有操作时间后,就自动关闭这个连接,这是为了更好的利用资源,防止浪费宝贵的数据库连接资源。

以下是设置session时间的3个方法:
  1. 在tomcat——>conf——>servler.xml文件中定义:
  <Context path="/test" docBase="/test"
  defaultSessionTimeOut="3600" isWARExpanded="true"
  isWARValidated="false" isInvokerEnabled="true"
  isWorkDirPersistent="false"/> 
  defaultSessionTimeOut="3600"
  2. 项目所在目录下的 web.xml中定义:
  <session-config>
  <session-timeout>20</session-timeout>
  </session-config>
  3. 在程序中定义:
  session.setMaxInactiveInterval(30*60);
  设置单位为秒,设置为-1永不过期

 

posted @ 2018-03-29 10:36  芹溪  阅读(7606)  评论(0编辑  收藏  举报