![高负载的 tomcat 上的应用程序 GUI 没有响应](https://linux22.com/image/682571/%E9%AB%98%E8%B4%9F%E8%BD%BD%E7%9A%84%20tomcat%20%E4%B8%8A%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%20GUI%20%E6%B2%A1%E6%9C%89%E5%93%8D%E5%BA%94.png)
我们在 tomcat 8 上安装了后端 webapp,它有一个用 Apache wicket MVC(版本 1.4)编写的 GUI 部分 - 当服务器开始进行大量处理时,wicket GUI 无法响应。
平均而言,CPU 使用率约为 85%。页面可能会在一分钟后刷新,并且可能永远不会返回。
我如何在代码或服务器设置中赋予 wicket 更高的优先级,以使其在高负载下响应?如果需要,我不介意它从后端线程窃取 CPU。
需要澄清的是:整个应用程序是一场单一战争,因此 wicket 和“后端”线程在同一个 webapp 下的同一个 jvm 中运行。wicket 页面似乎不需要其他线程使用的任何重要的繁忙对象。
答案1
如果两个应用程序紧密相关,例如 wiket 部分对处理部分进行阻塞(同步)调用,那么您唯一能做的就是找出处理应用程序阻塞的原因并尝试对其进行优化。
如果您可以将它们分离,那么最干净的解决方案就是首先将 Web 应用程序拆分为两个不同的 tomcat 实例,如果您没有,您可以在前面放置一个反向代理,这样更改就是透明的。
这样,你就可以更清楚地了解哪些应用程序使用了更多的 CPU,或者你可以为你想要的应用程序赋予更高的优先级,例如在 Linux 上,nice/renice。
另一个好处是 tomcat 可以处理的线程数是固定的,因此将两个应用程序放在同一个实例中,一个应用程序可以使用阻止另一个应用程序的所有线程。
希望这可以帮助