精华内容
下载资源
问答
  • Tomcat的性能200的并发量应该完全没问题,于是我搜了一下提高Tomcat并发量的资料,重新配置了一下,提高了Tomcat的性能。如下: 1.在Tomcat目录的bin/catalina.bat,打开这个文件,在前面添加一下配置 jvm在...

    系统采用的常用框架 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次中出现三次请求失败。
     

    展开全文
  • 系统采用的常用框架 Mysql +SSM+...按Tomcat的性能200的并发量应该完全没问题,于是我搜了一下提高Tomcat并发量的资料,重新配置了一下,提高了Tomcat的性能。如下: 1.在Tomcat目录的bin/catalina.bat,打开这个文...

          系统采用的常用框架 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

    展开全文
  • Nginx 配置之后在电脑上的并发访问比直接使用tomcat的并发访问低是什么原因??怎样解决??
  • Tomcat并发量

    2020-09-28 11:31:52
    Tomcat 默认配置最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。 Tomcat支持三种接收请求处理方式:BIO、NIO、APR 。 apr模式:简单理解,就是从操作系统级别解决异步IO问题,大幅度...

    Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
    Tomcat支持三种接收请求的处理方式:BIO、NIO、APR 。
    apr模式:简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。
    从Tomcat 7.0.30开始,Tomcat默认支持apr。
    Windows下的安装配置与使用
    1、先去 http://archive.apache.org/dist/tomcat/tomcat-connectors/native 下载编译好的 tcnative-1.dll 文件
    2、把tcnative-1.dll文件放在Tomcat的bin目录下
    (tomcat目录下的bin文件下就有)
    3 修改为

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol">
    

    启动项目报错

    The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Java\jdk1.7.0_75\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\Go\bin;D:\Java\jdk1.7.0_75\bin
    Failed to initialize connector [Connector[HTTP/1.1-8080]]
    

    复制tcnative-1.dll到C:\Windows里面去
    然后启动TOMCAT,如果看到以下信息:

    九月 28, 2020 11:28:12 上午 org.apache.coyote.AbstractProtocol start
    信息: Starting ProtocolHandler ["http-apr-8080"]
    九月 28, 2020 11:28:12 上午 org.apache.coyote.AbstractProtocol start
    信息: Starting ProtocolHandler ["ajp-apr-8009"]
    
    则配置成功
    
    展开全文
  • Tomcat并发量的理解

    千次阅读 2019-07-31 15:56:02
    Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。 Tomcat默认的HTTP实现是采用阻塞式的Socket通信,每个请求都...

    Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。
    Tomcat默认的HTTP实现是采用阻塞式的Socket通信,每个请求都需要创建一个线程处理,当一个进程有500个线程在跑的话,那性能已经是很低很低了。
    Tomcat 默认配置的最大请求数是150,也就是说同时支持150个并发。具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给JVM的内存越多性能也就越高,但也会加重GC的负担。

    当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。操作系统对于进程中的线程数有一定的限制:

    Windows 每个进程中的线程数不允许超过 2000
    Linux 每个进程中的线程数不允许超过 1000
    在Java中每开启一个线程需要耗用1MB的JVM内存空间用于作为线程栈之用,此处也应考虑。

    优化Tomcat并发量的配置:
    https://blog.csdn.net/wepwq70900/article/details/88528120

    展开全文
  • 提高tomcat并发量

    2018-11-26 17:22:32
    提高tomcat并发量 1.打开 server.xml 中 代码 &lt;Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="250" minSpareThreads="100"/&gt...
  • Callable是jdk提供多线程工具类 来自 java.util.concurrent.Callable; Callable使用方式比较简单,对于一般多线程使用Callable接口就可以完成。 DeferredResult是由spring提供一个多线程工具类,使用...
  • Tomcat的并发能力

    2020-09-25 14:08:38
    并发量上来后 可能需要修改JVM参数调优) 建议当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。 还需要考虑数据库读写的并发能力 二、Tomcat Tomcat 默认配置的最大请求数是 150,也就是说同时...
  • 增加tomcat并发量

    2013-11-21 22:28:55
    之前在做tomcat的最大并发量测试,现总结如下: tomcat默认的连接是线程阻塞的,即protocol配置为"HTTP/1.1"。那么tomcat的最大连接数就受maxThreads和account的限制, maxThreads是最大的线程数,account是...
  • 背景:通过python脚本记录下tomcat的io访问,并记录到数据库,通过数据分析日常访问''' @author: Jacobpc ''' import os import time import datetime import sys import threading import subprocess import ...
  • 提高Tomcat并发量的几种方法

    千次阅读 2019-03-08 16:14:28
    1、Apache + Tomcat 结合起来用Apache负责静态页面,Tomcat负责动态页面,同时减少connectionTimeout时间,以应对并发量大线程回收来不及情况。 2、压力过大问题,可以做负载均衡,一个TOMCAT无论如何也不...
  • Tomcat的性能与并发量

    2018-12-07 16:04:15
    Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。 Tomcat 还可以配置 NIO 方式的 Socket 通信,在性能上高于阻塞...
  • Tomcat 支持多少并发量

    2019-10-01 15:11:53
    Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。  Tomcat默认的HTTP实现是采用阻塞式的Socket通信,每个请求...
  • SpringBoot内嵌Tomcat并发容量问题

    千次阅读 2020-09-03 14:24:00
    在做一个关于秒杀系统模块,进行Jmeter压测性能时候发现tomcat并发上不去,深入原因找到可供优化地方,力求最大性能。 发现并发容器问题 对单接口进行5000线程压测,每个线程请求10次,线程在10秒内创建完毕...
  • tomcat 最大并发数 并发量 tomcat 最大并发连接数 acceptCount不能说只要大于acceptCount连接就一定被拒绝!
  • 提高tomcat的并发能力

    2015-08-17 16:51:26
    提高tomcat的并发能力 1、Apache + Tomcat 结合起来用Apache负责静态页面,Tomcat负责动态页面,同时减少connectionTimeout的时间,以应对并发量大线程回收来不及的情况。 2、压力过大的问题,可以做负载均衡,...
  • Tomcat默认配置最大请求数是150,也就是说同时支持150个并发,当然了,也可以将其改大。 当某个应用拥有250个以上并发的时候,应考虑应用服务器集群。 具体能承载多少并发,需要看硬件配置,CPU越多性能越高...
  • 近期在进行一个项目的性能调优, 目标是支撑 1000 的并发数; web容器:apache2+tomcat6 jvm:jdk6 linux x64 程序:status2+spring+ibatis 缓存:memcache 服务器:4颗双核cup 8G内存 由于本项目是...
  • 说实话,这个问题困扰我很多年,无奈公司团队当中也无人能为我解答这个问题,言归正传,自己曾...然后通过jmeter进行压测,发现当并发请求数达到四五千的时候tomcat就支撑不住了,难道一台机器只能支撑四五千的并发量

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,887
精华内容 1,154
关键字:

tomcat的并发量