web-dev-qa-db-fra.com

Gradle la compilation ralentit mon ordinateur

La réactivité est vraiment mauvaise sur un Ubuntu 14.04 LTS nouvellement installé.

Voici les spécifications de mon ordinateur portable:

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

Et lorsque Gradle est en train de compiler, tout mon système est ralenti, les vidéos commencent à bégayer, le défilement du navigateur, etc.

Il en va de même lorsqu'une actualisation de page se produit dans une autre fenêtre de Chrome et que, pendant l'actualisation, la vidéo HTML5 d'un autre onglet commence à bégayer.

Comment puis-je réparer cela?

Voici quelques journaux:

$ 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/

4
nubela

Je ne travaille pas avec Gradle. Mais si je comprends bien, c’est un problème courant.

Voici un liens:

Sujet très utile

problème d'utilisation du processeur

performance de Gradle

Google

Ce que vous pouvez faire, c'est changer la planification des processus. Pour le processus qui exécute IDE ou gradle.

Agréable

Nice est un programme présent sur les systèmes d'exploitation Unix et de type Unix, tels que Linux. Il mappe directement à un appel du noyau du même nom. Nice est utilisé pour invoquer un utilitaire ou un script Shell avec une priorité particulière, ce qui donne plus ou moins de temps processeur au processus. Une valeur de -20 est la priorité la plus élevée et 19 ou 20 est la priorité la plus basse. La gentillesse par défaut pour les processus est héritée de son processus parent, généralement 0.

Pour changer la gentillesse , vous pouvez utiliser la commande renice

Sudo renice <PID> <niceness> 

Lire this pour plus d'informations

Pour le temps de construction, vous pouvez définir la gentillesse pour 15-20. Après la construction, changez-la à la valeur par défaut, généralement 0.

cpulimit

Installez 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.

Pour limiter l'utilisation du processeur du processus appelé firefox à 30%, entrez:

# cpulimit -e firefox -l 30

Pour limiter l'utilisation du processeur du processus à 30% à l'aide de son PID, entrez:

# cpulimit -p 1313 -l 30

cpulimit doit s'exécuter au moins avec le même utilisateur exécutant le processus contrôlé. Mais il est bien préférable d’exécuter cpulimit en tant que root, afin d’avoir une priorité plus élevée et un contrôle plus précis.

Si votre ordinateur dispose d'un processeur, vous pouvez limiter le pourcentage de 0% à 100%, ce qui signifie que si vous définissez par exemple 50%, votre processus ne peut pas utiliser plus de 500 ms de temps processeur par seconde. Toutefois, si votre machine dispose de quatre processeurs, le pourcentage peut varier de 0% à 400%. Par conséquent, si vous définissez la limite sur 200%, vous ne devez pas utiliser plus de la moitié de la puissance disponible. Dans tous les cas, le pourcentage est le même que ce que vous voyez lorsque vous êtes en tête du classement.

tilisation de Cpulimit

Comment limiter l'utilisation du processeur

chrt

Vous pouvez également modifier le planificateur de processus ou le 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.

La plupart des processus dans Ubuntu sont SCHED_OTHER

Rechercher des valeurs de priorité pour la stratégie de planification

$ 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

Définir SCHED_IDLE pour traiter

$ chrt -i -p 0 PID

ou vous pouvez changer la priorité SCHED_OTHER

$ chrt -o -p 1 PID

Howto

Autrement

Aussi, vous pouvez essayer de réduire le nombre de fils à graver. Vous pouvez lire à propos de ici . Comme je le vois il a cette options:

./gradlew -PtaskThreads=2

Aussi, vous pouvez essayer de réduire l'utilisation de la mémoire:

GRADLE_OPTS=-Mmx512m

Citation de Sujet très utile

--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.
4
c0rp