tomcat优化

Activiti  分享牛  2017-02-08  1132℃

本文重点讲解tomcat的优化。

基本优化思路:

1.         尽量缩短单个请求的处理时间。

2.         尽量多的处理并发的请求能力。

3.         一定要做到横向的扩展。

1.1  tomcat优化

tomcat默认的配置已经是经过优化的,留给开发人员优化的空间很小。主要调整的参数如下(实际项目开发中可以根据如下的参数进行测试):

1.1.1           虚拟机优化

根据机器的配置合理的分配tomcat内存。内存的配置在Tomcat启动的时候可以通过catalina.sh脚本中的JAVA_OPTS进行相应的设置。常见的配置如下:

 -server 启用jdk 的 server 版; 
  -Xms Java虚拟机初始化时的最小内存; 
  -Xmx java虚拟机可使用的最大内存(建议设置到物理内存的80%); 
  -XX: PermSize 内存永久保留区域 
  -XX:MaxPermSize 内存最大永久保留区域(默认32M) 。

-XX:MaxNewSize 新生代内存的最大内存(默认16M)

需要注意:Xms 与Xmx最好一致,以避免每次虚拟机GC调整堆的大小。因为默认的空余堆内存小于40%时,JVM就会增大堆的空间,一直到-Xmx的最大限制。空余堆内存大于70%时,JVM就会减少堆的空间,一直到- Xms 的最大限制。

PermSize,MaxPermSize两个参数tomcat8中无需指定。从java8 之后,这两个参数的值如果内存不够,他可以自动扩充,另外,你修改变量值最好不要修改自带的catalina.sh,等脚本,官方说了,新建setenv.sh,每次启动关闭,都会自动调用这个去处理变量问题

观察配置是否生效,可以通过 jmap –heap tomcat的进程号。

我的配置如下:

JAVA_OPTS=" -Xms512m -Xmx8192m -XX:MaxPermSize=256m "

启动tomcat命令如下:

./catalina.sh run

查看tomcat的端口号:

ps -ef|grep /usr/local/devsoftware/apache-tomcat-8.5.11/bin

验证配置的变量是否生效,使用命令如下:

jmap -heap 3503

程序的输出如下图所示

通过上图可知,配置的变量已经生效。

1.1.2           tomcat优化

tomcat中 server.xml 中Connector的配置,常见的属性如下:

1)   maxConnections:最大连接数。Bio模式中默认值等于maxThreads。Nio模式中默认值为10000。对于APR/native默认值为8192。

2)   maxThreads:最大线程数。即同时处理任务的个数,默认为200。

3)   acceptCount:当处理任务的线程达到最大个数的时候,接受排队的请求格式,默认100。

4)   minSpareThreads:最小空闲线程个数,默认为10。

5)   compression:是否开启gzip压缩。

6)   compressableMimeType:哪些类型需要压缩,默认为text/html,text/xml,text/css,text/plain。

7)   compressionMinSize:启用压缩的输出内容大小,默认2048。

8)   enableLookups:是否开启反查域名,为了提高处理速度应该设置该值为false。

9)   connectionTimeout:网络连接超时时间,单位为毫秒。设置为-1则表示永远不超时,通常设置2000即可。

一、使用注意:如果为了提高并发量,需要提高设置maxThreads和acceptCount,通常两者设置一样即可。WebServer允许的最大连接受制于服务器的处理能力,可以通过ulimit –a命令进行查看。

二、如果配置了Executor ,那么以Executor 属性值为准。

本案例的配置如下:

<Connector port="8080" protocol="HTTP/1.1"

redirectPort="8443"

 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"

disableUploadTimeout="true"/>

1.1.3           BIO/NIO/APR

1.         BIO是最老的最稳定的(默认)的一个连接器。采用阻塞的方式工作。意味着每个连接线程绑定到每一个Http请求。知道Http返回为止。如果Http客户端的请求的是keep-alive连接,那么这些连接会一直保持着知道timeout(过期)。这期间他不会处理任何的请求。

2.         NIO使用Java中的异步IO处理技术,不做阻塞。如果要想使用该方式则可以修改protocol属性值为org.apache.coyote.http11.Http11NioProtoco。

3.         APR采用原生的c语言IO处理技术,但是需要安装apr和native,直接启动tomcat就支持apr。使用的时候需要设置protocol属性值为org.apache.coyote.http11.Http11AprProtocol。

a)         安装apr

其中apr的下载地址为:http://apr.apache.org/download.cgi

本文使用的apr版本为apr-1.5.2.tar.gz。

将其解压然后

cd apr-1.5.2

./configure --prefix=/usr/local/devsoftware/apr

make make install

即可完成安装

b)        安装apr-iconv

cd apr-iconv-1.2.1

./configure  --prefix=/usr/local/devsoftware/apr-iconv --with-apr=/usr/local/devsoftware/apr

make make install

即可完成安装

c)         安装apr-utils

cd apr-util-1.5.4

./configure  --prefix=/usr/local/devsoftware/apr-util --with-apr=/usr/local/devsoftware/apr --with-apr-iconv=/usr/local/devsoftware/apr-iconv

make make install

即可完成安装

d)        安装tomcat-native 首先进入tomcat的bin目录

tar -zxvf  tomcat-native.tar.gz

cd tomcat-native-1.2.10-src

cd /usr/local/devsoftware/apache-tomcat-8.5.11/bin/tomcat-native-1.2.10-src/native

./configure --with-apr=/usr/local/devsoftware/apr

make make install

即可完成安装

e)         设置apr环境变量

进入tomcat的bin目录,打开catalina.sh。然后在#!/bin/sh中添加如下内容:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/devsoftware/apr/lib。当然了为了保持tomcat的独立性,配置在期望使用的tomcat最好不过。

再次启动tomcat,如果以上环节安装成功,输出的日志为:

08-Feb-2017 05:38:55.303 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: :/usr/local/devsoftware/apr/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

tomcat优化(转)的更多相关文章

  1. tomcat优化

    tomcat优化:vim catalina.sh添加:JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -X ...

  2. windows tomcat 优化

    windows tomcat 优化 1.  tomcat conf server.xml 在server.xml中修改以一部分,增加节点数目,可以很好的提高性能: <Connector port ...

  3. Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法

    Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...

  4. tomcat优化-有改protocol 和 缓存 集群方案

    tomcat优化 在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验. 1. 服务器资源 服务器所能提供CPU.内存.硬 ...

  5. tomcat 优化配置 java-8 tomcat-7

    tomcat 优化配置 , 说明 一.并发优化 1.JVM调优 以下为1G物理内存tomcat配置: JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256 ...

  6. Tomcat 优化方案 和 配置详解(转)

    转自 Tomcat 优化方案 和 配置详解 http://201605130349.iteye.com/blog/2298985 Server.xml配置文件用于对整个容器进行相关的配置. <S ...

  7. Tomcat优化之容易集合经验

    Tomcat优化1. 如何加大tomcat连接数在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有: maxThreads : t ...

  8. tomcat优化实例

    ———————————————————————————————————— 一.运行模式优化 修改tomcat运行模式为nio<Connector port="80" prot ...

  9. tomcat优化之安装并配置apr库

    在谈到tomcat优化时,必然要说到apr库,这个库是C语言实现的,tomcat通过JNI方式使用该库可以大大提高性能. tomcat在使用apr时需要安装apr,apr-util和tomcat-na ...

  10. tomcat优化和JVM修改内存

    Tomcat中的线程池(APR和ThreadPool) 2. 在Connector中指定使用共享线程池: <Connector executor="tomcatThreadPool&q ...

随机推荐

  1. JMeter学习(三十六)发送HTTPS请求(转载)

    转载自 http://www.cnblogs.com/yangxia-test Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程 ...

  2. logic:equal 标签的使用(转)

    <logic:equal name="music" property="distrubute" value="true">    ...

  3. char和varchar查询速度、存储空间比较详解(转)

    转:http://tech.diannaodian.com/dw/data/sql/2011/1005/135572.html 一.数据行结构 1.char(n): 系统分配n个字节给此字段,不管字段 ...

  4. Django的几种缓存的配置

    1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会 ...

  5. FZU-1752.(A^B mod C)(快速幂与快速乘优化)

    我把自己演哭了... 心酸.jpg 写了很多个版本的,包括数学公式暴力,快速幂TLE等等,最后想到了优化快速幂里的乘法,因为会爆longlong,但是和别人优化的效率简直是千差万别...? 本题大意: ...

  6. HDU-1002.大数相加(字符串模拟)

    本题大意:给出两个1000位以内的大数a 和b,让你计算a + b的值. 本题思路:字符串模拟就能过,会Java的大佬应该不会点进来...... 参考代码: #include <cstdio&g ...

  7. C#的扩展方法解说

    扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型. 为数据类型的添加一个方法的理解:一般来说,int数据类型有个Tostring的 ...

  8. 【mysql】字段支持JSON类型

    mysql从5.7开始已经支持JSON类型的字段. 支持的操作:添加,修改,置空,子key添加,子key重置,子key删除,通过子key查找等. 但是这里和普通字段的修改和查找不同,涉及到一些JSON ...

  9. 【校招面试 之 网络】第3题 HTTP请求行、请求头、请求体详解

    1.HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE.HEA ...

  10. 宝塔Linux面板 概述

    安装要求: Python版本: 2.6/2.7(安装宝塔时会自动安装) 内存:128M以上,推荐512M以上(纯面板约占系统10M内存) 硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间) 系 ...