Tomcat调优详解

前言java

  在这里告诫一下那些感受本身啥都会的朋友们,其实你会的可能只是皮毛,不要感受这个东西之前已经作过了,就不想去作了nginx

  其实你还远没有达到精通的地步,遇到之前作过的东西,也要用心的再去作一遍,你可能会从中学习到之前没学到的知识点web

1、Tomcat调优主要内容以下:算法

  一、增长最大链接数apache

    配置过Tomcat的同窗,应该都知道这个配置,好多地方也建议你,把这个配置调到最大(1000),若是服务器自己的性能容许的话
  二、调整工做模式
tomcat

    tomcat下工做模式有三种,bio   nio   apr服务器

    bio (blocking I/O):网络

      即阻塞式I/O操做,表示Tomcat使用的是传统的Java I/O操做(即java.io包及其子包)。
      一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源。并发

      tomcat7及如下的版本默认的就是bio模式,在server.xml中的配置就是protocol="HTTP/1.1"运维

    nio (new I/O):

      Java nio是一个基于缓冲区、并能提供非阻塞I/O操做的Java API,所以nio也被当作是non-blocking I/O的缩写。

      它拥有比传统I/O操做(bio)更好的并发运行性能。
      利用 Java 的异步请求 IO 处理,能够经过少许的线程处理大量的请求。

      tomcat8 及以上的版本默认就是这种模式,不须要额外的更改,若是tomcat7想用这种模式的话,就须要把protocol="HTTP/1.1"

      更改成: org.apache.coyote.http11.Http11NioProtocol便可

    apr (Apache Portable Runtime/Apache可移植运行时):

      Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态连接库来处理文件读取或网络传输操做,从而大大地提升Tomcat对静态文件的处理性能。

      Tomcat apr也是在Tomcat上运行高并发应用的首选模式。

      要想Tomcat支持APR的工做模式,就须要提早安装好APR和native,下面会详细介绍这两个工具的安装
  三、启用gzip压缩

    通常状况下,Tomcat不要这样作,为啥呢?由于前面有nginx,nginx作了就能够了
  四、调整JVM内存大小

    先简单的说下jvm的做用,你们都知道(也有不知道的,嘿嘿),Java源代码(.java文件)经由源码编译器生成.class字节码文件,那么剩余的程序运行以后一系列

    过程都是由jvm去完成的,因此能够得知jvm的重要性;在运维过程当中jvm最容易出问题就是内存泄漏,常见的内存泄漏有两种:

    4.1 Java.lang.OutOfMemoryError: PermGen(永久代) space

      这块内存主要是被JVM存放Class、方法和属性值,Class在被Loader时就会被放到PermGen space中,因此若是你的应用中有不少CLASS的话,就极可能出现PermGen space错误,
      这种错误常见在web服务器对JSP进行pre compile的时候。若是你的WEB APP下都用了大量的第三方jar, 其大小
      超过了jvm默认的大小(4M)那么就会产生此错误信息了。
      解决方法: 手动设置MaxPermSize大小
      建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样能够达到减小jar 文档重复占用内存的目的。

    4.2 java.lang.OutOfMemoryError: Java heap(堆内存) space

      主要存放对象,垃圾收集器就是回收这些对象,而后是根据GC算法进行回收

      这种内存溢出为堆内存溢出,其实跟上面那种溢出方式大同小异,均可以经过调整Tomcat的jvm参数来解决,具体的参数设置应该以下:

      -Xms:初始堆的大小,应不大于物理内存的80%

      -Xmx:最大堆的大小,应不大于物理内存的80%,这两个值应保持一致

      -XX:PermSize  这个就是上面第一种错误设置的值,大小应不高于物理内存的7%

       -XX:MaxPermSize   设置的最大的permsize的值应不大于物理内存的15%

      服务器为64位、2G内存: JAVA_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

    4.3 OutOfMemoryError: unable to create new native thread.

      这种错误不太常见,但也是有可能,出现这种问题就稍微比较麻烦了,只是单纯的调大jvm参数,只会拔苗助长,这里我不过多的阐述,

      只是告诫你们,出现这种错误的时候,不要加大jvm参数,要调小jvm参数,具体的标准,请自行查阅文章

      这里说一下若是是其它的bug致使的内存泄漏,就要经过jstack、jmap、jstat自带的工具分析问题,定位到相关代码,让开发解决。
  五、做为Web时,动静分离

    使用Apache或Nginx处理静态资源文件,Tomcat处理动态资源文件。由于Tomcat处理静态资源能力远不如Apache、Nginx,因此能够有效提升处理速度。
  六、尽可能使用较新JDK版本

 

2、APR、native的安装

  APR下载:http://apr.apache.org/download.cgi

相关文章
相关标签/搜索