Gradle compiling slows down my computer

5,818

I do not work with gradle. But as I understand it is common problem.

Here is a links:

Very helpful topic

CPU utilization problem

Gradle performance

Google

What you can do is change process scheduling. For process that runs IDE or gradle.

nice

nice is a program found on Unix and Unix-like operating systems such as Linux. It directly maps to a kernel call of the same name. nice is used to invoke a utility or shell script with a particular priority, thus giving the process more or less CPU time than other processes. A niceness of −20 is the highest priority and 19 or 20 is the lowest priority. The default niceness for processes is inherited from its parent process, usually 0.

To change niceness you can use renice command

sudo renice <PID> <niceness> 

Read this for more information

For building time you can set niceness for 15-20. After build change it to default value, usually it is 0.

cpulimit

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

To limit CPU usage of the process called firefox to 30%, enter:

# cpulimit -e firefox -l 30

To limit CPU usage of the process to 30% by using its PID, enter:

# cpulimit -p 1313 -l 30

cpulimit should run at least with the same user running the controlled process. But it is much better if you run cpulimit as root, in order to have a higher priority and a more precise control.

If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power. In any case, the percentage is the same of what you see when you run top.

Cpulimit usage

How to limit CPU usage

chrt

You also can change process scheduler or 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.

Most if process in Ubuntu are SCHED_OTHER

Find priority values for scheduling policy

$ 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

Set SCHED_IDLE to process

$ chrt -i -p 0 PID

or you can change priority SCHED_OTHER

$ chrt -o -p 1 PID

Howto

Another way

Also you can try to reduce number of Thread for gradle. You can read about it here. As I see it has this options:

./gradlew -PtaskThreads=2

Also you can try reduce memory usage:

GRADLE_OPTS=-Mmx512m

Quote from Very helpful topic

--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.
Share:
5,818

Related videos on Youtube

nubela
Author by

nubela

https://giki.wiki/@nubela

Updated on September 18, 2022

Comments

  • nubela
    nubela over 1 year

    The responsiveness is really bad on a newly installed Ubuntu 14.04 LTS.

    Here's the specs of my laptop:

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

    And when gradle is compiling, my entire system slows to a crawl, videos begin stuttering, browser scrolling lags... etc.

    The same goes when a page refresh occurs in another window in Chrome, and while it refreshes, the HTML5 video in another tab begins stuttering.

    How can I fix this?

    Here are some logs:

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

    • Panther
      Panther almost 10 years
      What video card do you have? Could also be wireless. You could also try k/x/lubuntu.
    • nubela
      nubela almost 10 years
      It's the integrated intel HD4400 card. is it really the desktop environment? because it seems more like a cpu scheduler issue. my macbook air is so much slower but i have way better application responsiveness on it.
    • Panther
      Panther almost 10 years
      On my (older) intel card I find both KDE and XFCE are more responsive., you can boot a live usb and try it.
    • c0rp
      c0rp almost 10 years
      Could you provide some logs while lagging occure. Put it on paste.ubuntu. top -b -n 2, iostat -x 1 5, vmstat -a 1 5
    • nubela
      nubela almost 10 years
      hi @c0rp, added the logs as you requested.
    • Rmano
      Rmano almost 10 years
      It seems that you have a java thing which is trying to use all CPUs for itself... (I do not know which gradle is, so I may just be pointing the obvious).
    • c0rp
      c0rp almost 10 years
      I don't see anything strange. As iostat says, 95% of your CPU is working. Also if summarize first 20 apps in top it gives 392% (because you have 4 CPUs). vmstat says that a few processes are waiting. Your java project eating your CPU
    • nubela
      nubela almost 10 years
      i'm using gradle 1.10. But even if it eats up all the cpu, shouldn't the scheduler attempt to mitigate the resources appropriately?
    • nubela
      nubela almost 10 years
      in other words, how can i configure my install to give less to distribute resources more fairly?
    • c0rp
      c0rp almost 10 years
      @nubela This is the common problem of gradle. It trying to use all CPU cores. At least you can try to reduce niceness of IDE process while building. Also if you want let me know that you write comment add "@c0rp" to your text
    • c0rp
      c0rp almost 10 years
      @nubela I think this would be a great question, but this is another question. You can edit current question and I will update my answer.
    • nubela
      nubela almost 10 years
      @c0rp, i will accept this answer just to let you have the karma for this question. cheers and thanks1
    • c0rp
      c0rp almost 10 years
      @nubela, I update answer a little bit. It is not necessary to accept my answer, I'm doing this because it is also interesting for me. If you find any other solution, please let me know, or answer your question by yourself. I have the same problem with vaadin