为什么当我增加CPU内核数时,使用Freemarker的spring webapp变慢?

问题描述 投票:3回答:1

我正在使用Freemarker在Spring Webapp上工作,当我增加服务器上的CPU内核数时,我面临性能/可伸缩性问题。

在生产中,我们的服务器具有以下配置:

  • 英特尔至强E5-2690
  • 8个物理核心
  • 使用Turbo Boost的2.9GHz至3.8GHz
  • 启用超线程

我们购买了新服务器,用以下配置替换了旧服务器:

  • 英特尔至强金牌6254
  • 18个物理核心
  • 使用Turbo Boost时高达3.4GHz到4GHz
  • 禁用超线程

[问题是:在我们向服务器加载500个jmeter线程时,在具有18个物理核心的新服务器中,我们的webapp比在具有16个内核(8个物理+超线程)的旧服务器中慢。]

因此,我们使用Yourkit分析了我们的应用程序,并观察到当freemarker处理模板并写入输出时,大多数tomcat ajp线程被阻塞,试图获取tomcat SynchronizedQueue(或SynchronizedStack)上的锁:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9WTFIxSS5wbmcifQ==” alt =“此堆栈上的线程被阻止”>

问题是:为什么要放置这些锁,我们如何避免或限制它们对性能的影响?

版本:

  • Tomcat 9.0.14
  • 春季4.3.22
  • Freemarker 2.3.28
  • 我正在使用Freemarker在spring webapp上工作,当我增加服务器上的CPU内核数量时,我面临性能/可伸缩性问题。在生产中,我们的服务器具有...

java performance tomcat freemarker scalability
1个回答
0
投票

我发现了两种解决方案来减少Webapp上明显被阻塞的线程:

  • 我通过调用setAutoFlush(false)see more)禁用了freemarker自动刷新
© www.soinside.com 2019 - 2024. All rights reserved.