tomcat8.5 优化
第一步:配置user登录tomcat
参考:https://www.cnblogs.com/kevincaptain/p/10370794.html
第二步:性能优化
2.1tomcat的运行模式有3种:
bio:
tomcat7.0默认的模式,性能非常低下,没有经过任何优化处理和支持.
阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。 nio:
tomcat8以上默认的模式, nio(new I/O),是Java SE .4及后续版本提供的一种新的I/O操作方式(即Java.nio包及其子包)。java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能。 apr:
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。
如果是tomcat7.0可以通过server.xml修改模式
修改server.xml里的Connector节点,
vim conf/server.xml
<Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
修改成:
<Connector port="" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout=""
redirectPort="" />
2.2执行器优化(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
Executor中打开注释:
在Connector中指定使用共享线程池:
Executor重要参数说明:
name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;
namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
maxThreads:该线程池可以容纳的最大线程数。默认值:;
maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:(一分钟)。
minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:。
threadPriority:线程的等级。默认是Thread.NORM_PRIORITY Connector重要参数说明:
executor:表示使用该参数值对应的线程池;
minProcessors:服务器启动时创建的处理请求的线程数;
maxProcessors:最大可以创建的处理请求的线程数;
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
2.3禁用AJP连接器
JP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。
在管理界面中看不到ajp了:
2.4启用apr模式步聚
Requirements:
APR 1.2+ development headers (libapr1-dev package)
OpenSSL 1.0.+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)
2.4.1、安装依赖库
因为apr模式本质是使用JNI技术调用操作系统IO接口,需要用到相关API的头文件
yum install -y apr-devel openssl-devel gcc make
注意:openssl库要求在0.9.7以上版本,APR要求在1.2以上版本,用rpm -qa | grep openssl检查本机安装的依赖库版本是否大于或等于apr要求的版本。
2.4.2、安装apr动态库
进入tomcat的bin目录
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.2.21-src/native
./configure && make && make install
2.4.3、配置APR本地库到系统共享库搜索路径中
编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
2.4.4修改模式为apr
<Connector port="" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout=""
redirectPort=""
maxThreads=""
minSpareThreads=""
maxSpareThreads=""
acceptCount=""
maxIdleTime=""
enableLookups="false"
SSLEnabled="false"
/>
Tomcat的并发请求处理数量=maxThreads + acceptCount
protocol:启用APR连接模式,提高异步IO处理性能。启用配置请参考:《开启Tomcat APR运行模式,优化并发性能》
maxThreads:最大能接受的请求数,默认为200
minSpareThreads:最少备用线程数,默认初始化,默认为25
maxSpareThreads:最多备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
acceptCount:等待处理的请求队列,默认为100,超过队列长度,服务器则拒绝客户端请求,直接返回403
maxIdleTime:如果一个线程在30秒以内没有活跃,则终止运行并从线程池中移除。除非线程池数量小于或等于minSpareThreads数量。默认值是1分钟
enableLookups:如果为true,调用request.getRemoteHost会执行DNS反查,反向解析IP对应的域名或主机,效率较低,建议设为false。
更多参考:http://tomcat.apache.org/tomcat-8.5-doc/apr.html#Linux
JVM内存配置优化
在开发当中,当一个项目比较大时,依赖的jar包通常比较多,我们都知道,在应用服务器启动时,会将应用引用到的所有类通过ClassLoader依次全部加载到内存当中。Java的逻辑内存模型大致分为堆内存、栈内存、静态内存区,也称持久区,该区的内存不会被GC回收。堆内存用于存储类的实例、数组等引用类型数据,也就是用new生成的对象,都存放在这里,栈内存存储局部变量(如:方法参数),静态内存区存储常量、静态变量、类元数据信息(方法、属性等)。开发当中常遇到的三类内存溢出异常:
java.lang.OutOfMemoryError: Java heap space异常
表示堆内存空间满了,如果不是程序逻辑的bug,可能是因为项目中引用的jar比较多,导到内存溢出。JVM默认堆的最小使用内存为物理内存的1/64,最大使用内存为物理内存的1/4,如8G的物理内存,JVM默认堆的最小和最大内存分别为128m和2048m。通过调整JVM的-Xms(初始内存)和-Xmx(最大内存)两个参数加大内存使用限制。
java.lang.OutOfMemoryError: PermGen space异常
表示静态内存区满了,通常是由于加载的类过多导致。jdk8以下版本通过修改JVM的-XX:PermSize和-XX:MaxPermSize两个参数,限制静态区最小和最大内存范围。jdk8改变了内存模型,将类定义存放到了元数据(MetaspaceSize)空间,而元数据空间是与堆空间共享同一块内存区域的,所以在JDK8以后版本不会存在PermGen space异常了,故不用设置此参数。
java.lang.StackOverflowError异常
表示栈内存溢出。通常是由于死循环、无限递归导致。
修改Tomcat的内存配置,打开$TOMCAT_HOME/bin/catalina.sh文件(Windows系统是catalina.bat文件),大楖在250行左右,在JAVA_OPTS参数上添加内存参数设置即可。完整的JVM参数设置如下所示:
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256 -Djava.awt.headless=true" -server参数:表示以服务模式启动,启动速度会稍微慢一点,但性能会高很多。不加这个参数,默认是以客户端模式启动。
java.awt.headless=true参数:与图形操作有关,适用于linux系统。如生成验证码,含义是当前使用的是没有安装图安装图形界面的服务器,应用中如果获取系统显示有关参数会抛异常,可通过jmap -heap proccess_id查看设置是否成功。
-Xmx:java heap最大值,使用的最大内存,上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
tomcat8.5 优化的更多相关文章
- 【转】史上最强Tomcat8性能优化
https://blog.csdn.net/ThinkWon/article/details/102744033 文章目录授人以鱼不如授人以渔目的服务器资源Tomcat配置优化Linux环境安装运行T ...
- tomcat8 的优化
1.下载tomcat8 2.配置 修改tomcat_user.xml,配置管理用户(设置角色,和用户密码) <role rolename="manager"/> < ...
- tomcat8性能优化
在tomcat/catalina.sh中加入下面的配置,内存要根据机器实际情况配置,如果配置内存太大了有可能机器很慢. JAVA_OPTS="-server -Xms512m -Xmx512 ...
- tomcat8.5优化配置
参考文章: https://www.cnblogs.com/steven-snow/p/9262025.html 1.Tomcat内存使用调整 windows系统在bin/catalina.bat文件 ...
- tomcat8 JVM 优化
在Linux环境下设置Tomcat JVM,在/opt/tomcat/bin/catalina.sh文件中找到"# ----- Execute The Requested Command&q ...
- tomcat8 性能优化
一.编辑配置文件:vim /opt/tomcat/conf/server.xml打开默认被注释的连接池配置:默认值: <!-- <Executor name="tomcatThr ...
- Request 根据用户输入的信息获取输入到控制台
html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Tomcat8安装, 安全配置与性能优化(转)
一.Tomcat 安装 官网:http://tomcat.apache.org/ Tomcat8官网下载地址:http://tomcat.apache.org/download-80.cgi 为了便于 ...
- Tomcat8安装, 安全配置与性能优化
一.Tomcat 安装 官网:http://tomcat.apache.org/ Tomcat8官网下载地址:http://tomcat.apache.org/download-80.cgi 为了便于 ...
随机推荐
- 日系插画学习笔记(一):SAI软件基础
检测驱动是否安装正确:1.画笔没有压感,线条没有粗细变化2.画笔线条有锯齿 一.文件:新建文件:预设尺寸:一般选择A3(8k),A4(16k),A5(32k)作业要求:A4A5 - 300dpi,像素 ...
- Google advertiser api开发概述
对象.方法和服务 AdWords API 主要供 AdWords 的高级用户使用.如果您是 AdWords 新手,或需要复习 AdWords 基本概念,请查看 AdWords 基础知识页面. 对象层级 ...
- 1、Python中的正则表达式(0601)
回顾: 1.文件对象: open('file','mode','bufsize') read,readline,readlines,write,writelines,flush,seek,tell 2 ...
- CSS属性大全
字体属性:(font)大小 font-size:x-large;(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD样式 font-style:oblique;(偏 ...
- IntelliJ IDEA java selenium
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler ...
- 【Python】【有趣的模块】【Requests】无状态 & 无连接
无状态:原来的Web是静态,后来换成动态的就需要保存一些上下文信息,session和cookie应运而生 无连接:原来为了请求结束后赶紧把资源让出去,后来发现每次请求中有相同的小请求时候再重复执行(而 ...
- node.js中的http.response.end方法使用说明
转载自:http://m.jb51.net/article/58468.htm 本文介绍了http.response.end的方法说明.语法.接收参数.使用实例和实现源码,需要的朋友可以参考下 方法说 ...
- Django中ORM简介与单表数据操作
一. ORM简介 概念:.ORM框架是用于实现面向对象编程语言种不同类型系统的数据之间的转换 构建模型的步骤:重点 (1).配置目标数据库信息,在seting.py中设置数据库信息 DATABASE ...
- P359 usestock2.cpp
IDE Qt Creator 4.0.3 stock.h #ifndef STOCK_H #define STOCK_H #include <string> class Stock //类 ...
- 神兽保佑代码无bug O(∩_∩)O
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...