Tomcat提高并发量,性能优化

2023-11-04

系统采用的常用框架 Mysql +SSM+Tomcat结构,测试工具使用的是Jmeter。

  刚开始测试,并发量为200/s,居然错误率达到了15%,让我很郁闷。按Tomcat的性能200的并发量应该完全没问题,于是我搜了一下提高Tomcat并发量的资料,重新配置了一下,提高了Tomcat的性能。如下:

1.在Tomcat目录的bin/catalina.bat,打开这个文件,在前面添加一下配置

   jvm在client模式,进行内存回收时,会停下所有的其它工作,带回收完毕才去执行其它任务,在这期间eclipse就卡住了。所以适当的增加jvm申请的内存大小来减少其回收的次数甚至不回收,就会是卡的现象有明显改善。  

 可以给Java虚拟机设置使用的内存,但是如果你的选择不对的话,虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来设置虚拟机使用内存的大小。

 参数      描述

-Xms      JVM初始化堆的大小

-Xmx      JVM堆的最大值

这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用程序在大负载 的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,虚拟机就必 须重复地增加内存来满足使用。

由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用 有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值 的80%。

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。

JAVA_OPTS='-Xms【初始化内存大小】

-Xmx【可以使用的最大内存】'

需要把这个两个参数值调大。

Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:

主要功能为JVM性能参数调优

rem 以下配置为JVM参数调优
set JAVA_OPTS=
-server     rem 以服务器模式启动,启动速度慢,但更稳定,性能更好
-Xms8192M   rem 由于本机内存为16G,这里就设置成8G(实际并未达到最大内存的80%)
-Xmx8192M   rem -Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-Xss512k 
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:PermSize=64M    rem 内存永久保留区域 
-XX:MaxPermSize=300M     rem 内存永久保留区域 
-XX:+DisableExplicitGC  rem 禁止System.gc(),免得误调用gc方法影响性能
-XX:MaxTenuringThreshold=31 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC   rem 对年轻代采用多线程并行回收,这样收得快;
-XX:+CMSParallelRemarkEnabled  rem 带CMS相关的是并发回收(CMS垃圾收集器)
-XX:+UseCMSCompactAtFullCollection  rem 带CMS相关的是并发回收(CMS垃圾收集器)
-XX:LargePageSizeInBytes=128m  
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly rem 带CMS相关的是并发回收(CMS垃圾收集器)
-Djava.awt.headless=true



1).JAVA_OPTS'-Xms256m-Xmx512m' 

表示初始化内存为256MB,可以使用的最大内存为512MB。

另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分 析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很 快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的 大小设大,保证垃圾收集不在整个基准测试的过程中出现。

 如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详 细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的80%作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾 收集不是并行的。

2.打开conf/server.xml,并更改一下内容

maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码

<!-- 调优之前的配置 tomcat默认配置
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
	-->
<!-- 调优之后的配置 -->
    <Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"  
           minSpareThreads="25" 
           maxSpareThreads="75"
           enableLookups="false" 
           disableUploadTimeout="true" 
           connectionTimeout="20000"
           acceptCount="300"   
           maxThreads="300" 
           maxProcessors="1000" 
           minProcessors="5"
           useURIValidationHack="false"
           compression="on" 
           compressionMinSize="2048"
           compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
           redirectPort="8443"/>

保存后,启动tomcat进行压力测试。结果最后错误率还是没有改变(这里其实Tomcat的并发性能已经提高了)

3.我想可能是mysql数据的连接问题,于是编辑了数据库连接文件datasource.properties,将最大连接数与最长等待空间编辑如下

#初始连接数
db.initialSize = 20  
#定义最大连接数
db.maxActive = 200
#定义最大空间
db.maxIdle = 20
#定义最小空间
db.minIdle = 10
#定义最长等待时间
db.maxWait = 2000
db.defaultAutoCommit = true
db.minEvictableIdleTimeMillis = 3600000

最后测试结果,系统性能明显提高,并发量增大并且稳定

测试为每秒500次请求同一个接口,测试次数10次,5000次请求成功,且返回数据无丢失。

并发量500无压力,并发量800无压力。

当并发量达到1000时,查看结果报告,1000次中出现三次请求失败。

4.经过以上配置,提高了系统性能,并发量接近1000次/s
————————————————
版权声明:本文为CSDN博主「袁缺」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wepwq70900/article/details/88528120

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat提高并发量,性能优化 的相关文章

  • 校园网开热点显示无Internet连接和360免费WiFi猎豹WiFi冲突解决办法

    校园网开不了热点或者用360免费WiFi发生冲突 问题 校园网 连接后有网络显示无Internet连接 也开不了热点 解决方法 方法一 使用像360免费WiFi类的软件进行开热点 同时你需要开启校园网模式 开启校园网模式 校园网模式可以避免
  • 与fo论禅汇总

    与佛论禅网络上现在共包含三个版本 与佛论禅 与佛论禅 与佛论禅重制版 与佛论禅重制版 Takuron 新与佛论禅 新约佛论禅 佛曰加密 PcMoe 有几个注意点 1 别拿百度引擎 翻墙拿谷歌 2 三个网站的使用逻辑不同 加密解密的输入框不一
  • Zookeeper已经分布式环境中的假死脑裂

    Zookeeper简介 在上班之前都不知道有这样一个东西 在开始说假死脑裂之前先说说Zookeeper吧 Zookeeper zookeeper是一个分布式应用程序的协调服务 它是一个为分布式应用提供一致性服务的软件 提供的性能包括 配置维
  • 基本数据类型强制转换问题-值的截断和内存的截断

    1 double a1 22 32 int b1 int a1 2 double a2 2 5e20 int b2 int a2 按照浮点数到整数的转换语义 结果应该截去浮点数的小数部分 而保留整数部分 所以b1应该为22 而b2则超出了其
  • 刷脸支付可针对客户做二次营销活动

    随着智能手机和WIFI的普及 80 的顾客都不再拿钱包 而是掏出手机付款 大到商店小到早点摊菜市场 只要拿出手机轻轻一扫 便可以完成整个购买流程 而如今 支付4 0时代已经到来 基于生物识别技术 不用手机 万物可付 李嘉诚说 当一项新鲜事物
  • MySQL高级篇-第06章_索引的数据结构

    1 为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构 就好比一本数课书的目录部分 通过目录中找到对应文章的页码 便可快速定位到需要的文章 MySQL中也是一样的道理 进行数据查找时 首先查看查询条件是否命中某条索引 符合则通
  • 找第一个只出现一次的字符c++

    找第一个只出现一次的字符 提交数 3563 通过率 43 14 平均分 61 55 题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 如果没有 输出no 输入格式 一个字符串 长度小于100000 输出格式 输出第一
  • rabbitmq初学之连接测试

    最近在搞接口 需要用到rabbitmq 在公司搞了一个下午还是连接不上 后来细看了英文说明 测试连接成功 得出如下报错几点 我用的安装包 otp win64 17 0 exe erlang vm 和rabbitmq server 3 3 1
  • 消息队列-kafka入门详解

    本文适用于初学者 学习kafka之前 应该都知道它是消息队列 但是和我们印象中数据结构的队列不同的是 它持久化到磁盘上 1 我们首先从定义来看 Kafka 一个分布式的 分区化 可复制提交的日志服务 我们先来想想什么是分区 好比图书馆的书
  • pcb过孔与电流对照一览表_PCB设计项目能不能成功,这个因素占了30%

    电源平面的处理 在PCB设计中占有很重要的地位 在一个完整的设计项目中 通常电源的处理决定项目的30 50 的成功率 本次给大家介绍在PCB设计过程中电源平面处理应该考虑的基本要素 1 做电源处理时 首先应该考虑其载流能力 其中包含2个方面
  • QT-通用的软件界面框架,好看且实用

    QT 通用的软件界面框架 好看且实用 前言 一 演示效果 二 配置说明 三 关键程序 四 程序下载 前言 常规软件开发 使用这种界面框架 基本是可以做很多个常规项目 比较有参考意义 本次软件使用开发的环境是QT5 13 2 VS2017 不
  • House Man 【HDU - 3440】【差分约束】

    题目链接 就是我们必须跳N 1次 从最小的房子跳到最高的房子 然后呢 求最小的房子和最高的房子之间的最长的可能距离 那么就是差分约束咯 我们可以这么推 首先 对于所有的点 a i a i 1 gt 1 那么转换一下 就是a i 1 a i
  • vue 从后端取图片返回发现是两张,但自己只要一张图片 怎么操作

    1 用JavaScript里边常用的分隔符去操作 item original status user profile image url split 0
  • Redis的hyperloglog

    互联网名词 什么是UV Unique Visitor 独立访客 一般理解为客户端IP 需要去重考虑 什么是PV Page View 页面浏览量 不用去重 什么是DAU Daily Active User 日活跃用户量 登录或者使用了某个产品
  • 【7】Docker中部署RabbitMQ

    1 拉取镜像 docker pull rabbitmq 3 8 5 根据我之前在VMware的Centos中装过的 rabbitmq 版本来拉取 3 8 5 的版本 拉取指定版本 3 8 5 的 rabbitmq 镜像 2 守护方式 创建容
  • 最大化参数 火车头_火车头多少吨

    展开全部 火车头的重量一般是126 132吨 最重的是韶山4型改进型车头 重量为184吨 车型62616964757a686964616fe58685e5aeb931333433623735不同而所用的火车头型号也不尽相同 重量也有所差异
  • 代码随想录算法训练营打卡第一天

    代码随想录算法训练营第1天 Leetcode704 二分查找 27 移除元素 704 二分查找 视频链接 https www bilibili com video BV1fA4y1o715 第一遍读题思考 五分钟内 如果没有思路就写暴力解法
  • [C++11]独占的智能指针unique_ptr的初始化和使用

    std unique ptr 是一个独占型的智能指针 它不允许其他的智能指针共享其内部的指针 可以通过它的构造函数初始化一个独占智能指针对象 但是不允许通过赋值将一个 unique ptr 赋值给另一个 unique ptr std uni
  • C++小作业——简单通讯录设计

    界面展示 1 菜单界面 2 添加联系人 选择按钮1 3 显示联系人 选择按钮2 会显示当前通讯录里面的所有联系人信息 include
  • 知识蒸馏算法汇总

    知识蒸馏有两大类 一类是logits蒸馏 另一类是特征蒸馏 logits蒸馏指的是在softmax时使用较高的温度系数 提升负标签的信息 然后使用Student和Teacher在高温softmax下logits的KL散度作为loss 中间特

随机推荐