java吧 关注:1,297,246贴子:12,832,559
  • 18回复贴,共1

关于Tomcat并发处理请求的问题222, 这次有具体配置和大概背景

只看楼主收藏回复

老师给的配置如下, 背景是一个提供b2b业务的中台的订单系统
硬件: 8C, 32g内存, 500g硬盘, 算是服务器的低配
读方面: 30万/秒
假设一个Tomcat 处理一个读请求的大致时间, 取40毫秒计算
一个Tomcat线程假定: 300个
一个Tomcat每秒能处理的请求数:
300 * 1000/40 * 0.7 大约 5000个请求/秒 ( * 0.7 是因为老师说预留30%的资源防止突发情况)
30万/ 5000 = 60个Tomcat服务
注意: 没有考虑集群.故障备用等情况
上个帖子大佬的分析我都看了, 并发和并行的概念我懂, 这次有具体的配置和大概场景,
请问这个预估合理吗, 老师还是300个线程算的, 按我的理解就算40ms中有30ms都是io操作, 也相差太远
另外我也不太懂 jvm线程数 和Tomcat线程数 cpu之间的关系, 请大佬门指点一下


IP属地:四川1楼2023-09-15 09:20回复
    你的估算有问题,事实上40ms中更可能38秒都是io操作。你要理解,线程每秒钟处理请求的数量和cpu每秒钟处理请求的数量是不一样的。
    假设一个线程1秒钟可以处理10个请求,但是一个cpu可以满足调度运行10个线程,因此你可以开10个线程,1个cpu的配置就能处理100个请求。
    为什么?因为线程处理请求的绝大部分时间都被挂起了(等待io),所以这个时候cpu可以运行其他线程


    IP属地:江苏来自Android客户端2楼2023-09-15 09:30
    回复
      2026-02-09 22:48:35
      广告
      不感兴趣
      开通SVIP免广告
      有大佬说预估40ms一个请求, 实际可能38ms都是io操作,
      按CPU线程数算下来 40/2 * 16 = 320 , 和Tomcat 直接按300个线程算差不多
      我有一个疑问是 实际生产环境, 处理一个业务请求 cpu耗时只要2ms吗


      IP属地:四川3楼2023-09-15 09:51
      收起回复
        我觉得你是偏执了,就算线程少的开超出常理的tomcat线程也没关系,cpu线程不代表jvm线程,就像一个人打2份工,每份工4小时,可以先做a工作直到完毕,再做b工作,也可以ababab穿插工作或按个人时间和雇主紧急取舍打完各4小时的工,当然,这里人就像那个cpu线程,工作是那个jvm或者tomcat线程,切换工作需要个人的交通时间和思路重捋成本,cpu线程在接手jvm线程的时候也需要时间资源和上下文(读档)这些成本,宏观这一天,你的8小时工作时间达到了,实际你的交勤和交通费有出入,既满足雇主需求和8小时时长和通勤成本才是上上策


        IP属地:浙江来自Android客户端4楼2023-09-15 10:46
        收起回复
          多谢大佬们的解答, 大概明白了, 并发因素是多方面的, 老师这个算法没有考虑其他因素, 因为这个资源预估课程是根据项目需求大概手动算的, 各种因素没办法考虑, 而老师没有提及其他因素会导致并发时间的问题, 直接就计算, 加上我没有实际经验 ,所以我才有那么多疑问 , 这个算法是否合理


          IP属地:四川5楼2023-09-15 14:23
          收起回复