tomcat性能优化参数
线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下:
- Linux内核的优化
- 服务器资源JVM 配置的优化
- Tomcat参数优化
- Tomcat配置连接器
- 配置负载集群优化
这里着重讲解tomcat参数的优化:server.xml文件,关闭DNS查询、配置最大并发等参数。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测试的基础上来不断的调优分析。
1,vim /usr/local/tomcat/conf/server.xml 优化http 8080访问端口段加入以下优化,再把默认的删掉
真实企业也是一下的参数 不变
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="5000"
minSpareThreads="20"
acceptCount="1000"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
2,Catalina.sh JVM 参数优化,java系统内存优化 ,根据自己虚拟机得内存来优化一下Xms
Xmx Xmn的参数 这里配置的内存不要太大一般位置系统内存的3/1 真实企业系统内存最低要留2个G 其中Xmn为Xmx内存的4/1
如果不配置优化jvm tomcat默认是502
参数添加位置 如下: 其中参数一般有开发人员来配置算出最优值
添加如下内容:vim /usr/local/tomcat/bin/ catalina.sh
CATALINA_OPTS="$CATALINA_OPTS –Xms1024M –Xmx1024M –Xmn512M -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE -DRAMDISK=/ -DUSE_RAM_DISK=ture -DRAM_DISK=true
3,优化server.conf配置文件
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" //最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断 minSpareThreads="100" //Tomcat 初始化时创建的线程数,默认设置 25 prestartminSpareThreads = "true"//在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就无效 maxQueueSize = "100"//最大的等待队列数,超过则拒绝请求 /> <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" //Tomcat 8 设置 nio2 更好,Tomcat 6 、7设置nio更好:org.apache.coyote.http11.Http11NioProtocol connectionTimeout="20000" minSpareThreads="100" maxSpareThreads="1000"最大处理连接数线程 minProcessors="100“同时处理请求的最小数 maxProcessors=“1000”同时处理请求的最大数 maxConnections="1000" redirectPort="8443" enableLookups="false" //禁用DNS查询 acceptCount="100" //指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 maxPostSize="10485760" //以 FORM URL 参数方式的 POST 提交方式,限制提交最大的大小,默认是2097152(2兆),它使用的单位是字节。10485760 为 10M。如果要禁用限制,则可以设置为 -1。 compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" //用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核CPU一般配置为 2. compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/ja vascript" URIEncoding="utf-8" keepAliveTimeout="0" 关闭shutdown端口:<Server port="-1" shutdown="SHUTDOWN"> 关闭ajp连接:注释<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 取消访问日志Valve阀门 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> /> |
4,tomcat配置连接器
Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式
bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O操作(即Java.io包及其子包)。 一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。默认的模式,性能最差,没有经过任何优化处理和支持。
=============================================================================
nio(non-blocking I/O),java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Javanio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。拥有比传统I/O操作(bio)更好的并发运行性能。利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。
#查看日志默认 tail -10 catalina.out
18-Jun-2019 05:30:31.727 INFO [main] org.apache.coyote.AbstractProtocol.start StartingProtocolHandler ["http-nio-8080"]
=============================================================================
apr(apache Portable Runtime/Nginx可移植运行时库),Tomcat将以JNI的形式调用apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。从操作系统级别来解决异步的IO问题,大幅度的提高性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。#修改默认模式为apr模式,Apr 效率最高
要让Tomcat以apr模式来运行,必须安装apr和native
安装apr:
yum -y install apr apr-devel gcc-c++
安装native:
cd /usr/local/tomcat/bin/
wget -c http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.21/source/tomcat-native-1.2.21-src.tar.gz
tar xzfv tomcat-native-1.2.21-src.tar.gz
cd /usr/local/tomcat/bin/tomcat-native-1.2.21-src/native
./configure --with-apr=/usr/bin/apr-1-config#编译之前需要提前部署java 环境
make && make install
整合Tomcat apr:
设置环境变量
方法:在/etc/profile中加入:
export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
source /etc/profile
修改配置文件:vim tomcat/conf/server.xml
修改以下内容:
修改protocol的值为org.apache.coyote.http11.Http11NioProtocol
<Connector port=“8080” protocol=“org.apache.coyote.http11.Http11AprProtocol”
connectionTimeout=“20000”
redirectPort=“8443” />#查看日志默认 tail -10 catalina.out
18-Jun-2019 05:57:04.550 INFO [main] org.apache.coyote.AbstractProtocol.start Starting
ProtocolHandler ["http-apr-8080"]
5,配置多个tomcat实例,方法也很简单,只需要在服务器上cp多个tomcat,然后修改三个端口和发布目录即可,然后分别启动即可。
为了提升整个网站的性能,还需要在tomcat前面架设nginx web反向代理服务器,用以提高用户高速访问。
tomcat性能优化参数的更多相关文章
- tomcat 性能优化
tomcat 性能优化tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. tomcat内存优化linux修改TOMCAT_HOME/bin/ ...
- Tomcat性能优化(转载)
出处:微信订阅号GitChat精品课程 — Tomcat性能优化 Tomcat 简单介绍 Sun 公司创建了第一个 Servlet 容器,即 Java Web Server,但 JWS 只是为了演示 ...
- tomcat 性能优化(内存优化 线程优化)
转自:http://blog.sina.com.cn/s/blog_4b5bc01101014s81.html tomcat 性能优化 linux修改TOMCAT_HOME/bin/catalina. ...
- JVM虚拟机详解+Tomcat性能优化
1.JVM(java virtual mechinal) ()JVM有完善的硬件架构,如处理器.堆栈.寄存器当,还具有相应的指令系统. ()JVM的主要工作时解释自己的指令集(即字节码),并映射到本地 ...
- tomcat性能优化梳理
tomcat性能优化 Tomcat本身优化 Tomcat内存优化 启动时告诉JVM我要一块大内存(调优内存是最直接的方式) 我们可以在 tomcat 的启动脚本 catalina.sh 中设置 jav ...
- Tomcat性能优化之(一) 启动GZIP压缩
Tomcat性能优化之(一) 启动GZIP压缩 1:设置TOMCAT启用GZIP压缩,通过浏览器HTTP访问对应的资源会根据配置进行压缩. <Connector port="8080& ...
- 闲谈Tomcat性能优化
Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. 幸好Tomcat还有很多的提升空间.下文介 ...
- tomcat 性能优化(转)
tomcat nginx默许的post大小限制 tomcat nginx默认的post大小限制执行大文件上传,或者,大数据量提交时,当提交的数据大小超过一定限制时,发现后台从request取值的代码r ...
- Tomcat性能优化及JVM内存工作原理
Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容如下: 1. ...
随机推荐
- 批量给文件去BOM(百度网盘)
链接:https://pan.baidu.com/s/1jC8RkyC0xX1lA-zZjOyDsw 提取码:geko 第一步:浏览你要移除BOM编码的文件夹.第二步:点击移除bom,随后会弹出提示框 ...
- VS下字符串与数组互相装换
1.分割字符串IdStr为int数组Ids int[] Ids = Array.ConvertAll<string, int>(IdStr.Trim().Split(','), deleg ...
- learning scala stream collection
最关键的部分是计算序列的同时,不会引发无限递归, #:: 表达式的右边只有在被请求时才会被求值.
- 利用 BackgroundService 固定时间间隔执行某动作
继承 BackgroundService 类: 为什么会写这个东西呢?本人在写消息队列的时候思考过一个问题——比如,每5秒从队列里面取一条消息(一条消息里面又包含了1000条数据),要把这1000条数 ...
- jQuery网页加载的不同方式
一.window.onload 代码是从上而下执行的,通过window.onload可以使事件在页面加载完毕再执行 注意:window.onload事件多个只会执行最下面的一个,前面的会被覆盖 < ...
- Bzoj 3122 [Sdoi2013]随机数生成器(BSGS+exgcd)
Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意:P一定为质数 Outp ...
- P1143 进制转换
漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P1143 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入输出格式 输入格式: 输入数据共 ...
- Linux 网络性能测试工具 iperf 的安装和使用
简介:Iperf是一个网络性能测试工具.可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失.Iperf在Linux和windows平台 ...
- SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy
问题与分析 某日忽然发现在用postman测试数据时报错如下: com.fasterxml.jackson.databind.JsonMappingException: could not initi ...
- python学习:模块(第一节)
1.什么是模块? 如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这 ...