У нас есть серверное веб-приложение, установленное на tomcat 8, у которого есть часть графического интерфейса, написанная на Apache wicket MVC (версия 1.4) - графический интерфейс калитки не отвечает в тот момент, когда сервер начинает выполнять тяжелую обработку.
В среднем загрузка ЦП составляет около 85%. Страница может обновиться через минуту и может никогда не вернуться.
Как я могу дать калитке более высокий приоритет, либо в коде, либо в настройках сервера, чтобы она реагировала при высокой нагрузке? Я был бы не против, если бы он украл CPU из внутренних потоков.
Некоторое пояснение: все приложение представляет собой единую войну, поэтому потоки калитки и «backend» выполняются в одном jvm под одним и тем же веб-приложением. Страница калитки, похоже, не нуждается в каких-либо важных занятых объектах, которые используют другие потоки.
Если два приложения сильно объединены, как в части wiket, выполняющей блокирующие (синхронные) вызовы части обработки, единственное, что вы можете сделать, это выяснить, почему приложение обработки блокируется, и попытаться оптимизировать его.
Если вместо этого вы можете разделить их, то самым чистым решением было бы сначала разделить веб-приложения на два разных экземпляра tomcat, а если у вас его нет, вы можете поставить перед ним обратный прокси, чтобы изменение было прозрачным.
Таким образом, у вас будет еще больше информации о том, какое из приложений использует больше ЦП, или вы можете отдать больший приоритет тому, что захотите, например. на linux nice / renice.
Еще одно преимущество состоит в том, что количество потоков, которые может обрабатывать tomcat, фиксировано, поэтому, помещая оба приложения в один и тот же экземпляр, одно приложение может использовать все потоки, блокирующие другое.
Надеюсь это поможет