Hatena::Groupwindows

CX's Memo(Windows関連)

[Latest] [Edit] [Config] [Help] | [Group] [Home] [PV:786746]
2006 | 04 |
2009 | 05 | 06 | 09 |
2010 | 02 |

2009-06-14

[][] Windows の限界に挑戦!?  Windows の限界に挑戦!? - CX's Memo(Windows関連)  を含むブックマーク はてなブックマーク -  Windows の限界に挑戦!? - CX's Memo(Windows関連)

「人力検索」で以下の質問(というか調査)をしてみました。

question:1244362964

お使いの PC で「メモ帳(notepad.exe)」が何個起動できるか教えてください。一番、多く起動できた方に「いるか賞」を差し上げます。

※ 注:以下の作業を行うとシステムが不安定になる可能性があります。実行は自己責任でお願いします。


■ メモ帳の起動方法ならびに個数のカウント方法

1. コマンド プロンプト(cmd.exe)を起動します。

2. 指定回数 notepad.exe を起動します(以下は FOR 文を使用して 100 個連続で起動する例です。限界まで繰り返します。)

  FOR /L %i IN (1,1,100) DO ECHO %i 個目 & notepad.exe

3. 起動した notepad.exe の一覧を取得します。

  tasklist /FI "IMAGE eq notepad.exe" /NH > tasklist.txt

4. 起動した notepad.exe を終了させます。

  taskkill /F /FI "IMAGENAME eq notepad.exe"

5. tasklist.txt 内の notepad.exe 個数をカウントします。

  find /C "notepad.exe" tasklist.txt

  <実行結果(例)>

  TASKLIST.TXT: 933 … notepad.exe の個数


■ 回答例(実行環境, 実行結果を記入してください。)

OS : Windows Vista SP2(32-bit)

CPU : Core2 Quad Q9550 2.83GHz

Memory : 3GB

個数 : 933 個

備考 : 補足事項等(個数を増やすために行ったこと等)あれば記入してください

結果は以下の通り。

NoID OS SP32/64CPU GHz Memory起動個数
1pspet Windows XP SP332Core 2 Duo E84003 GHz 2 GB 150
3kn1967 Windows Me   32    700 MB 38
4rsc96074 Windows Vista SP232Core 2 Duo E45002.2 GHz2 GB 591
5QuestR2 Windows XP SP332Celeron 1.7 GHz1.5 GB 114
6K-Papansa Windows 7 RC   64Coire i7 920 2.6 GHz12 GB 1174
7dev_zer0 Windows XP Home SP332AMD Sempron 1.5 GHz256 MB 196
8hisam_k Windows Vista SP264Phenom X4 9150e 2 GHz 8 GB 923
9kazubokkuriWindows 7 RC   32Pentium D 935 3.2GHz 4 GB 500
10Tommi Windows XP Pro SP332Core 2 Duo E85003.8GHz 3.25 GB 134
   Windows 2000 ProSP432PeniumIII 1.0 GHz512 MB 203
11skv101 Windows XP Home SP332Celeron 1.8 GHz1.5 GB 176
   Windows 7   32Celeron 1.8 GHz1.5 GB 800

予想通りというか、やはり、64-bit OS が複数プロセスの起動に強いという結果になりました。

また、想定していた計算式は以下の通り。想定の範囲内の結果でしたので、計算式は、そんなに間違ってないのでは?と思います。

OS 32/64計算式(想定)起動個数(想定)
Windows 2000 32( 3072 KB - χ KB) / (512 bytes * 26) 223 個
Windows XP 32( 3072 KB - χ KB) / (512 bytes * 32) 181 個
Windows Vista32(12288 KB - χ KB) / (512 bytes * 32) 757 個
Windows Vista64(20480 KB - χ KB) / (512 bytes * 32) 1269 個
Windows 7 32(12288 KB - χ KB) / (512 bytes * 32) 757 個
Windows 7 64(20480 KB - χ KB) / (512 bytes * 32) 1269 個

計算式=(デスクトップ ヒープのサイズ - OS 起動時の消費サイズ) / メモ帳1個の消費サイズ

OS 起動時の消費サイズ=χ:164*1として計算

メモ帳1個の消費サイズ=512 bytes*2× User オブジェクト数*3

*1Windows 2000 の結果をベースに算出。他の OS では異なる可能性があります

*2Desktop Heap Monitor にて算出。実際と異なる可能性あり。

*3XP 以降は「ステータス バー」の追加等により User オブジェクト数が増えていると思われる

notepadnotepad2011/02/17 19:371058個のnotepadを起動できました
Windows XP SP3 32bit
Xeon 2.80GHz(HT on) 2.25GB RAM
デスクトップヒープは20480に設定

cx20cx202011/02/17 22:06notepad さん>
XP でも頑張れば(設定変更すれば)1000個越えできるんですね。情報ありがとうございます。
ちなみに、Windows Vista の初期のバージョンのデスクトップヒープは XP と同じく、3MB だったようです。

<参考情報>
■ USER オブジェクトと GDI オブジェクト – 第 1 部
http://technet.microsoft.com/ja-jp/windows/ff606443.aspx

> Windows Vista 32 ビットの最初のリリースでは、対話型のヒープ サイズは
> 以前の 32 ビット バージョンの Windows と同じで 3 MB でした。
> リリース後に、ヒープをときどき使い果たしてしまうユーザーがいることが
> 遠隔測定によってわかったので (おそらく、より多くのメモリを持つシステムで、
> より多くのアプリケーションを実行していたためだと思われますが)、SP1 では、
> このサイズが 12 MB に引き上げられました。

notepadnotepad2011/02/18 19:58画像をたくさん貼り付けた大きなWordファイルの編集で
Wordが落ちてしまうなどXPでも作業によってはヒープサイズが3MBでは
少なすぎると思うのですよね
もともと512MB以下のメモリがメーカーPCの標準だった時代だから
それでもよかったのかもしれませんけど
SP1でVistaがわりと安定するようになったのは
ヒープサイズのOS標準設定の拡大も大きかったと思います
これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり
気の向くままにgoogle検索を繰り返していると
タブが開けなくなったりします
特殊なアプリケーションを使ってメモリの上限に達する場合より
クライアント数のリソース値による上限に達するほうが速いと
思われますからこの辺の知識はWindows上で作業するなら
持っていても損のない知識だと思います

notepadnotepad2011/02/18 20:09>これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり
というのはVistaの標準設定である12 MBのデスクトップヒープです
蛇足ですいません

cx20cx202011/02/18 20:57>これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり

タブが開けなくなる理由は、デスクトップヒープが原因のケースもあると思いますが、
多くは、プロセス毎のGDI オブジェクトの上限(10,000個)が原因な気がします。
GDI オブジェクトの上限に達しているかどうか?は
[タスクマネージャ] - [プロセス] - [表示] - [列の選択] - [GDI オブジェクト]
で確認できます。
ちなみに、Google Chrome だと、タブを沢山開いても、GDI オブジェクトをほとんど消費しないようです。

<参考情報>
■ はてブ閲覧時のリソース不足 - 人力検索はてな
http://q.hatena.ne.jp/1227957618
■ Windows の限界に挑む: USER オブジェクトと GDI オブジェクト – 第 2 部
http://technet.microsoft.com/ja-jp/windows/ff621348

notepadnotepad2011/02/19 15:45GDIProcessHandleQuotaとUSERProcessHandleQuotaをいじることで
上限を変更することができるようですね
taskmanagerで確認してみましたが
一番多くGDIオブジェクトを利用しているプロセスはexplorerでした(4141)
tab数46のIE8はもっとも多くGDIを消費しているプロセスで1525
ftp://www.ashisuto.co.jp/pub/sybase/TechNote/1019174.pdf
などを見ると15000程度でOSが不安定になるようであまり積極的にいじるべきではない
パラメータのようですね

cx20cx202011/02/20 08:02> などを見ると15000程度でOSが不安定になるようであまり積極的にいじるべきではない
> パラメータのようですね
ある種のOSの設計上の限界なんでしょうね・・・
セッションあたりのGDIオブジェクトの限界(各プロセスの合計)が65,535(0xFFFF)というのも
16bitのWindowsの仕様を引きずっているようですし。

> tab数46のIE8はもっとも多くGDIを消費しているプロセスで1525
1500個くらいであれば、まだ大丈夫そうな気がします。
Web ページの作りにもよると思いますが、昔、経験した事象ですと、
はてなブックマークで大量にブックマークされたページを表示すると
同様にGDIオブジェクトも消費(1アイコンに付き1個消費)してました。

<参考(GDIを大量消費するページ)>
■ はてなブックマーク - 東大で学んだ卒論の書き方★論文の書き方(ブックマーク数:7000件)
http://b.hatena.ne.jp/entry?mode=more&url=http://staff.aist.go.jp/toru-nakata/sotsuron.html

IE8 が手元に無いため、今、確認することができませんが、
IE9 RC 版だと、描画方法が改善されたらしく、GDI オブジェクトはそれほど消費しなくなっているようです。
(恐らく、描画方法が、GDI→DirectX になった為と思われます。)

<参考>
■ ASCII.jp:DirectXで進化したInternet Explorer 9を試してみた|あなたの知らないWindows
http://ascii.jp/elem/000/000/510/510714/index-2.html

LuellaLuella2012/02/16 05:16Cool! That's a cleevr way of looking at it!