我正在使用Freemarker在Spring Webapp上工作,当我增加服务器上的CPU内核数时,我面临性能/可伸缩性问题。
在生产中,我们的服务器具有以下配置:
我们购买了新服务器,用以下配置替换了旧服务器:
[问题是:在我们向服务器加载500个jmeter线程时,在具有18个物理核心的新服务器中,我们的webapp比在具有16个内核(8个物理+超线程)的旧服务器中慢。]
因此,我们使用Yourkit分析了我们的应用程序,并观察到当freemarker处理模板并写入输出时,大多数tomcat ajp线程被阻塞,试图获取tomcat SynchronizedQueue(或SynchronizedStack)上的锁:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9WTFIxSS5wbmcifQ==” alt =“此堆栈上的线程被阻止”>
问题是:为什么要放置这些锁,我们如何避免或限制它们对性能的影响?
版本:
我正在使用Freemarker在spring webapp上工作,当我增加服务器上的CPU内核数量时,我面临性能/可伸缩性问题。在生产中,我们的服务器具有...
我发现了两种解决方案来减少Webapp上明显被阻塞的线程:
setAutoFlush(false)
(see more)禁用了freemarker自动刷新