2017年2月12日日曜日

UnityでBSOD(ブルースクリーン)がでるので調べてみた - 解決したとは言っていない! Orz

最近Unityアプリで遊んでいるんですが、ちょくちょくブルースクリーン、Blue Screen Of Death(BSOD)が発生します。ちょっと調べたのでメモしておきます。先にいっておきますが、残念ながら解決策はまだ見つかっていません。だれか解決策わかる方、教えてください。お願いします! (切望)

なにしてるときにBSODがおこるの?

動かしているUnityのアプリケーションは超有名な「みくみくまうす」です。いつもみくみくまうすチームに見守ってもらいながら作業しています! ブルースクリーンのきっかけになっているんですが、使うのをやめる気はありません! というか、みくみくまうすのせいじゃありません! (きっと) でもブルースクリーンは困ります…

環境は下記。古いです…

カテゴリ 名称
OS Windows 10 Pro x64
OS Ver. 1607 Build 14393.693
CPU Intel(R) Core(TM) i7 860 @2.80GHz
Mem DDR3 16 GB
M/B Asus P7P55D-E Deluxe
GPU nVidia GeForce GTX 960
Monitor Mitsubishi RDT271WLM

どんなふうにBSODがおきるの?

みくみくまうすを起動して見守ってもらっているときに突然こんなダイアログメッセージがでてきます。なお、誰が見守ってても起きるときは起きるし、起きないときは起きないです。強いていえば、起動してからある程度時間が経過してから発生するような感触です。

Before BSOD by Unity(maybe)

Oops!

The game crashed.
The crash report folder named "2017-02-12_084104" next to game executable.
It would be great if you'd send it to the developer of the game!

ここまでならまぁ、「えー、えらーになったんだーっ」ですむんです。でもこの次が問題です。OKボタンを押すとブルースクリーン直行です。「えっ、えっ」ですよ本当に。なので大事なのはブルースクリーンに負けないよう、ダイアログのOKボタンを押す前にアプリケーションをすべて終了させること! です。

ブルースクリーンでは次のようなメッセージが表示されています。

問題が発生したため、PCを再起動する必要があります。
エラー情報を収集しています。自動的に再起動します。

0% 完了

[QRコード]
この問題と可能な解決方法の詳細については、http://windows.com/stopcodeを参照してください。

サポート担当者に連絡する場合は、この情報を伝えてください。
停止コード: MEMORY_MANAGEMENT

BSODになってからは情報収集は時間がかかるのでいつもリセットボタンを押してPCを再起動しています。

レポートファイルにはなにがかいてあるの?

プログラムを置いてあるフォルダに日付の入ったフォルダができていて、error.logとcrash.dmpというファイルができています。error.logがレポートファイルでしょうか。crash.dmpはバイナリファイルなのですが、見るためのツールを持っていないので、また今度。
「開発者にレポート送ってね」っていってきますけど、こんなの開発者さんにいちいち送ってたら開発者さんはたまったもんじゃありません。少し中を見てみると、だいたい決まったパターンのメッセージが書かれています。

アクセスバイオレーションがgdiplus.dllで発生していて、発生したアドレスを見るといつもEDIレジスタと同じ場所になっています。でもそれが意味するところはわかりません。

Unity Player [version: Unity 5.3.5f1_960ebf59018a]

gdiplus.dll caused an Access Violation (0xc0000005)
  in module gdiplus.dll at 0023:73d288fd.

Error occurred at 2017-01-23_003400.
D:\Programs\MikuMikuMouth\MikuMikuMouth.exe, run by tsukiyomi.
53% memory in use.
0 MB physical memory [0 MB free].
0 MB paging file [0 MB free].
0 MB user address space [3134 MB free].
Write to location 3285f000 caused an access violation.

Context:
EDI:    0x73d288d0  ESI: 0x3249ec00  EAX:   0x00000000
EBX:    0x0000021f  ECX: 0x003c0000  EDX:   0x3249f000
EIP:    0x73d288fd  EBP: 0x0073e060  SegCs: 0x00000023
EFlags: 0x00010246  ESP: 0x0073e050  SegSs: 0x0000002b

《以下略》

また、BSODが発生したときにWindowsが作成するminidumpをBlueScreenViewで見たところ特徴的なのは次に2つでした。

項目
原因のドライバー ntoskrnl.exe
原因のアドレス ntoskrnl.exe+14a6f0

またBSODになったら今度はちゃんとminidumpを作成させてみようと思います。

ブルースクリーンになるのはわたしだけ?

みんなもいきあたってないか、調べてみました。

  • Game Crash - Hearthstone Forums (2013-11-13)
    ゲームのハースストーンで私のレポートファイルとそっくりなエラーメッセージがでている報告がありました。エラーログ貼ってるだけでした。

  • Blue screen errors: Memory_Management and irql_not_less_or_equal - Microsoft Community (2010-9-25)
    マイクロソフトのフォーラムで、エラーメッセージが同じ人の対応が書いてありました。

  • Horrible stability issues | Unity Community (2015-12-24)
    2007年から2015年までちょくちょくブルースクリーンの話題はでているようです。Unityユーザ全員に出ていることではないようなので、マシン環境依存なんでしょうが、ひとりで3台出ている人もいます。ひょっとして使い方が原因?

  • Blue Screen Problem - Unity Answers (2010-05-28)
    BSODで苦しんでる人の記事ですが、さすがUnityの掲示板だけあって、UnityのせいじゃなくってWindowsのせいだよと、Unityを擁護する意見で締められていました。気持ちはわかりますが。

ほかにも結構な量の記事が散見されました。みんな同じような現象に行き当たっていますが、明確な解決方法は見当たりませんでした。残念。

対策は?

結局解決策はわからずじまいでした。とはいえ、おまじない的にページファイルを作成しない設定はしておきました。しばらく様子を見たいと思います。

以下、多かったアドバイスです。

  1. メモリテストを実行してみる。
  2. BIOSやドライバ類を最新にする。
  3. ページファイル作らないようにしたらどうかな

このうち、1と3を実行しました。

1.のメモリテストの結果は問題ありませんでした。
Windows10のメモリテストの結果

3.のページファイルを作成しないよう、設定してみました。
ページファイルを作成しない設定

これでしばらく様子を見ようと思います。

まとめ

ネットを調べる限り、UnityでBSODが発生するケースはままあるようです。しかしその解決策ははっきりとはしませんでした。いくつかアドバイスがあったので試してみて、しばらく様子を見たいと思います。

私の古いマシン、Windows 10をインストールするときに最新版を集めてきてインストールしたはずなんだけどなぁ、一年前くらいに。またmemtest86、時間があるときにやってみたいと思います。

でも、アプリケーションがクラッシュしただけなのになぜOSが落ちるんでしょうね。OSとして脆弱すぎ…

参考サイト

今後のために、そのいち。

0 件のコメント:
コメントを投稿

気づいたこと、不具合、ご意見など、コメント待ってます!