最近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がおきるの?
みくみくまうすを起動して見守ってもらっているときに突然こんなダイアログメッセージがでてきます。なお、誰が見守ってても起きるときは起きるし、起きないときは起きないです。強いていえば、起動してからある程度時間が経過してから発生するような感触です。
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を擁護する意見で締められていました。気持ちはわかりますが。
ほかにも結構な量の記事が散見されました。みんな同じような現象に行き当たっていますが、明確な解決方法は見当たりませんでした。残念。
対策は?
結局解決策はわからずじまいでした。とはいえ、おまじない的にページファイルを作成しない設定はしておきました。しばらく様子を見たいと思います。
以下、多かったアドバイスです。
- メモリテストを実行してみる。
- BIOSやドライバ類を最新にする。
- ページファイル作らないようにしたらどうかな
このうち、1と3を実行しました。
1.のメモリテストの結果は問題ありませんでした。
3.のページファイルを作成しないよう、設定してみました。
これでしばらく様子を見ようと思います。
まとめ
ネットを調べる限り、UnityでBSODが発生するケースはままあるようです。しかしその解決策ははっきりとはしませんでした。いくつかアドバイスがあったので試してみて、しばらく様子を見たいと思います。
私の古いマシン、Windows 10をインストールするときに最新版を集めてきてインストールしたはずなんだけどなぁ、一年前くらいに。またmemtest86、時間があるときにやってみたいと思います。
でも、アプリケーションがクラッシュしただけなのになぜOSが落ちるんでしょうね。OSとして脆弱すぎ…
参考サイト
今後のために、そのいち。
Unity - マニュアル: Windows のデバッグ (Version: 5.4)
UnityをWindowsでデバックするときに読むマニュアル。Utilizing crash.dmp files | Unity Community (2013-2-1)
crash.dmpを解析する方法のアドバイス。Windowsでブルースクリーンの原因を解析する方法のまとめ: 小粋空間 (2015-4-21)
Windowsでブルースクリーンになったとき、minidmpと呼ばれるファイルが作成されます。そのファイルの見方について説明されている記事です。Blue screen of death (STOP error) information in dump files. (????-??-?? Version 1.55)
上の記事で紹介されているツールの配布サイトです。ツールは古めですが使えました。正しく解析できているのかどうかはよくわかりません。Windows10でメモリ診断を実行してエラーチェックを行う方法 | Win10ラボ | Windows10の使い方と情報サイト (2016-01-03)
タイトルまんまのわかりやすい記事です。いまってWindows 10だけでメモリテストできるんですね。昔はmemtest86とか使ってたのに、時代は変わったなぁ。Memtest86で10周チェックとか意味あるのか? - ぼくんちのTV 別館 (2016-08-31)
なつかしのmemtest86の記事です。夜に時間があるときにやってみよう。
気づいたこと、不具合、ご意見など、コメント待ってます!