#java #tomcat
#java #tomcat
Вопрос:
Привет, я хочу создать веб-сайт, используя Java и сервер tomcat. Веб-сайт установит ограничение процессора и памяти для каждого пользователя для всех их процессов на сервере. Например, для каждого пользователя%3 лимита процессора и 100 МБ памяти.
Как я могу это сделать? Спасибо
Комментарии:
1. Вы можете предоставить каждому пользователю ограничение по памяти, предоставив им их собственный процесс tomcat, но это не ограничит использование ЦП.
2. Обычно ограничение процессора — это настройки ОС, которые соответствуют приложениям. Я думаю, что программное обеспечение в ОС просто всегда использует столько вычислительной мощности, сколько может. Я никогда не слышал о том, чтобы Java могла ограничивать собственное использование. Посмотрите на настройки вашего tomcat или настройки ОС, это было бы моим первым предположением.
3. Я искал это почти 2 года. Я пока не нашел хорошего решения. Я даже спрашивал, как реализовать JVM внутри JVM, но проекты для этого были заброшены. Итак, я сделаю ваш вопрос любимым 🙂
Ответ №1:
Это невозможно с одним процессом Tomcat. Вам нужно создать несколько дочерних процессов, каждый со своей собственной (-Xmx100m ИЛИ квота памяти, зависящая от ОС) И специфичными для ОС настройками для управления квотой процессора.
В зависимости от того, насколько вредоносными могут стать ваши пользователи, вы также можете ограничить количество доступных файловых дескрипторов, диапазоны портов, дисковую квоту и т.д. В конце, возможно, стоит поместить процесс каждого пользователя в виртуальную машину и / или тюрьму.
Ответ №2:
В Java нет механизма, доступного для обеспечения соблюдения ограничений на использование ресурсов потоков. Единственный способ, которым вы можете это сделать, — заставить базовую операционную систему выполнять это, что, скорее всего, потребует от вас создания отдельной JVM для каждого ограничения, и это не будет переносимо на разные платформы.
Обратите внимание, что вы можете установить ограничение по времени ожидания для вызова функции (используя Executor) и прервать большинство операций. Для вас этого может быть достаточно. Если вам нужно больше, вам снова потребуется вмешательство операционной системы.