Ограничение памяти Java-приложения и использования процессора - PullRequest
10 голосов
/ 10 февраля 2011

Скажите, "запустите myApp.jar с процессором = 800 и памятью = 1024"

Я занимаюсь программированием на Java уже много лет, и мне стыдно задавать этот вопрос. Я даже не знаю, возможно ли это или нет. И если да, то как?

То, что я просто хочу знать, это то, можно ли установить максимальное использование памяти java-программой и процессор. Я вдруг подумал об этом из-за того, что недавно начал разрабатывать мобильные приложения. Я хочу знать, как приложение будет вести себя на устройстве, которое имеет очень ограниченную память и процессор.

Я видел физические движки с демонстрационными приложениями, которые запускаются в браузере или я могу запускать на моем ПК. Что делать, если я запускаю их на мобильном устройстве? Будет ли производительность такой же? Вместо того, чтобы разрабатывать образец мобильного приложения для проверки производительности библиотеки, я бы предпочел запустить его с определенным процессором и памятью, используя сначала мой ПК.

Кстати, я попробовал поискать в Google ... все, что я нашел, это мониторинг и настройка производительности. Возможно, я использую неправильные ключевые слова.

Ответы [ 7 ]

11 голосов
/ 10 февраля 2011

вы можете ограничить использование памяти с помощью опции -Xmx, и вы можете ограничить использование процессора, установив приоритет процесса и / или привязку процессора.

4 голосов
/ 14 сентября 2017

JVM не контролирует использование ЦП или приоритет.

JVM контролирует макс / мин. Использование памяти.

Существует обходной путь.Можно запустить каждую JVM в отдельном Docker-контейнере .И контролировать распределение ресурсов (память, процессор, сеть, ввод-вывод) для каждого контейнера.Это и есть добавленная стоимость контейнеров Docker.

0 голосов
/ 22 марта 2019

Docker предлагает опции управления ресурсами для ограничения доступа к процессору для запуска контейнеров Docker. Посмотрите на опции планировщика CFS, доступные с docker run из Ограничение ресурсов контейнера в документации Docker, например:

  • --cpus=<value> - Укажите, сколько доступных ресурсов ЦП может использовать контейнер. Например, если на хост-машине установлено два ЦП и вы установили --cpus="1.5", контейнер гарантированно содержит не более полутора ЦП. Это эквивалентно настройке --cpu-period="100000" и --cpu-quota="150000". Доступно в Docker 1.13 и выше.
  • --cpuset-cpus - Ограничение конкретных процессоров или ядер, которые может использовать контейнер. Разделенный запятыми список или разделенный дефисом ЦП, которые может использовать контейнер, если у вас более одного ЦП. Первый ЦП имеет номер 0. Допустимое значение может быть 0-3 (для использования первого, второго, третьего и четвертого ЦП) или 1,3 (для использования второго и четвертого ЦП).

Эти опции также доступны через docker-compose при развертывании стека / стека Docker, как указано в Ссылка на версию 3 файла компоновки в resources:

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M```

Примечание: , что устаревшие опции ресурса в docker compose v2 теперь ограничены стеками при миграции на v3 .

0 голосов
/ 12 ноября 2018

Пожалуйста, будьте осторожны с памятью и процессором при запуске jvm 8 или более ранней версии. Есть несколько очень хороших статей об этом. Проверьте это:

https://developers.redhat.com/blog/2017/03/14/java-inside-docker/

https://jaxenter.com/nobody-puts-java-container-139373.html

Сказав это, контейнеризация - это правильный путь для микросервисной архитектуры независимо от стека, и jvm не является исключением из этого. Однако важно знать о предостережениях.

0 голосов
/ 20 июля 2018

Для процессора вы можете попробовать мой новый lib:).

https://github.com/dyorgio/cpu-watcher

Пример использования:

// Limit process by PID to 25% of host cpu usage
CpuWatcher cpuWatcher = new CpuWatcher(pid, 25f);
cpuWatcher.start();
0 голосов
/ 02 февраля 2014

https://github.com/haosdent/jcgroup jcgroup - ваш лучший выбор.Вы можете использовать эту библиотеку для ограничения общих ресурсов процессора, скорости дискового ввода-вывода, пропускной способности сети и т. Д.

0 голосов
/ 14 марта 2011

В этом сценарии может помочь запуск приложения в эмуляторе мобильного устройства (например, Android).

При этом вы можете эмулировать мобильное устройство с определенным ЦП / памятью.Таким образом, вы должны получить производительность, сравнимую с устройством с более медленным процессором и меньшим объемом оперативной памяти.

Эмулятор Android / Nokia бесплатен и доступен для загрузки в разделах для разработчиков на сайтах Nokia / Google.

...