Unity_Profiler[CPU_Usage]:Othersについてのお話
PC向けツール製作中の出来事。
やけにカクつく。大したオブジェクトを置いてる訳でも無いのに、と。
statsで確認してみた所、セットパスコ18、バッヂ41でした。
スマホアプリ感覚で作っていた為、形振り構わずプロファイラを確認します。
あ゛あ゛ッ゛
解決:アップデート[(記事)Unity2017.3.0a7] [(今回)Unity2017.3.0f2]
版図を拡げるOthers
事の流れはこんな感じ。
①[撮影時間]19:26:06 / およそ100FPS(黄色はVsync)
②[撮影時間]19:33:20(+7m14s) / およそ100FPS
③[撮影時間]19:41:32(+8m12s) / およそ45FPS
19:26:06 - 19:41:32(経過時間:15m26s)
「Others」ガチ盛り。一体何があったのやら。
心辺りこそ大量に存在するが故、解らんのですよ。
- 「お馴染みGC関係なんじゃねぇの、お前形ばっか気にして最初手触れんやろ」
- 「つかuGUI使い過ぎじゃないか?動かすんならCanvas挟もうな?」
- 「いやだってお前いっつもchromeやら開いてますやん?流石に無関係な訳…」
しかしもう一つ。
(多分)俺自身が問題源ではない、別の人間である可能性がある問題が。
もの凄く前から気になっている、それこそUnity5.3.2f1辺りから気になっている問題が、引っ掛かった。ガッチリと。
メモリ使用量に関連が?
①[撮影時間]19:26:41 / メモリ使用量:497.8MB
②[撮影時間]19:33:46(+7m5s) / メモリ使用量:654.6MB
③[撮影時間]19:41:50(+8m4s) / メモリ使用量:820.8MB
19:26:41 - 19:41:50(経過時間:15m9s)
使用時間が長引くにつれ、使用メモリが増えていく。(1.5s/0.1MBって感じ)
そっち方面はこれから詳しくなりたいと考えている為、当然なのかどうかってのは解らない。
しかし、ゲームやらchromeやらtwitterクライアントやら、そこいらは起動しててもメモリにここまでの変動は無い、ましてやVBですら三日放置でも100MB増えたかどうか、なんて状況から考えると、もしや異常なのでは?なんて考えたりもする。
(因みにUnityを半日放置すると、使用メモリ1800MBになってたりする)
ゲームエンジンがこういう物なのかもしれない。UE4でそうなら、大人しく引き下がる。
引き下がった所でどうせまたふりだしに戻るだけじゃん。
Overviewを覗く
おっと、そういえばProfilerにOverviewあるじゃん。
ん?てかそもそもこれ見たら解決では?なあんだ、やっぱりクソ案件じゃん。
[撮影時間]三日前:18:22:07(注:検証前の画像、記事作成の発端となった一枚)
Profiler.FinalizeAndSendFrame [Total:97.9%] [Self:97.9%] [Calls:1] [GC Alloc:0B] [Time ms:51.15] [Self ms:51.15]
>>>[Time ms:51.15] [Self ms:51.15]<<<
馬鹿かよ。[1/60 = 0.016] [1/30 = 0.033](一応)
気になってTimeline見てると、ちょっと気になる要素があった。
[撮影時間]二日後:16:02:05
上三つは関係無さそう?プロファイラ、それに[Unity]なんて付いてるプロファイラ使ってるんだから、[Unity_Job_System]が関係してるんだろう、と。
[Idle(9.6ms)]?何だこれ、なんて調べてると("Unity Job System Idle"で検索)、「C#JobSystem」とか訳解らないのも出てきたり。(でも動作速度10~20倍なんて書かれてて興味は湧いた)
【CEDEC2017】C#JobSystem を使った Unity流マルチスレッドプログラミング
お馴染みUnity_Answersより「What is "Others"」系の質問も探した。
A「おまそれDebug.Logな。あれCPU30%近し占めるべ。」
A「あれ?俺んとこ1%やが。稀に2%もあるけどなあ」
└Q「わかった。で、"Others"ってなんや」
世界は広いなあって。文章じゃ伝わらない事も、何とか助けてやりたい人も居るんだなあ、なんて綺麗事をうすらうすら考えてると、ふと「何で"Idle"に絞るん?原因は"Profiler.Finalizeなんちゃら"じゃないか?」と。
("Profiler.FinalizeAndSendFrame"で検索)
解決策
結果(多分これ)
[Time ms increases for Profiler.Finalizeandsendframe when the profiler is open.]
僕「TIme ms…"これ"が増える…Profiler開いた時から…」
僕「プロファイラ開いたら、"これ"が増える?うっそだ、多分中学英語間違えてんだろうな」(使用:google翻訳)(過去の出来事がフラッシュバック)
翻訳/タイトル「プロファイラを開いてる時、Profiler.FinalizeAndSendFrameの時間が増える」
翻訳/本文/Unity「2017.3.0a7で修正済み」
翻訳/本文/コメント「Found a Solution,just unclick the very small square icon in the profiler : Others」(解決法見つけた。Othersって書かれたちっちゃい四角アイコンクリックしてみ?)
僕「HAHAH A H A H A H A H A
検証結果
治りましたね。綺麗サッパリ。
[撮影時間]12:26:19(Vsyncなし)約1000fps
[撮影時間]12:27:30(Vsync込み。Othersは上と同じくらい。)
[撮影時間]12:30:01(Vsyncなし)約1000fps
二分経ってOthersが増えないという事は、そういう事なんじゃないかな。
ここに手触れた序なのか、UIも多少変わってたりしてます。
2017.3.0f2にしてから気付いたのですが、プロファイラでもGCを利用してるのか、一定周期で[GC Allocated]反応してたりってので、気持ちちょっとだけ注意しておきたい。
因みに、メモリ使用量の増大問題も無くなってます。
数十分放置で変わらず530MBを彷徨っている感じです。
「2017.12.24追記」 Unity2017.2.1f1では修正されておらず。何で公式配布するかなあ…
「2017.12.25追記」Unity2017.3.0.f3にて修正確認!因みに公式配布!