web-dev-qa-db-ja.com

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/

4
nubela

私はgradleでは動作しません。しかし、私が理解しているように、それは一般的な問題です。

リンクは次のとおりです。

非常に役立つトピック

CPU使用率の問題

グレーディングパフォーマンス

Google

できることは、プロセスのスケジュールを変更することです。 IDEまたはgradleを実行するプロセスの場合。

いいね

Niceは、UnixおよびLinuxなどのUnixライクなオペレーティングシステムで見られるプログラムです。同じ名前のカーネル呼び出しに直接マップします。 Niceは、特定の優先度でユーティリティまたはシェルスクリプトを呼び出すために使用されるため、他のプロセスよりもプロセスのCPU時間を増減できます。 −20のnicenessが最高の優先順位であり、19または20が最低の優先順位です。プロセスのデフォルトのnicenessは、その親プロセスから継承されます。通常は0です。

nicenessを変更するには、reniceコマンドを使用できます

Sudo renice <PID> <niceness> 

詳細については this を読んでください

構築時間については、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というプロセスのCPU使用率を30%に制限するには、次のように入力します。

# cpulimit -e firefox -l 30

PIDを使用してプロセスのCPU使用率を30%に制限するには、次のように入力します。

# cpulimit -p 1313 -l 30

cpulimitは、少なくとも制御されたプロセスを実行している同じユーザーで実行する必要があります。しかし、より高い優先度とより正確な制御を得るために、rootとしてcpulimitを実行する方がはるかに優れています。

マシンにプロセッサが1つある場合、パーセンテージを0%から100%に制限できます。つまり、たとえば50%に設定した場合、プロセスは毎秒500 msを超えるCPU時間を使用できません。ただし、マシンに4つのプロセッサがある場合、パーセンテージは0%から400%の間で変化する可能性があるため、制限を200%に設定すると、使用可能な電力の半分以下を使用することになります。いずれにしても、割合はtopを実行したときに表示されるものと同じです。

CPU使用率

CPU使用率を制限する方法

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

Howto

別の方法

また、gradleのスレッド数を減らすこともできます。 it here について読むことができます。私が見るように、このオプションがあります:

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