この制限に達したかどうかは、どうすれば知ることができるのでしょうか?
今現在の、同時接続数の数でもかまいません。
イベントログに記録されているでしょうか?
どこかのログファイルに書き出されたりするのでしょうか?
管理メニューのどこかに表示されているのでしょうか?
ご存知の方、教えてください。
よろしくお願いします。
共有フォルダ・IPC接続の接続一覧であれば、管理ツールから確認することができます。
または、コマンドプロンプトから「net session」でもOKです。
接続数を数えたいのであれば、コマンドの実行結果をカウントする方が楽でしょうかね。
コントロールパネル⇒コンピュータの管理⇒「共有フォルダ」のところで接続されているフォルダやセッション数が確認できます。
回答ありがとうございます。
上にも記載の通り、IIS経由の接続数も合わせてカウントしたいのです。
説明不足でしたが、ご存知の方、ご教授お願いします。
コントロールパネルのコンピュータの管理にある、
「システムツール」->「共有フォルダ」->「共有」
にクライアント接続数が表示されますが、これでいかがでしょうか?
回答ありがとうございます。
上にも記載の通り、IIS経由の接続数も合わせてカウントしたいのです。
説明不足でしたが、ご存知の方、ご教授お願いします。
とりあえず、リアルタイムではないですが、イベントログに記録されることはわかりました。
イベント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で取得できる情報を動的にログ保存できます。
netstatはリアルタイムで情報を取得できないのですね・・・
接続数が9に達したことを何らかの方法で保守エンジニアに通知したり、10に達してしまったら自動でOSを再起動したりといったことをしたいのです接続数の数さえ分かれば、後の処理はこちらで構築することができます。
(これも先に説明すればよかったですね。。)
有力な情報をお持ちであれば、引き続きお願いいたします。
パフォーマンスモニタを使って「警告」を発生させてみてはどうでしょうか。
Windows 2000 でパフォーマンス モニタの警告を作成および構成する方法
共有フォルダ接続数を示すカウンタは、
パフォーマンスオブジェクト: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
有力な情報、ありがとうございいます。
のちほど、ソースは確認させていただこうと思います。
とりあえずスクリプトを書いてみました...が、本当にこれであっているかどうか確認ができていません。(手元に共有マシン環境も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で検索するといろいろ情報が出てきます。
みなさん、いろいろな回答ありがとうございました。参考にさせていただきました。
ひとまず、ここで質問を終了します。
回答ありがとうございます。
ところで、これにはIISの接続数がカウントされていないように思います。
実際にウェブブラウザ経由で該当マシン(Windows Vista または XP)に接続しても、net sessionコマンドでは接続数が増加しませんでした。
Windows Vista または XPでは、共有フォルダへのアクセス数と、IIS経由での接続数の合計が10まで、と認識しています(間違っていればご指摘願います)
この両方の接続数をカウントできる方法があれば、それも合わせて教えてください。
よろしくお願いします。