WindowsVista、XPでは、同時接続数が10に制限されています。

この制限に達したかどうかは、どうすれば知ることができるのでしょうか?
今現在の、同時接続数の数でもかまいません。

イベントログに記録されているでしょうか?
どこかのログファイルに書き出されたりするのでしょうか?
管理メニューのどこかに表示されているのでしょうか?

ご存知の方、教えてください。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/07/03 09:46:48
  • 終了:2007/07/05 14:18:27

回答(6件)

id:ivory-star No.1

ivory-star回答回数29ベストアンサー獲得回数32007/07/03 10:56:51

ポイント5pt

共有フォルダ・IPC接続の接続一覧であれば、管理ツールから確認することができます。


  1. コントロールパネル→管理ツール→コンピュータの管理を起動。(クラシック表示/XPの場合)
  2. 左ペインより、システム ツール→共有フォルダ→セッション

または、コマンドプロンプトから「net session」でもOKです。

接続数を数えたいのであれば、コマンドの実行結果をカウントする方が楽でしょうかね。

id:xml-document1

回答ありがとうございます。

ところで、これにはIISの接続数がカウントされていないように思います。

実際にウェブブラウザ経由で該当マシン(Windows Vista または XP)に接続しても、net sessionコマンドでは接続数が増加しませんでした。

Windows Vista または XPでは、共有フォルダへのアクセス数と、IIS経由での接続数の合計が10まで、と認識しています(間違っていればご指摘願います)

この両方の接続数をカウントできる方法があれば、それも合わせて教えてください。

よろしくお願いします。

2007/07/03 13:32:02
id:KazyN No.2

KazyN回答回数352ベストアンサー獲得回数322007/07/03 11:05:17

ポイント5pt

コントロールパネル⇒コンピュータの管理⇒「共有フォルダ」のところで接続されているフォルダやセッション数が確認できます。

id:xml-document1

回答ありがとうございます。

上にも記載の通り、IIS経由の接続数も合わせてカウントしたいのです。

説明不足でしたが、ご存知の方、ご教授お願いします。

2007/07/03 13:33:35
id:toppachi No.3

toppachi回答回数63ベストアンサー獲得回数02007/07/03 12:51:24

ポイント15pt

コントロールパネルのコンピュータの管理にある、

「システムツール」->「共有フォルダ」->「共有」

にクライアント接続数が表示されますが、これでいかがでしょうか?

id:xml-document1

回答ありがとうございます。

上にも記載の通り、IIS経由の接続数も合わせてカウントしたいのです。

説明不足でしたが、ご存知の方、ご教授お願いします。

2007/07/03 13:34:09
id:ardarim No.4

ardarim回答回数892ベストアンサー獲得回数1422007/07/04 03:13:31

ポイント30pt

とりあえず、リアルタイムではないですが、イベントログに記録されることはわかりました。

イベントID 4226が記録されるようです。

Changes to Functionality in Microsoft Windows XP Service Pack 2

Part 2: Network Protection Technologies

(Wordファイルなので注意)

The TCP/IP stack now limits the number of simultaneous incomplete outbound TCP connection attempts. After the limit has been reached, subsequent connection attempts are put in a queue and will be resolved at a fixed rate. Under normal operation, when applications are connecting to available hosts at valid IP addresses, no connection rate-limiting will occur. When it does occur, a new event, with ID 4226, appears in the system’s event log.

また、これまたリアルタイムではないですが、PortReporterを使うことにより、netstatで取得できる情報を動的にログ保存できます。

@IT:Windows TIPS -- Tips:Port ReporterツールでTCP/IPの通信状態を調査する

id:xml-document1

netstatはリアルタイムで情報を取得できないのですね・・・

接続数が9に達したことを何らかの方法で保守エンジニアに通知したり、10に達してしまったら自動でOSを再起動したりといったことをしたいのです接続数の数さえ分かれば、後の処理はこちらで構築することができます。

(これも先に説明すればよかったですね。。)

有力な情報をお持ちであれば、引き続きお願いいたします。

2007/07/04 09:18:00
id:mj99 No.5

mj99回答回数138ベストアンサー獲得回数382007/07/05 00:25:58

ポイント30pt

パフォーマンスモニタを使って「警告」を発生させてみてはどうでしょうか。

Windows 2000 でパフォーマンス モニタの警告を作成および構成する方法

�p�t�H�[�}���X���O�ƌx��


共有フォルダ接続数を示すカウンタは、

パフォーマンスオブジェクト:Server

パフォーマンスカウンタ:Server Sessions


IISの接続数を示すカウンタは、

パフォーマンスオブジェクト:Web Services

パフォーマンスカウンタ:Current Connections


----

おまけ

Performance Counter Classes (Windows)


VBSで監視することもできます。

(注)下記スクリプトは無限ループです。Wscript.exeで実行すると止められなくなります。

下記のようにコマンドプロンプトからCScript.exeで実行してください。

CScript.exe foo.vbs

停止は、Ctrl+Cで。


----

以下、ソース。

Option Explicit

Dim strComputer
Dim objWMIService, objRefresher
Dim objWebService, objWINSServer, objItems

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")

Set objWebService = objRefresher.AddEnum(objWMIService, _
  "Win32_PerfFormattedData_W3SVC_WebService").objectSet
Set objWINSServer = objRefresher.AddEnum(objWMIService, _
  "Win32_PerfFormattedData_PerfNet_Server").objectSet

Do While True
    objRefresher.Refresh
    Wscript.Echo Now()
    For Each objItems in objWebService
        Wscript.Echo "(IIS接続数)" & objItems.Name & ":" & objItems.CurrentConnections
    Next
    For Each objItems in objWINSServer
        Wscript.Echo "(WINSセッション)" & objItems.Name & ":" & objItems.ServerSessions
    Next
    Wscript.Sleep 2000
Loop
id:xml-document1

有力な情報、ありがとうございいます。

のちほど、ソースは確認させていただこうと思います。

2007/07/05 14:09:12
id:ardarim No.6

ardarim回答回数892ベストアンサー獲得回数1422007/07/05 02:15:01

ポイント30pt

とりあえずスクリプトを書いてみました...が、本当にこれであっているかどうか確認ができていません。(手元に共有マシン環境もIIS環境もないので)


(1)下記をコピペして、test.vbs等の名前で保存します。

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_PerfFormattedData_PerfNet_Server")
For Each objItem in colItems
    Wscript.Echo "共有フォルダのセッション数: " & (objItem.ServerSessions - 1)
Next

Set colItems = objWMIService.ExecQuery("Select * From Win32_PerfFormattedData_W3SVC_WebService")
On Error Resume Next
For Each objItem in colItems
    Wscript.Echo "IISの接続数: " & objItem.CurrentConnections
Next
if error.err <> 0 then
    Wscript.Echo "IIS not found"
end if
On Error Goto 0

(2)コマンドプロンプトから、「CScript test.vbs」を実行します。


蛇足ですが、正規のやり方ではないので自己責任で、ということになりますが、接続数10の制限を解除する(緩和する)方法もあります。

Event ID 4226 Patcher

http://jp.bitcomet.com/4226/index.html

最大接続数の「10」という定数は、TCPIP.SYS内で固定の数値として埋め込まれていますが、これを改変して10個以上を可能にするというものです。

Event ID 4226で検索するといろいろ情報が出てきます。

id:xml-document1

みなさん、いろいろな回答ありがとうございました。参考にさせていただきました。

ひとまず、ここで質問を終了します。

2007/07/05 14:16:05
  • id:ivory-star
    ivory-star 2007/07/03 14:35:59
    >この両方の接続数をカウントできる方法があれば
    ちゃんと確認できるか自信ないので、コメントから失礼します(^^;


    共有接続にしろIISにしろ、TCP接続が確立されているはずなので、コマンドで「netstat -p TCP」と入力すれば、一応TCP接続一覧を表示できます。
    ただ、外部からの接続だけでなく、ブラウザ等の接続も含まれるので、ポート番号あたりから絞り込まないといけません。ちょっと面倒です。


    今、手元にIIS環境がないので、実際に確認できていません。
  • id:xml-document1
    コメントありがとうございます。
    私自身も深い知識があるわけではありませんのでうまく説明できない個所もあるかもしれませんが・・・

    さまざまなマシンからIISに対するhttp接続を行ったあと、netstat -p TCPコマンドを実行しましたが、すべての接続が表示されるわけではなさそうです(IISの細かな内部動作原理は理解できていません)

    ですので、現在の接続数がいくつなのか、というのを数えることは難しいのではないか、と考えますが、いかがでしょうか・・・
  • id:ivory-star
    ivory-star 2007/07/03 18:06:50
    ふーむ、そうなると私の知識では、これ以上は回答できませぬ。
    他の回答が来るのを待ちますか・・・
  • id:b-wind
    >netstat -p TCPコマンドを実行しましたが、すべての接続が表示されるわけではなさそうです
    IIS というよりは、Windows の netstat コマンドがリアルタイムの情報を出してくれない仕様なのです。
  • id:xml-document1
    接続数がわかるWinAPIなど、ありますでしょうか?
    手持ちの少量の資料やネットの検索では、それらしい情報は得られませんでした。。。
  • id:mj99
    回答5を投稿した者です。

    ----
    ちょっと実験してみた。

    共有接続(Server Sessions)はなぜか、PC11台までいけました(12台目でエラーになる)
    Server Sessionsの値は12以上になることはありませんでした(Server Sessionsの初期値がなぜか1なので+11で12限界)

    Server Sessionsが12の状態でもIISに接続できました。共有+IIS接続の合計が10で限界ではなく、別々に10限界かもしれません。

    また、IIS接続(Current Connections)は5~6ぐらいでIISの応答がなくなってしまい、限界値を測定できませんでした(CPU使用が100%になっていた。これはウィルス対策ソフトの影響もありそう)

    ----
    共有接続数、IIS接続数とは別に、TCPIPの接続数が10限界という話があります(回答6の末にある内容)、、、

    これって具体的にどうゆうことなのでしょうかね?
    ESTABLISHEDの数が10まで?実際のところESTABLISHEDって20でも30でも作れますけどね。。。だれが教えて。
  • id:ardarim
    ServerSessionsは、おそらく自分自身を含んでいます。
    そのため上のサンプルでは -1 しておきました。

    同時接続数の制限は、TCPレベルの制限です。
    inbound、つまり待ち受け接続(内向き、サーバ的使い方)の数を10までに制限するものです。
    ESTABLISHEDは、outbound(外向き、クライアント的接続)も入っているように思います。だから10制限ではなく、例えばブラウザを同時にたくさん起動したりすれば(ページダウンロード中だけですが)際限なく増えます。

    一般的には待ち受け接続を行う使い方として、共有フォルダ(File Server)とIIS(Web Server)くらいしかないので、これらの合計が10に達しなければ普通は支障ないといえるでしょう。ただし他にサーバプログラムを起動していればそれも考慮する必要があります。

    ちなみに、自分でも回答しておいてなんですが、IISのCurrentSessionsは厳密にはこのTCPの制限の計算には使えません。
    IISのSessionは、TCPレベルで「接続中」の意味ではなく、より上位層で「セッション」オブジェクトが維持されている、という意味でのセッションと考えられます。したがって、CurrentSessionsが1以上だったとしても、その瞬間に実際にinboundのTCP接続が存在しているとは限りません(既にTCPレベルでは切断されている可能性が高いです)。セッションは特定の条件(例えば一定時間後とか、Webログインする構成ならログアウトするまでとか)が発生するまで持続し、削除されません。
    ですから、共有+IISが10を超える可能性はあります。ただし既に共有10(ServerSessions=11)の状態からIISに接続する場合は、TCPレベルで空きがないので拒否られるはずです。私の環境ではIISを入れてないので確認できませんが。

    接続数の制限はDoS攻撃から守るという意味合いもあるかもしれませんが、むしろ某社の政治的な理由といえます。
    クライアントOSにサーバ的な使い方はさせたくない、サーバ的な使い方をするならより高価なサーバ系OS(2003 Serverなど)を買ってほしいという思惑です。サーバOSには接続数の制限は入れてないはずです。
    2kやXPのEULAでもこの制限は書かれています。
    (参考)契約上最大接続台数は10台
    http://www.peter-rabiit.jp/peter/home/column/03/20030809.html
    回答6で最大接続数緩和を「正規のやり方ではないので自己責任で」としたのは、OSドライバを勝手に改変する危険性もありますが、EULA(ライセンス契約)を意図的に違反することになるためです。

    本来なら10を超えるinbound接続が想定される使い方ならば、小細工せずにサーバ系OSを入れるべきです。その方が管理的にも楽になると思われます。(お金はかかりますけどね。)

    長文失礼しました。
  • id:mj99
    回答4に掲載の英文。
    (先にもっとよく読めばよかったと後悔、、、)

    # limits the number of simultaneous incomplete outbound TCP connection attempts
    ”不完全なoutboundのTCP接続の試行同時数を制限する”

    要するに、「接続要求をして不完全な状態は同時に10まで」と言う意味のようです。
    (制限数=10という表記はありませんが)

    で、
    存在しないIPへ向けてTelnet接続するバッチを作って、20個ほど同時に起動してみました(20個同時に接続待ちの状態になる)
    結果、イベントログに4226が記録されることが確認できました。何十回かやって、たまに記録される程度でしたが。

    制限はこの条件で間違いないようです。

    ----
    前文から引用
    >同時接続数の制限は、TCPレベルの制限です。
    >inbound、つまり待ち受け接続(内向き、サーバ的使い方)の数を10までに制限するものです。

    と、いうことですけど、、、
    どうもそのとおりではありません。

    Winscokでサーバアプリを作って試したのですが、
    Listenは何個でも作れるし、何個でもAcceptできます(inboundを何個でも開設できた)
    inboundに10の制限など無いように思えます。

    ----
    また、前のコメントにも書いたのですが共有接続(Server Sessions)が限界値の状態でもIIS接続(Current Connctions)が5~6まで増えることは確認できました。
    IPの異なるinboundが10以上に有効になった、と言えるのです。

    ----
    共有接続制限、IIS接続制限、TCP接続制限の3者は独立して存在する
    TCP接続制限=10というのは、条件が微妙というか、ほとんど意識する必要はない
    、で間違いないと思います。

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

トラックバック

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません