1227957618 はてブ閲覧時のリソース不足


長時間はてブを利用していると添付の画像の様に画面がぐちゃぐちゃになる事が頻繁にあります。
他のアプリのウインドウも激しく乱れ新たにプログラムを起動出来なくなります。
システムリソースが不足した時と酷似しています。

NT系ではDesktop Heapがリソースに相当するとの事なので、MSのDesktop Heap Monitorを導入しましたがUsed Rateが30~60%程度でも件のリソース不足のような挙動になります。
他のアプリの起動し過ぎの場合にはUsed Rateが95%以上でないと件の状況にならないようです。
その時にはフォントが大きく表示される等の挙動がありますが、長時間のはてブ閲覧時にはありません。

そこでお聞きしたいのは、はてブのページを沢山閲覧した時に特有のこの現象がDesktop Heapが原因でないのなら何が原因かという事です。
判りやすい技術的な説明か、説明の載っているページをご提示ください。

対処より寧ろ技術的な説明を求める質問ですのでご注意下さい。
またDesktop Heap Monitorのようにその原因の状態を数値で見られるソフトがありましたらご教示下さい。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/12/06 03:44:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

ポイント150pt

「Desktop Heap」の制限(3,072 KB)より先に「プロセス毎の GDI オブジェクト数」の制限(Windows 2000 の既定値:10,000個)に引っかかっているのではないでしょうか?

自分も Windows 2000 + IE6 で画面が崩れる事象に遭遇したことがありますが、

その時の原因は「GDI オブジェクト」が「9999個」を超えていた為でした。

<GDI オブジェクト数の確認方法>
1. [Ctrl] + [Shift] + [ESC] にて「タスクマネージャ」を起動します。
2. [表示] - [列の選択] メニューを選択します。
3. 「列の選択」ダイアログにて [GDI オブジェクト] にチェックを入れ [OK] ボタンを押下します。
4. 「プロセス」タブの IEXPLORE.EXE の欄の「GDI オブジェクト」の列を確認します。
  →「9999個」を超えると画面が崩れます。
<参考情報>
■ Windows XP または Windows 2000 でプロセスが GDI オブジェクト クォータを超えた場合、デスクトップのアプリケーション メニューが正しく表示されない
http://support.microsoft.com/kb/838283/ja

GDI オブジェクトの詳細(DC, Region, Bitmap, Palette, Font, Brush, Other 毎のオブジェクト数)は、以下のツールにより確認可能です。

■ GDIObj, sample program / gdiobj.zip
http://www.fengyuan.com/download.html
<GDI オブジェクト数の設定値の変更方法>
■ GDI Objects (Windows)
http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota

Windows 2000 の場合「256 ~ 16,384」を設定可能

■ tuneapp / Windows 2000 のチューンナップに関する設定を集めた小ツール(レジストリ変更ツール)
http://factory.sakura.ne.jp/tuneapp/

[カテゴリ] - [システムリソース] - [プロセス毎のハンドル数制限] - [GDI]

にて設定値を「10,000」→「16,384」に変更することが可能です。

なお、レジストリを変更した場合の保証は致しかねます。

変更される場合は、自己責任にてお願い致します。

id:sauvage

非常に詳しく且つ適格なご回答ありがとうございます。

ドンピシャかと思います。

コメント欄にお書きになった通り、GDIオブジェクト数が9999超えると画面が乱れるようです。

また一度増えると、他のページに移動したり、ウインドウの一部を閉じても、少ししか数値が下がらないようです。

リソースのリークに似ていますね。

但し、ブラウザを終了すると全て解放されるようで、画面のほうも問題が無い状態に戻ります。


Google Chromeの優秀さが目立っていますね。

Ajax隆盛時代のWebで引き起こされるこの問題を認識していたのでしょうか?


今試してみたら、OperaもGoogle Chrome程ではありませんが、GDIオブジェクト数があまり増えませんでした。

http://b.hatena.ne.jp/entry?mode=more&url=http://q.hatena.ne.jp/... のページで 646。

但し、スクロールすると2000程に増えますが。へんな挙動です。


MSのサポート情報ページがむちゃくちゃな文章で難渋していますが、読解し終えたらレジストリ変更してみたいと思います。


丁寧なご回答有難う御座いました。

2008/12/02 05:50:07
  • id:sauvage
    文字数制限で本文中に書けなかった事:


    ・Desktop Heapのサイズを2倍にしてみましたが、体感では効果は全然ないと言う感じ。

    ・特にはてブリニューアル後に顕著に思われます。

    ・環境

    WINDOWS 2000 Pro. sp4
    mem 1.5GB
    IE 6.0

    ・Desktop Heap MonitorのURLはこちら

    http://www.microsoft.com/downloads/details.aspx?familyid=5CFC9B74-97AA-4510-B4B9-B2DC98C8ED8B&displaylang=en
  • id:seble
    画像のどこがおかしいのだろう?よくわからん。
    ハードウェアが熱暴走でもしてんじゃないの?
  • id:sauvage
    画像でおかしい所:

    本来下にあるステータスバーが上の方にいっている
    ツールバーなどが吹っ飛んでしまっている
    HTML埋め込みの画像が幾つか読み込みできない
    タスクトレイのアイコンが見えない
    無駄なウインドウの作業域と枠の間に空白部分


    ブックマーク数の多いブクマページを選んで読み込んでいく事によって意図的に件の状態を発生させる事が出来、IE終了後は不具合ない状態に戻るので、熱暴走ではありませんね。
  • id:cx20
    > ブックマーク数の多いブクマページを選んで読み込んでいく事によって意図的に件の状態を発生

    こちら(Windows 2000 + IE6, Windows Vista + IE7)でも事象再現しました。

    ■ はてなブックマーク > 人気エントリー / ブックマーク数の多い順にソート
    http://b.hatena.ne.jp/entrylist?sort=count

    上記のブックマーク数の上位、1位と2位を IE で表示することで、画面が崩れる事象が発生しました。
    (やはり、GDI オブジェクトの数が 9,999 を超えると画面が崩れるようです。)
    以下は、ブラウザ毎の GDI オブジェクト数の比較結果です。

    ■ Case1:ブックマーク数1位のエントリー(3999 ユーザー)を表示

     ■ 東大で学んだ卒論の書き方★論文の書き方(公開:3999 ユーザー、非公開:1638)
     http://b.hatena.ne.jp/entry?mode=more&url=http://staff.aist.go.jp/toru-nakata/sotsuron.html
     
     <GDI オブジェクト(初期 → ページ読み込み後)>
     Windows 2000 + IE 6 : 134 → 5,993
     Windows Vista + IE 7 : 374 → 6,226
     Windows Vista + Firefox 3 : 164 → 7,003
     Windows Vista + Google Chrome 0.4 : 5 → 28

    ■ Case2:ブックマーク数2位のエントリー(3281 ユーザー)を表示

     ■ 「うわっ!こんなサービスウェブで無料公開してるの?」 (公開:3281 ユーザー、非公開:1551)
     http://b.hatena.ne.jp/entry?mode=more&url=http://q.hatena.ne.jp/1138362836
     
     <GDI オブジェクト(初期 → ページ読み込み後)>
     Windows 2000 + IE 6 : 134 → 5,246
     Windows Vista + IE 7 : 376 → 5,476
     Windows Vista + Firefox 3 : 165 → 6,891
     Windows Vista + Google Chrome 0.4 : 5 → 28
  • id:cx20
    MS のサイトに GDI オブジェクトの詳細を表示するツール(※)があったので IE の GDI オブジェクトの中身を確認してみました。
    (※ ただし、ソースのみの提供なので、コンパイルするには、Visual Studio .NET 2003 等が必要です。)

    見たところ、消費している GDI オブジェクトのほとんどがユーザーアイコンのものでした。
    更に、アイコンの種類によって、消費する GDI オブジェクトの個数が異なるようです。
    (正しく統計を取ったわけではないので、実際と異なるかもしれません・・・)

    <消費する GDI オブジェクトの個数(目安)>
    ・透過でないアイコン → 1個(静止画像のアイコン等)
    ・透過アイコン → 2個(人型のデフォルトアイコン等)
    ・アニメーションアイコン → 画像の枚数分?

    <参考情報>
    ■ Debug: Detect and Plug GDI Leaks in Your Code with Two Powerful Tools for Windows XP
    http://msdn.microsoft.com/en-us/magazine/cc188782.aspx
    ■ Code download available at: GDILeaks.exe (13,279 KB) / VC++7.0 ソースコード
    http://download.microsoft.com/download/c/0/b/c0b7c8fa-58f1-4815-aae7-ed18a4dc3f08/GDILeaks.exe
  • id:sauvage
    詳しい回答有難う御座いました。
    GDILeaks.exe についてはコンパイルできる環境が無いので検証出来ませんでしたが参考になりました。
    感じとしてはユーザーアイコン以外にもはてなスターが多いと件の症状に早くなりやすい気もします。

    また、はてなの開発の方はこの問題を認識しているのかが気になります。

    あと、いるかつけたはずなのに付いてませんでした。
    2回クリックしてしまったらしい…
  • id:cx20
    > GDILeaks.exe

    実際には、2つのツール(GdiUsage.exe / GDIndicator.exe)のソースが含まれています。
    以下は、GDIndicator.exe(GDI オブジェクトの一覧とその詳細を表示するツール)の実行例です。
    アニメーションアイコンの場合、複数の GDI オブジェクトとして処理されていることが分かります。

    <GDIndicator.exe 実行結果>
    ■ GDIndicator.exe 実行結果 / GDI オブジェクト一覧
    http://f.hatena.ne.jp/cx20/20081203040209
    ■ GDIndicator.exe 実行結果 / GDI オブジェクト詳細(その1)
    http://f.hatena.ne.jp/cx20/20081203035743
    ■ GDIndicator.exe 実行結果 / GDI オブジェクト詳細(その2)
    http://f.hatena.ne.jp/cx20/20081203035742

    > はてなスターが多いと件の症状に早くなりやすい

    GDIndicator.exe で見る限りでは、はてなスターのを複数個表示していても、
    GDI オブジェクトしては1つしか消費していないようです。
    同じ画像を複数表示される場合は、キャッシュされるのかも知れません。
    http://s.hatena.ne.jp/images/star.gif

    > はてなの開発の方はこの問題を認識しているのか

    どうでしょう?
    気づいているが、1ページ内に数千個の画像ファイルを表示するのはレアケースなので放置とか?
    もしくは、IE 以外のブラウザを使っているので、事象に気が付いていないとか・・・(だとしたら、ちょっと悲しいですが・・・)

    回避策としては、
    ・ページを分割する
    ・同じアイコンは URL を集約する
    ・画像をたくさん使っているページを読み込む場合は、IE 以外のブラウザを使用する
    とか、でしょうか・・・?
    (デフォルトアイコンを集約化しなかった理由が、どこかに書いてあったような気がしますが、失念してしまいました。)

    Google Chrome は、ほとんど GDI オブジェクトを消費しませんが、
    これは、Skia と呼ばれる 2D グラフィックスライブラリによるもののようです。

    <参考情報(Skia に関する情報)>
    ■ 【コラム】OS X ハッキング! (299) Chrome登場でWebKit / Safariはこう変わる!? | パソコン | マイコミジャーナル
    http://journal.mycom.co.jp/column/osx/299/index.html
    ■ Chromium Blog: Graphics in Google Chrome(Skia が採用された経緯について)
    http://blog.chromium.org/2008/10/graphics-in-google-chrome.html
    ■ Alp Toker >> Blog Archive >> Skia graphics library in Chrome: First impressions(Skia サンプルコード)
    http://www.atoker.com/blog/2008/09/06/skia-graphics-library-in-chrome-first-impressions/

    あと、参考までに、 Windows XP + IE8 beta の環境でも試してみましたが、IE6 とほぼ、同様の結果でした。
    (IE8 では、レンダリングエンジンが選べるようですが、デフォルト以外のケースはテストしていません。)

    ■ Case1:ブックマーク数1位のエントリー(3999 ユーザー)を表示

    Windows XP SP3 + IE 8 beta : 134 → 5,985

    ■ Case2:ブックマーク数2位のエントリー(3281 ユーザー)を表示

    Windows XP SP3 + IE 8 beta : 133 → 5,238

    なお、Windows XP + IE8 beta の Virtual PC の HDD イメージは、下記よりダウンロード可能です。

    <VHD ダウンロードページ>
    ■ Download details: IE App Compat VHD
    http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en
    ■ ダウンロードの詳細 : Virtual PC 2007
    http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=04D26402-3199-48A3-AFA2-2DC0B40A73B6
  • id:cx20
    一応、はてなアイデアに投稿してみました。改善されるかは分かりませんが・・・

    <はてなアイデア>
    ■ IE でブックマーク数の多いページを開くとリソース不足となり OS が不安定になる場合があるようです
    http://i.hatena.ne.jp/idea/22313

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません