【问题标题】:Tuning of Server Thread pool服务器线程池的调优
【发布时间】:2018-09-03 09:33:37
【问题描述】:

我只是在玩线程,看看它们消耗了多少 CPU。我检查了两种情况。

  • 在第一个场景中,我创建了四个线程并以无限循环启动它们。很快,这些线程消耗了我所有的 4 个 CPU 内核。在任务管理器中查看性能监视器后,我发现 CPU 消耗为 100%。
  • 在第二种情况下,当我尝试使用 Web 应用程序和 rest 控制器(使用 tomcat 服务器 8.5 版本)时,我运行了无限循环。因此,如果我使用浏览器请求 url 4 次(显然使用不同的选项卡)。我的 CPU 消耗应该是 100%。我看不到 100% 的 CPU 消耗。

为什么会有差异?

我的第二个问题是:我将如何调整服务器线程池。我必须使用超过 4 个线程,因为它们中可能很少有人在等待 IO 操作。我使用休眠作为维护连接池的 ORM。那么我应该在线程池和连接池中使用多少个线程。我将如何决定?

【问题讨论】:

    标签: multithreading server tomcat8


    【解决方案1】:

    如果没有看到您的代码,我们无法回答您问题的第一部分。但我怀疑问题出在您在 webapp 案例中实现线程的方式上。 (因为你报告的事情不应该发生......)

    第二部分的答案是“试错”。更具体地说:

    1. 使池大小可调参数
    2. 开发一个能代表您预期系统负载的基准。
    3. 使用不同的设置运行基准测试,衡量性能并绘制图表结果。
    4. 根据图表(和其他标准)选择在性能和资源(例如内存)利用率之间取得最佳折衷的设置。

    线程池和连接池是不同的,具有不同的资源含义。第一个(主要)是关于记忆的;即线程处于活动状态时使用的线程堆栈和临时对象。第二个是(主要)与连接相关的资源(活动或空闲)。

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 2011-07-14
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多