zoukankan      html  css  js  c++  java
  • Tomcat调优详解

    前言

      在这里告诫一下那些感觉自己啥都会的朋友们,其实你会的可能只是皮毛,不要感觉这个东西以前已经做过了,就不想去做了

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

    一、Tomcat调优主要内容如下:

      1、增加最大连接数

        配置过Tomcat的同学,应该都知道这个配置,好多地方也建议你,把这个配置调到最大(1000),如果服务器本身的性能允许的话
      2、调整工作模式

        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,下面会详细介绍这两个工具的安装
      3、启用gzip压缩

        一般情况下,Tomcat不要这样做,为啥呢?因为前面有nginx,nginx做了就可以了
      4、调整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自带的工具分析问题,定位到相关代码,让开发解决。
      5、作为Web时,动静分离

        使用Apache或Nginx处理静态资源文件,Tomcat处理动态资源文件。因为Tomcat处理静态资源能力远不如Apache、Nginx,所以可以有效提高处理速度。
      6、尽量使用较新JDK版本

    二、APR、native的安装

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

  • 相关阅读:
    HDU 4348 To the moon(可持久化线段树)
    HDU 5875 Function 大连网络赛 线段树
    HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
    HDU 5876 大连网络赛 Sparse Graph
    HDU 5701 中位数计数 百度之星初赛
    CodeForces 708B Recover the String
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    ASP.NET生成验证码
    ASP.NET生成验证码
    ASP.NET生成验证码
  • 原文地址:https://www.cnblogs.com/madq-py/p/9641647.html
Copyright © 2011-2022 走看看