配置:Intel Xeon E5 2.4G*6核,16G内存,Redhat Linux X64,jdk 7(server),tomcat 8.9
改了tomcat 内存配置,开启了nio+epoll,结果仍不好看。。。
vi bin/catalina.sh
- CATALINA_OPTS='-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider'
- JAVA_OPTS= -Xms800M -Xmx1500M -XX:PermSize=128M -XX:MaxPermSize=300M
vi conf/server.xml
- <Connector port="7080" protocol="org.apache.coyote.http11.Http11NioProtocol"
- connectionTimeout="20000"
- redirectPort="7443"
- acceptorThreadCount="6"
- acceptCount="800"
- maxThreads="400"
- compression="on"
- compressionMinSize="2048"
- noCompressionUserAgents="gozilla,traviata"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>
采用jfinal+beetl模板,apache ab压力测试结果:
- D:\tools\Apache2.2\bin>ab -n 1000 -c 50 http://192.168.xx.xxx:7080/jfinalBeetl
- This is ApacheBench, Version 2.3 <$Revision: 655654 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- Benchmarking 192.168.xx.xxx (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 700 requests
- Completed 800 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
- Server Software: Apache-Coyote/1.1
- Server Hostname: 192.168.xx.xxx
- Server Port: 7080
- Document Path: /jfinalBeetl
- Document Length: 327 bytes
- Concurrency Level: 50
- Time taken for tests: 0.656 seconds
- Complete requests: 1000
- Failed requests: 0
- Write errors: 0
- Non-2xx responses: 1000
- Total transferred: 146000 bytes
- HTML transferred: 0 bytes
- Requests per second: 1523.81 [#/sec] (mean)
- Time per request: 32.813 [ms] (mean)
- Time per request: 0.656 [ms] (mean, across all concurrent requests)
- Transfer rate: 217.26 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 2.6 0 16
- Processing: 0 32 6.3 31 47
- Waiting: 0 20 11.2 16 47
- Total: 0 32 6.4 31 47
- Percentage of the requests served within a certain time (ms)
- 50% 31
- 66% 31
- 75% 31
- 80% 31
- 90% 47
- 95% 47
- 98% 47
- 99% 47
- 100% 47 (longest request)
未采用beetl,apache ab测试结果:
- D:\tools\Apache2.2\bin>ab -n 1000 -c 50 http://192.168.xx.xxx:7080/Root
- This is ApacheBench, Version 2.3 <$Revision: 655654 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- Benchmarking 192.168.xx.xxx (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 700 requests
- Completed 800 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
- Server Software: Apache-Coyote/1.1
- Server Hostname: 192.168.xx.xxx
- Server Port: 7080
- Document Path: /Root
- Document Length: 11430 bytes
- Concurrency Level: 50
- Time taken for tests: 1.297 seconds
- Complete requests: 1000
- Failed requests: 0
- Write errors: 0
- Total transferred: 11571000 bytes
- HTML transferred: 11430000 bytes
- Requests per second: 771.08 [#/sec] (mean)
- Time per request: 64.844 [ms] (mean)
- Time per request: 1.297 [ms] (mean, across all concurrent requests)
- Transfer rate: 8713.10 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 1 4.1 0 16
- Processing: 16 62 9.7 63 94
- Waiting: 0 29 18.1 31 78
- Total: 16 63 9.5 63 94
- Percentage of the requests served within a certain time (ms)
- 50% 63
- 66% 63
- 75% 63
- 80% 63
- 90% 78
- 95% 78
- 98% 78
- 99% 78
- 100% 94 (longest request)
麻,再改进一下,估计能到2000多,曾听某网友说,调优后的tomcat项目能到3000,不知道是怎么做的。。。
哪位亲给说说。。。
以下由 明月照大江网友提供:
- 我看了一下,tomcat给的几个参数,你先别忙着上集群,试试这些,tomcat8
- 1.Executor 配置
- 1.1 maxThreads ,默认是200,把这个设置这个数值,可以再高一些。400,800都试试。会有瓶颈。
- 2.HTTP Connector 设置
- 2.1 acceptCount 默认是100,调高,翻几倍试试
- 2.2 acceptorThreadCount 默认是1,调成CPU线程数,比如4核心8线程,就调成8.
- 2.3 maxThreads 默认是200,调高
- 2.4 processorCache 如果使用servlet3.0,配置到和 maxThread 一样
- 任何和缓冲区相关的配置都可以调大。
- JVM参数尽量调大,各代配合合适的内存回收算法。
- etc
- 详见:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html
- 压缩选项之类的可以看着来,其他的比如可以把NIO2改成 APR。
- 以上是根据官网给的配置信息 “利用丰富的想象力” 得来的答案,没有经过任何测试。
- 先榨干一个tomcat,再上集群!
以下转自http://blog.csdn.net/lifetragedy/article/details/7708724:
- Tomcat的优化分成两块:
- Tomcat启动命令行中的优化参数即JVM优化
- Tomcat容器自身参数的优化(这块很像ApacheHttp Server)
- catalina.sh
- export JAVA_OPTS=.....
- -server: 我不管你什么理由,只要你的tomcat是运行在生产环境中的,这个参数必须给我加上
- –Xmn: 设置年轻代大小为512m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
- -Xss: 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。一般不易设置超过1M
小总结:
当一个进程有 500 个线程在跑的话,那性能已经是很低很低了。Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
操作系统对于进程中的线程数有一定的限制:
Windows 每个进程中的线程数不允许超过 2000
Linux 每个进程中的线程数不允许超过 1000
另外,在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。
Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。
Tomcat 默认的 HTTP 实现是采用阻塞式的 Socket 通信,每个请求都需要创建一个线程处理。这种模式下的并发量受到线程数的限制,但对于 Tomcat 来说几乎没有 BUG 存在了。
Tomcat 还可以配置 NIO 方式的 Socket 通信,在性能上高于阻塞式的,每个请求也不需要创建一个线程进行处理,并发能力比前者高。但没有阻塞式的成熟。
这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能也是非常高的。
对于单台数据库服务器来说,允许客户端的连接数量是有限制的。
并发能力问题涉及整个系统架构和业务逻辑。
系统环境不同,Tomcat版本不同、JDK版本不同、以及修改的设定参数不同。并发量的差异还是满大的。
maxThreads="1000" 最大并发数
minSpareThreads="100"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount="700"// 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理