Компиляция Gradle замедляет мой компьютер

Отзывчивость действительно плоха на недавно установленной Ubuntu 14.04 LTS.

Вот характеристики моего ноутбука:

Quadcore Intel i7-4600U CPU @ 2.10GHz
12GB Ram
1TB Samsung EVO SSD

А когда компилируется gradle, вся моя система замедляется, видео начинает заикаться, задержки в прокрутке браузера... и т. Д.

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

Как я могу это исправить?

Вот несколько журналов:

$ vmstat -a 1 5 - http://paste.ubuntu.com/7493966/

$ iostat -x 1 5 - http://paste.ubuntu.com/7493970/

$ top -b - http://paste.ubuntu.com/7493974/

1 ответ

Решение

Я не работаю с Gradle. Но, насколько я понимаю, это общая проблема.

Вот ссылки:

Очень полезная тема

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

Производительность Gradle

Google

Что вы можете сделать, это изменить расписание процесса. Для процесса, который запускает IDE или Gradle.

отлично

nice - это программа для Unix и Unix-подобных операционных систем, таких как Linux. Он напрямую отображается на вызов ядра с тем же именем. nice используется для вызова утилиты или сценария оболочки с определенным приоритетом, что дает процессу больше или меньше процессорного времени, чем другим процессам. Хорошее значение -20 является самым высоким приоритетом, а 19 или 20 - самым низким приоритетом. Хорошее значение по умолчанию для процессов наследуется от его родительского процесса, обычно 0.

Чтобы изменить милость вы можете использовать renice команда

sudo renice <PID> <niceness> 

Прочитайте это для получения дополнительной информации

На время постройки вы можете установить милость на 15-20. После сборки измените его на значение по умолчанию, обычно это 0.

CPULimit

устанавливать cpulimit, sudo apt-get install cpulimit

-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.

Чтобы ограничить использование ЦП процессом под названием firefox до 30%, введите:

# cpulimit -e firefox -l 30

Чтобы ограничить использование процессора процессом до 30% с помощью его PID, введите:

# cpulimit -p 1313 -l 30

cpulimit должен запускаться хотя бы с тем же пользователем, на котором запущен контролируемый процесс. Но гораздо лучше, если вы запустите cpulimit от имени root, чтобы иметь более высокий приоритет и более точный контроль.

Если на вашей машине установлен один процессор, вы можете ограничить процент от 0% до 100%, что означает, что если вы установите, например, 50%, ваш процесс не сможет использовать более 500 мс времени процессора в секунду. Но если ваша машина имеет четыре процессора, процент может варьироваться от 0% до 400%, поэтому установка ограничения на 200% означает использование не более половины доступной мощности. В любом случае, процент такой же, какой вы видите при запуске top.

Использование Cpulimit

Как ограничить использование процессора

CHRT

Вы также можете изменить планировщик процесса или PID.

SCHED_FIFO
Scheduling policy designed for special time-critical applications. It uses the First In-First Out scheduling algorithm.

SCHED_BATCH
Scheduling policy designed for CPU-intensive tasks.

SCHED_IDLE
Scheduling policy intended for very low prioritized tasks.

SCHED_OTHER
Default Linux time-sharing scheduling policy used by the majority of processes.

SCHED_RR
Similar to SCHED_FIFO, but uses the Round Robin scheduling algorithm.

Большинство процессов в Ubuntu - это SCHED_OTHER

Найти значения приоритетов для политики планирования

$ chrt -m
SCHED_OTHER min/max priority    : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority   : 1/99
SCHED_BATCH min/max priority    : 0/0
SCHED_IDLE min/max priority : 0/0

Установите SCHED_IDLE для обработки

$ chrt -i -p 0 PID

или вы можете изменить приоритет SCHED_OTHER

$ chrt -o -p 1 PID

Как

По-другому

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

./gradlew -PtaskThreads=2

Также вы можете попробовать уменьшить использование памяти:

GRADLE_OPTS=-Mmx512m

Цитата из очень полезной темы

--parallel-threads only applies to project parallelization.

For android tasks that are running in parallel, we always create as many threads as possible. For slower machine (or with low ram) this is not great. We should allow control on that.

Possible though:
./gradlew assemble -PandroidThread=3

Studio would have to allow configuring and sending this (it should also let you configure --parallel-threads if it doesn't already).

Long term gradle will have a thread pool shared across all level of parallelization (multi-projects. inside a project, inside a task) so this will become obsolete but it would be good to do now.
Другие вопросы по тегам