MacでCPU limit対策を考えてみた
発端
Mac 16G環境でも
AS 2.2.1 で GradleSync や ビルドのタイミングで CPUが300-400%になってる
この状態だと、キーボードやマウスすら動かせない
android gradle plugin 2.1.X ではそんなことなかったんだけどな。。
環境差異としては
- data-bindingを使うことを強いられている
- MultiDexが前提になってる
あたりはあると思うんですけどね・・*1
他にも下記な問題もあったりするわけですが・・
android gradle plugin からfork実行されるjavaタスクの CPU負荷が高すぎてタスクが戻ってこない状態ですね。javaのタスクにlimitかければ多少時間はかかりますがビルドは通るようになりますよ
— close_yutori (@kimukou2628) 2016年10月18日
まあG様のgradle対応って下記辺りから来てるしな・・
- antやmaven使いたくない
- ADTのように独自ビルド機構サポートしたくない
Android StudioはGoogleさんが、antイヤになってgradleに浮気したからやで(だれも楽になったとは言ってない。
— いまいまさのぶ (@masanobuimai) 2016年10月14日
因みに windowsでは、
- 2.1.x
- 4G 32bitOS で動かせていた けど
- 2.2.x
- 8G 64bitOS 辺りが推奨環境らしい
- でもまあまだ 2.1.x の環境でギリギリ動かせる*2
- 2.3.x
- 8G が最低動作保証環境らしい
- 16G 辺りが推奨環境らしい
Android Studioの動作に不満を述べている人の大半は、多分PCの能力不足が原因
— けいちゃ (@keicha_hrs) 2016年10月13日
ということらしいので。
gradleが馬鹿食いしてるのでなので、gradleのメモリ調整すれば動かせるとは思いますが。
あとASのindex処理も高負荷だけど、これ動かないと
- コード補完
- ソースのimportとか認識せず真っ赤っ赤
なので同しようもないよな。。*3
日本だと android開発者は未だWin機で頑張ってたりするのにな〜(遠い目
G様だと、開発機は基本 最新のMac Pro支給みたいな話を聞くので、そんなもんなのかもしれない。。
対処法
Windows OSで android gralde plugin 2.1.X 時代
- BES, Battle Encoder Shirase 1.7.5 & 1.6.3: Controls Per-Process CPU Usage を利用
- 制限対象:java(名前無し gradleからのforkタスク)/studio
- BESはBATファイル経由で利用。 javaプロセスは名称引っ掛けで対応
rem "C:\path\to\bes.exe" "D:\path to\java.exe" [percentage] [--minimize] "C:\path\to\bes.exe" "D:\path to\java.exe" 50 --minimize
Mac OSで android gralde plugin 2.2.X 時代
- GitHub - fuyu/AppPolice: Mac OS X app for quickly limiting CPU usage of any running process を利用
- 制限対象:studio / java / slack*4
- 設定は studio/java は CPU 75% slackは25%程度にしている
- 若干ビルド時間等は遅くなるけど、マウスやキーボードが固まらないのでストレスは少ない
java(名前無し gradleからのforkタスク)も対象にしてるけど
- Preference>show system process で表示されるjavaタスク
ってビルドする度にPIDが違うんだよな・・というのが課題*5
あとはコマンドラインで指定できないのも微妙かも。。
Macで他の方法というと
なんか上手く動かせなかった。
sudoが前提なのと、sudo付けてもちゃんと期待通りに動かない感じ。
gradleからkickされているjavaタスクはユーザプロセスのはずなので
root権限は要らないはずなんだけどな。。(汗
ただG様的には
下記なアプローチもあるようなので、そこまで重要視されないんだろうなというのが現状かもしれませんね
CPU800%でマウスやキーボードが固まらない環境を毎月1万円でか・・
G様的には Google Compute Engine 使ってもらえば儲かりますし。
これって Firebase Test Lab 使うのと同じ感覚になるんですかね。。
富豪環境にかんする追記(AS 2.2.X upper)
AS 2.2.Xでは上記の富豪環境が既に動かないらしい。メモ