時深彼方の日々徒然

Flash Playerに見る様々な問題点

2015/05/06 17:16 投稿

コメント:4

  • タグ:
  • AdobeFlash
  • DMM.com
  • 千年戦争アイギス
  • 時代は変わった……
  • audiodg.exe
  • Firefox
  • 32bitの罠
2016年9月8日追記
 本記事は既に古くなっていますのでアテになりません。
 ・・・が、HTML5で動くアプリもFlashPlayerで動くアプリも、ここしばらく重いばかりですね。それなりに良い環境で動かしている筈なんですが・・・。
 ちなみにアイギスは、ぶらぶらネットサーフィンして戻ってくると「out of memory」のエラーが出て起動せず(ブラウザの再起動が必要)。Firefox Dev. Editionでは、いよいよフリーズして動かなくなった。厳密には動いているのだが、HTMl5のスクリプトの処理系統に問題があるようで、固まったと同時にCPUの使用率が1コアだけ100%になり、すぐに別のコアが100%になり、となり、コストを10貯めるのに1分以上かかる。どうやらプリフェッチに失敗しているか、スクリプトのパイプライン処理に問題があるか、あるいはセマフォ・ライブロックといったメモリアクセスか演算系で躓いている模様。32ビット版Firefoxだとフリーズしにくい、と追記しておく。
 ちなみに、ウェブブラウザが全体的にメモリリークの傾向が見られる。動的ページ、Ajaxなどのテクノロジは資源(リソース)をゴリゴリ削っていくのは逃れられない宿命のようだ。


……などと謳っているものの、実際はHTML5もCSSも、果てはGoogleのホームページからニコニコ動画まで含む、つまり似たような、あるいは似通った話である。アドビシステムズ株式会社さんに(そこまで)恨みはないものの※1、もっとも分かりやすい話であるので、あえてこのようなタイトルにさせて頂いた。
 途中にいろいろ挟んでいるものの、内容としては有用だと思うので(自画自賛)、気になる人はサッと読んで貰えると嬉しい。

 ちなみにDMM.comさんによる「千年戦争アイギス」をFirefoxでプレイ中にハングアップ・ブラウザクラッシュする人にとっては割と有用な問題かもしれない、と一応書いておく。それっぽい記事を探したものの、出てこなかったので。

 なぜかGoogle検索で上位に表示されるようになっちまったので色々と加筆訂正しています。
【追記2015年12月9日 さらに12月18日 追記と訂正あり】

※1:Macromediaを買収した話を除く


 さてさて過激なタイトル(ニコニコ風に言うなら「煽っていくスタイル」か?)にしたのには理由がある。
 私は暇な時間にゲームを嗜んでいる。最近はDMM.comさんの「艦隊これくしょん -艦これ-」や「千年戦争アイギス」にハマっており、仕事にならない時(雨の日や深夜など)は、これらのゲームをプレイしている。
 事の発端は、その「千年戦争アイギス」から始まった。

■問題はメモリリークによるものなのか?
 ゲームをプレイしている最中に、突然ウェブブラウザが落ちたのだ。
 Firefoxの小窓(Firefoxは動作不良でダウンすると、自動的に起動するクラッシュリポーターウインドウがある)には、いわゆる「申し訳ありません」の文字が。最初はメモリリークによるものかと思ったのだが、どうも違う。再現性があるのだ。しかも完壁ではない再現性である。
 趣味プログラマとしては、こういう「微妙に再現性のあるような無いようなバグ」というのは気になって仕方がない。しかし千年戦争アイギスは時間単位で回復するシステム(それ以上の行動をするためには通称「結晶」を割らなければいけない。パズドラと似たようなシステムといえば分かるか?)を採用している。せっかく溜め込んだ結晶をパリンする前に、どこが原因でクラッシュしたのか、を探さねばならない。

 もちろん、このゲームに限らず過去に何度か「動作中に不安定になった」ということはあった。ニコニコ動画で動画再生中にフリーズしてFlashPlayerプラグインがまとめてハングアップしたり、普通にウェブブラウジングしていてフリーズすることがあった。
 そこで例外なく当てはまったのが「Adobe Flash Player」が動作していたことだったのだ。ご存知のとおり、ニコニコ動画では動画再生にFlash Playerを使っているし、最近ではウェブページの広告すらFlashで作られていて、しかも動画が再生される広告だったりする。(性質が悪いことに、Flash(or HTML5)+ムービーの広告はマジで重い)

■問題は、あるイベントから始まった。
 千年戦争アイギスを引き合いに出す(というよりサンプルとして提示する)理由として、過去のミッション(イベント)の中に、「ヴァンパイアの逆襲」もしくは「砂漠に眠る財宝」というものがあり、どうもこのあたりから顕著にゲームシステムが不安定になっていた。すでにイベントは終了しているものの、その前にあった「錬金術師と賢者の石」では特にひどい問題ではなかったのだ。(実際には「ドルイドの巫女姫」あたりから不安定さが少しずつ増していたのだが)
 スタンプカード新システムがこの頃に実装されるものの、実際にユーザーが操作するようなUIではないので除外。
 トラブルが起きるのが、もっぱらゲームプレイ中、しかもユーザーが操作するタイミング(ユニットを設置するタイミングや早送り中)であったので、メモリやCPUの使用状態を監視し続けた結果、まずは環境依存問題がひとつ目にあった。

■Audiodg.exeが、メモリを食い潰し始めた。→対応する
 Audiodg.exeはWindows搭載のオーディオ関連の「まとめ役」的なプログラムである。実行ファイルには「Windows オーディオデバイスグラフアイソレーション」と説明がある。Microsoftサポートには、このプログラムによるメモリリークに対応するためのパッチがある。
私がダウンロードした時はベータだったが、今は正規の修正プログラムになったのだろうか。
 まぁとりあえず、このAudioDG.exeが、物理メモリを占有し始めたのだ。そして1GBほど食べると、突然何も仕事をしなくなる。つまり音が出なくなるのだ。
 千年戦争アイギスをプレイ中に注意深く使用状況を確認したところ、効果音(SE)やBGMの再生開始時にAudioDG.exeがメモリを食い、開放しないまま次の効果音が鳴り、そこでまたメモリを食い、を延々と繰り返していた。
 こりゃあいかん、とパッチをダウンロードしてインストールしてみたものの、効果なし。このAudioDG.exeは音楽を再生する時に(簡潔に申し上げれば)サウンドデバイス(あるいはデバイスドライバ)とWindowsをつなぐ橋渡しをしているようなもので、そうなるとサウンド関連のデバイスドライバ側からAudioDG.exeをコールする時(これ、もしかして順番逆?)に何か問題が起きていると判断した。
 で、サウンドカードのデバイスドライバにAudioDG.exeを使わせない(使わせないという表現が正しいかどうかはさておき)方法として、
 [Windows7 SP1では]コントロールパネルからサウンドを選択、現在使っているサウンドカード(オンボードだとSoundMAXやRealtekのデバイスが多い)のスピーカーを選択して、ウインドウ右下の「プロパティ」を押す。タブ一覧に「拡張」という項目があればそれを選択し、「すべてのサウンド効果をオフにする」をオンにして、OKボタンを押す。
 これで、AudioDG.exeにあれこれと仕事を押し付けなくなるので、AudioDG.exeの問題は片付くはずだ。実際に、私はこれ以降、AudioDG.exeによるメモリリークの問題からは開放された。

■ウェブブラウザが落ちる、メモリリーク?→対応する
※2015年12月現在、アップデートによってかなり改善されています。
 さて、AudioDG.exeさんを対応しても、まだ落ちる。最初はAudioDG.exeによるメモリ圧迫かとも思ったのだが(ブラウザがサウンド再生を伝えるが、Audiodg.exeがハングしていて巻き込まれたのだとばかり思っていた)、しかし私のマシンは物理メモリ16GB、スワップ(仮想メモリ)はゼロである。空き物理メモリは10GB以上残っているFirefoxのメモリ使用量は1GB程度(タブ30枚くらい開いているだけ)・・・これはおかしい。
 そこでウェブブラウザに目を向けてみた。Firefoxは通常x64(64bit環境)ユーザーにおいてもx86版、つまり32bit版が提供されている。しかし実は、Firefox Developer Editionというベータ版ながら64bit環境が提供されているのだ。こいつをインストールしてみる。
 32bit版の環境が残っているが、ツール>オプション>一般の中に、Firefoxと同時起動を許可するという項目があり、これをオフにするとFirefox Developer Editionで32bit版のFirefoxの中身を引き継ぐことができるようになる。(当然、32bit版Firefoxは一旦封印)
 実際に導入してみて分かったのは、[注:筆者の環境では]32bit版ではFirefoxが1.2GB以上のメモリを使用すると動作が極端に不安定になり、2GB近い物理メモリを使用しようとすると突然死する、ということだった。Firefox Developer Editionは現在過負荷テスト中だが、1.3GBを超える物理メモリ使用でもスイスイと動く。おそらく4GiBの制約(32bit版では4GiBまでしかメモリを確保できない)から開放されたことによるものだろう。

■残っているものはFlashPlayerだった。→対応する 無理なんとかなりそう
※FlashPlayerアップデートで結構トラブルは減ってきました。

 で、最後に思いつくのはFlash Playerだった。ただでさえ最近、冗談ではないようなアップデート頻度だったので、バグが発生しやすいとするならここしかないだろう、と。ちょうどここでスタミナとカリスマが回復したので、千年戦争アイギスを起動して、曜日ミッション「空からの贈物・極級」をプレイしてみた。
 ブロマガではたぶん画像の貼り付けができないのでテキスト起こしになるが、この数字を見ていただきたい。

Firefox.exe (*32ではないので64bit動作)
CPU使用率27%(我がマシンは Intel Core-i7 4770である)
メモリ(プライベートワーキングセット):5,171,348K
メモリ(コミットサイズ):6,424,740K

 FlashPlayerは執筆時最新、17 NPAPI版である。
 見て分かる通り、瞬間的にではあるが最大で6.4GBものメモリを要求して使っている。32bit版ではプラグインは実行ファイルとは別枠として動作しているようだが、ゲーム開始前のFirefoxのメモリ使用量は1.2GBしかない。千年戦争アイギスを起動すると400MB程度のメモリを使用するが、それでも差分は4.5GB近くはある。
 これでは32bitモードで動作しているアプリケーションはメモリが確保できずにダウンして当然である。しかも「早送り」(倍速)にすると、SEの再生タイミングも早くなるため、メモリをもっと一気に確保する必要が出てくる。
 これではクラッシュするのは当然である。
 32bit版Firefoxで何度か試して分かったことなのだが、等速では滅多に異常終了を起こさず、倍速にするとクラッシュする頻度が上がる(というかほとんどクラッシュする)。しかもこれは「モンスター出現時」に限って発生する傾向がある。64bit版ではまだテストしきっていないが、この分だとクラッシュする可能性が非常に高い。理由は、Flash Playerが64bitに対応していないからだ。※注:Adobe Labsでベータ版がダウンロード可能なようだが、アクセスしても通常版のFlash Playerのダウンロードページに飛ばされるだけ。仮に現在インストールされているAdobe Flash 17 NPAPIが64bitだったとしても、本当に64bit版なのか確認する手段が分からない。
 これでは問題は解決できない。
 というか、音を再生するのになんでメモリを4GBも瞬間的に消費するのか。謎である。しかも、SEを再生し始めるか再生が終わると、メモリが開放されて、一気に3GBくらいメモリ使用量が減少する。「艦隊これくしょん -艦これ-」ではこのような問題は発生しないので、おそらく「千年戦争アイギス」のほうに問題があると思われる。
 追記
 Firefox Developer Editionはともかく、Adobe Flash 20.x (x64対応)がダウンロード可能になり統合されました。わりと安定して動作しています。

■「公式」に問題を報告してみた。
 こんな辺鄙なブロマガで書いたところで見向きもされないだろうから、トラブルが発生し始めた頃に公式にメッセージを送ってみた。
すると、こんな返事が戻ってきた。
>メモリ不足かもしれないから不要なタブやウインドウは閉じてね
>ページキャッシュサイズを1024MBに設定してね
>タブの数を減らしてね
>GoogleChromeにウェブブラウザを変更してね

 全滅である。
 メモリ不足話は先の通り、64bit版でガンガン使えるようになっているので問題ない
 キャッシュサイズは1024MBに設定してある
 タブの数を減らすといっても動作不安定になるような数ではない。
 GoogleChromeはユーザー情報をガンガン吸い取ろうとするトロイの木馬のようなものだと認識しているので一度たりとも触りたくない。(調べればすぐに出てくる情報)

【追記2015年12月9日 追記】
 ここしばらく、どうやら64bit版でプレイできない様子。いろいろと試してみるが、どうも相性がよろしくないようだ。
 残念ながら32bit版でプレイするほか無い様子だ。
 メモリリークは結構解消されてきたようだが、しかしながら相変わらずメモリを食いまくるので、重くなってきたら再起動させるしかなさそうだ。
 また、Flash Playerのバージョンが20になったが、残念ながら動作は確認できず。

【追記 2015年12月18日】
 本日、プレイ中にブラウザを再起動させてみたところ、突然スタート画面から動かなくなりました。またもFLASH Playerかと思いましたが原因はそれだけではないようです。
 動作を追いかけてみたところ、Firefoxに保存されているデータそのものにトラブルが起きやすい模様。これはキャッシュ削除を行っても改善しないところから、どうやらプロファイルデータのほうで問題が発生している模様。いまのところ推定されている条件は以下のとおり。

1.たくさんのタブやページを開いていて、Flash Playerが頻繁に使われている。
2.ブラウザがメモリをたくさん消費している。
3.1と2が重なりデータの保存のタイミングで何らかの衝突が起きている

 てっとり早い方法が、こちら
https://support.mozilla.org/ja/kb/refresh-firefox-reset-add-ons-and-settings
 Firefoxのリフレッシュである。プラグインは全部削除されるものの、Cookieやお気に入り、パスワードなどは引き継がれます。壊れかけのプロファイルは放棄する(厳密にいえば最新規格にあわせて作り直している)ので、トラブルが起きていていまいちよく原因が分からないというときには試してみると良い。
 レイアウトなどは初期化されてしまうが、かなりの不具合はこれで直りそうです。(実際に直りました)
「メニューバー(ファイルとか編集といった画面上部のバー)どこ行った!?」という方は、Firefox表示中にAltキー(Windows)を押せば出てきます。

■本題-Flash Playerに見る様々な問題点
 昨今、ウェブページに情報を凝縮しよう、とか、高機能にしよう、という動きが激しい。
 ゲーム、広告、ポップアップ等々、回線高速化やブラウジング環境の高性能化にかこつけて、ウェブページをダイナミックページにしすぎている、と私は思う。
 このブロマガを購読している方はニコニコ動画の・・・確か「原宿」あたりのバージョンで、ページの表示が刷新された(激重化された)ことに反感を覚えたユーザーも居ると思う。また、GoogleのトップページにHTML5で施された変な機能(まるっきり検索の邪魔)、Ajaxを活用したサジェスト&リアルタイム検索、果ては検索結果ページでリンクをクリックすると、Googleのリダイレクトで白紙ページを挟んでリンク先に到達すること等々。情報を調べるためにWiki(Pediaのほうではない)を開けば、どこもかしこも広告まみれ。
 昨今のウェブページはダイナミックではあるものの、どうみても情報過多なうえ、開くだけでCPUが高温になる呪いのページと化している。しかもダイナミックなページにしたのは良いものの、ウェブサーバが大量のリクエストに応えるまでにタイムラグがあり、最悪、広告が読み込めないという理由でページの表示に時間が掛かるという超々ヘタレな状況に陥っている。
 FlashPlayerに至っては、ダウンロードしようとするとウイルスチェックソフト(但し駆除はしない?)まで押し付けようとする始末である。しかもバージョンアップ毎に機能追加と称して動作が緩慢になる始末である。
 各種フリーソフトにしてもそうだ。インストールするときに次へ、次へをそのままクリックすると、各種変なアプリも漏れなくてんこ盛りでインストールされる始末である。
 お前らいい加減にしろ。

■結局、どうすればいいのか。
 はっきり言えば、どうにもならない。
 恐らく、どのアプリケーションとかプラットフォームも、継接ぎで肥大化したソースコードや最新規格のコンピュータを基準にして作っているものが殆どだと思うので、利用者側でそれらを考えて、応急処置的な方法で解決するしかない。
 今回は分かりやすく千年戦争アイギスとAdobe Flash Playerを引き合いに出したものの、それ以外のアプリケーションや、それに付随するプラグインなんかも最近のものは結構ひどい。ハードウエアやオペレーティングシステムとの兼ね合いなんかもあるだろうから、各々が出来ることを少しずつやるしかない。

■まとめ
 バグの無いプログラムなんて存在しないけど、デファクトスタンダードになったから、とか、有名になったから、代替ソフト・コンテンツがないからって、ユーザーの声を「聞かなかったことにしてしまえ」「テンプレで返事しておけ」とするのは、業界の、あるいは会社の凋落を自ら引き起こしているのだよ、と、大きな声では言えないものの、主張しておきたい。
 
 iPhoneがFlash Playerを導入しないのも、MicrosoftがSilverlightを作ったのも、HTML5でWebGLやマルチメディア対応していることも、結局のところ、Adobeが圧倒的シェアで有頂天になっていたのが原因なのではないかな、と、私は常々思っているのだが、果たしてどうなんだろうね、これは。

コメント

時深彼方 (著者)
No.2 (2016/03/19 07:11)
 はじめまして。Flash Playerのメモリの馬鹿食いは相変わらず良くなりませんね。
 使用メモリが3GB程度まで進むと、もはや何も言うことを効かない状態になります。ニコニコ動画にしてもゲームにしても、どうもメモリリークがし易いのか、あるいはガベージコレクトが「存在しない」のか。
 千年戦争アイギスならば「召喚」をしまくれば、あっという間にメモリリークでハングアップですね。対処方法もないので困ったものです。
火狐使い
No.3 (2018/06/23 08:49)
乙です。Google Chromeの個人情報すっぱ抜く機能が嫌なら、Googleの魔の手が入ってるところを取り除いたSRwere ironってのがおすすめですよ。(ちなみに煩わしいということで自動アップデート機能もついていません)
時深彼方 (著者)
No.4 (2018/06/24 04:31)
>>3
 コメントありがとうございます。古い記事で申し訳ないのですが。にしても、「魔の手」ですかw
 IEは機能封印して、Firefox Dev版のみ使用しています。最近は、あまりアイギス・・・というよりブラウザゲーをしなくなってしまいましたが。相変わらずFirefoxは3~4GB程度のメモリをもりもり食っています。
 chrome系って何がいいんでしょうかね。軽い、以外の評判は聞きませんし、そもそもFirefoxも別に重くないので、ブラウザを乗り換える動機にはならないんですよね。(例えばchromeでしか動きません、っていうものを配信している段階で、ウェブ標準から外れたことをしていないか?という疑念に駆られます。まあ、IEでしか動きませんというシステム入れちゃってるんですが。EdyとかEdyとかEdyとか)
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事