Questão Compilação Gradle desacelera meu computador


A capacidade de resposta é muito ruim em um Ubuntu 14.04 LTS recém-instalado.

Aqui estão as especificações do meu laptop:

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

E quando o gradle está compilando, todo o meu sistema fica lento, os vídeos começam a gaguejar, os rastros de rolagem do navegador ... etc.

O mesmo acontece quando uma atualização de página ocorre em outra janela no Chrome e, enquanto ela é atualizada, o vídeo em HTML5 em outra guia começa a gaguejar.

Como posso consertar isso?

Aqui estão alguns 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/


4
2018-05-20 16:25


origem


Qual placa de vídeo que você tem? Também poderia ser sem fio. Você também pode tentar k / x / lubuntu. - Panther
É o cartão Intel HD4400 integrado. é realmente o ambiente de desktop? porque parece mais como um problema de agendador de cpu. O meu macbook air é muito mais lento, mas tenho uma capacidade de resposta muito melhor. - nubela
No meu (mais antigo) cartão de intel, eu acho que tanto o KDE quanto o XFCE são mais responsivos, você pode inicializar um live usb e testá-lo. - Panther
Você poderia fornecer alguns registros enquanto ocorria o atraso? Coloque em paste.ubuntu. top -b -n 2, iostat -x 1 5, vmstat -a 1 5 - c0rp
oi @ c0rp, adicionado os logs conforme solicitado. - nubela


Respostas:


Eu não trabalho com gradle. Mas, pelo que entendi, é um problema comum.

Aqui está um link:

Tópico muito útil

Problema de utilização da CPU

Desempenho Gradle 

Google

O que você pode fazer é alterar o agendamento do processo. Para o processo que executa IDE ou gradle.

bom

nice é um programa encontrado em sistemas operacionais Unix e Unix-like   como o Linux. Ele mapeia diretamente para uma chamada do kernel com o mesmo nome. bom é   usado para invocar um utilitário ou script de shell com uma prioridade específica,   dando assim ao processo mais ou menos tempo de CPU do que outros processos. UMA   niceness de -20 é a prioridade mais alta e 19 ou 20 é a mais baixa   prioridade. A nicencia padrão dos processos é herdada de seus   processo pai, geralmente 0.

Mudar gentileza você pode usar renice comando

sudo renice <PID> <niceness> 

Ler esta Para maiores informações

Por tempo de construção você pode definir niceness para 15-20. Depois da compilação, mude para o valor padrão, geralmente é 0.

cpulimit

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

Para limitar o uso da CPU do processo chamado firefox para 30%, insira:

# cpulimit -e firefox -l 30

Para limitar o uso da CPU do processo para 30% usando seu PID, insira:

# cpulimit -p 1313 -l 30

cpulimit deve rodar pelo menos com o mesmo usuário executando o controle   processo. Mas é muito melhor se você executar o cpulimit como root, para   ter uma prioridade mais alta e um controle mais preciso.

Se a sua máquina tiver um processador, você poderá limitar a porcentagem de 0%   para 100%, o que significa que se você definir, por exemplo, 50%, seu processo   não pode usar mais de 500 ms de tempo de CPU por segundo. Mas se o seu   máquina tem quatro processadores, a porcentagem pode variar de 0% a 400%,   definir o limite para 200% significa usar não mais do que metade do   potência disponível. Em qualquer caso, a porcentagem é a mesma do que você   veja quando você topar.

Uso Cpulimit

Como limitar o uso da CPU

chrt

Você também pode alterar o agendador de processo ou o 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.

A maioria dos processos no Ubuntu são SCHED_OTHER

Encontrar valores de prioridade para a política de agendamento

$ 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

Definir SCHED_IDLE para processar

$ chrt -i -p 0 PID

ou você pode alterar a prioridade SCHED_OTHER

$ chrt -o -p 1 PID

Como

Outra maneira

Além disso, você pode tentar reduzir o número de Thread para gradle. Você pode ler sobre aqui. Como eu vejo, tem essas opções:

./gradlew -PtaskThreads=2

Além disso, você pode tentar reduzir o uso de memória:

GRADLE_OPTS=-Mmx512m

Citação do Tópico muito útil

--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
2018-05-21 18:20