java线程池优化_java开发之Tomcat线程池优化

前言:

上期我们说到了jvm的内存优化,这期我们来说说tomcat的线程池优化,此思路同样可用于c3p0等连接池

tomcat线程池优化

10eb2742c04b277ea499908bc3de4df4.png

我们tomcat线程池的优化,其实就是最大限度的发挥tomcat的性能。即让服务器在保障性能的情况下并发最大

并发:所有线程,在同一秒一起访问同一个资源。

10个人,同一秒同时在访问网站,其中5个访问商品详情,另外5个访问商品列表。这个例子中什么是并发?

对于网站这个资源来说,并发就是10.

对于商品详情或者商品列表来说,并发就是5.

案例:tomcat最大并发数是多少?

同一秒访问tomcat的并发数有多少?

为什么要研究tomcat的并发数有多少?只有认清楚tomcat的并发数才能了解服务器的瓶颈。

测试用例1:直接访问tomcat首页,查看并发数。(不部署任何项目的情况下的并发数)

测试环境:

Tomcat:8.5.15、windows10、jdk11、idea、jmeter

用例名称:测试tomcat并发数(无项目部署)

测试步骤:

准一个空的(全新的)tomcat的。启动tomcat。访问tomcat的首页 预期结果:在浏览器正常访问tomcat的首页。启动jmeter,对tomcat首页进行压测,线程数100,周期1秒,执行1次。记录结果。重启tomcat,增加线程数到200,周期1秒,执行1次。记录结果。重启tomcat,继续增加100,周期1秒,执行1次。直至发现并发量瓶颈时,反复测试几次,记录结果。根据多次压测的结果得出tomcat首页并发量。为什么企业开发测试需要有测试用例呢?其中原因之一就是为了能复现测试流程,以便进行测试结果的复盘。

线程数100,周期1秒,执行1次。记录结果。

955b7d846925904ae9ce7f4bd7d23525.png

f14351518a4826ee6bdf45c21ca01808.png

重启tomcat,增加线程数到200,周期1秒,执行1次。记录结果。

4481b49fb028874e042881caa9b8b6d4.png

重启tomcat,增加线程数到300,周期1秒,执行1次。记录结果。

第一次执行

1b2aac538343914f52ccc674b0ac68ec.png

第二次执行

d5b4fb754127a6c993ab4cbf2cd0be05.png

第三次执行

530198ff8a2492272503384d31a942b7.png

第四次执行

92b85fc9345bafc95633537154961000.png

多次测试发现,瓶颈为300

此时线程池的配置:

maxThreads="40" minSpareThreads="4" maxIdleTime="30000"/>

name:线程池的名称

namePrefix:每一个线程的名称的前缀

maxThreads:最大线程数

minSpareThreads:最小空闲线程数

maxIdleTime:最大休眠时间

优化的配置

maxThreads="300" minSpareThreads="300" maxIdleTime="30000"/>

connectionTimeout="20000"

redirectPort="8443" executor="qifeng"/>

重启tomcat,增加线程数到300,周期1秒,执行1次。记录结果。

优化之后的结果

273edce35a9be5707e0851fa019dda58.png

605c4a23ebecb2687235bdcc31f40244.png

600个线程

79cbf9ac2f34eeb6f569d27c472ad415.png

1000个线程:557

2000个线程:521

3000个线程:547

疑问:是不是所有的页面和所有的接口都可以并发达到540左右呢?

疑问:为什么最大线程数是300,但是每秒的并发反而能超过300呢?是因为线程的使用时间短:1毫秒。一秒内同一个线程可以被复用多次。

测试用例2:准备一个项目放入tomcat中,访问我们的项目代码,查看并发数。(上面的测试是理论,此案例是实际情况)

重启tomcat、100、1、1

980759122bbb71d1eac7f9edffd30174.png

不重启tomcat,300、1、1

ef397aad28c9c92d28b90a64b4dfe560.png

不重启tomcat,600,1,1

cb5576d19604c801a376ef1a9e0ed942.png

1000

391d9e470b32280a6ca73c404357c648.png

2000

76a2724553466bf529fdf915ad49500c.png

3000

df48fd2f6a074a1ded799659327391a4.png

4000

5b6f568b8a4f9be682eab62c62263961.png

结论:

在本人垃圾配置的电脑上,有简单业务逻辑的代码并发量在200到300之间。同一时间能访问网站不报错的用户量大概是3000人左右。

一般情况下,并发量和实际用户量是10倍的差距。(前提是每一个用户只有一个请求),比如一个用户请求一个页面发送三个请求,或者一个用户访问一个页面只发一个请求,前者能容纳的实际用户比后者要少很多。

结语

篇幅限制,先简单介绍这些,我们下期再细说,小编会定期分享自己学过的知识,各位看官可以点关注,一起分享学习的经验和方法,各位大佬对小编的看法有哪些补充或者不同的观点,欢迎在评论区留言斧正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值