Windows
 Computer >> コンピューター >  >> システム >> Windows

Windows 11/10でポート枯渇問題を解決する方法|原因特定と対処法を徹底解説

コンピューター間で行われるすべてのネットワーク接続(TCPまたはUDPプロトコル)は、ポートを通じて実現されています。ポートとは、サービスやアプリケーションが通信に使用する「入り口」や「ゲートウェイ」と考えると分かりやすいでしょう。クライアントからの接続が増えるほど、利用可能なポートは徐々に不足していきます。この記事では、ポート枯渇(Port Exhaustion)問題のトラブルシューティング方法を詳しく解説します。

ポートには「動的ポート(Dynamic Ports)」「定義済みポート(Defined Ports)」の2種類があります。動的ポートは、複数のクライアントが定義済みポートへ接続するために使用されます。Webサイトが良い例です。通常、Webサーバーはポート80番で待ち受けますが、動的ポートを使うことで多数のクライアントに同時に対応できます。ただし動的ポートには上限があるため、すべてのポートが使用中になると接続エラーが発生し始めます。これが「ポート枯渇」と呼ばれる状態です。

Windows 11/10におけるポート枯渇の症状

このトラブルシューティングガイドの主な目的は、どのプロセスやアプリケーションがポートを消費しているのかを特定することです。原因となるアプリを突き止めたら、次はその修正を行います。

ポート枯渇を示す主な症状

1] ドメイン資格情報でログオンできない
ドメインアカウントではマシンにサインインできませんが、ローカルアカウントではログオンできるというケースがあります。既に使用したことのあるアカウントはキャッシュの影響でログオンできる場合もありますが、新しいアカウントでは失敗します。

2] グループポリシーの更新が失敗する
変更を適用しようとするたびに、「ドメインコントローラーとのネットワーク接続がないため失敗しました」といったエラーが表示されることがあります。一時的なものかもしれませんが、ポート枯渇の兆候である可能性があります。

3] ファイル共有やネットワークドライブにアクセスできない

4] アプリケーションがホストされているサーバーへのリモートデスクトップ接続が失敗する

その他の兆候として、イベントビューアーにTCP関連のイベントID 42274231 が記録され、「動的ポートの割り当てに失敗しました」というメッセージが表示されることがあります。また、NetStatコマンドを実行すると、特定のアプリケーションのTIME_WAIT状態のエントリが大量に表示されるのも典型的な特徴です。

NetStatコマンドでポート使用状況を確認する

管理者権限でコマンドプロンプトを開き、以下のコマンドを実行します。

netstat -anobq

その後、BOUND状態のエントリ数が最も多いプロセスID(PID)を確認してください。

PowerShellを使用する場合は、以下のコマンドでBOUND数が最大のプロセスを特定できます。

Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name="ProcessName";Expression={(Get-Process -PID ($_.Name.Split(',')[−1].Trim(' '))).Name}}, Group | Sort Count -Descending

多くの場合、クライアント側がポートを正しく閉じていないことが原因です。使用されていないにもかかわらず、ポートが解放されずに残ってしまうのです。これこそがポート枯渇の最大の要因と言えます。

頻繁に監視が必要な場合は、Netstatコマンドをループで実行しましょう。出力結果をテキストファイルに記録すれば、推移を監視できます。バッチスクリプトの例は以下の通りです。

@ECHO ON
set v=%1
:loop
set /a v+=1
ECHO %date% %time% >> netstat.txt
netstat -ano >> netstat.txt

PING 1.1.1.1 -n 1 -w 60000 >NUL

goto loop

タスクマネージャーでハンドル数の多いプロセスを見つける

もう少し手軽に原因アプリを特定したい場合は、タスクマネージャーの活用がおすすめです。PowerShellやコマンドプロンプトにも利点がありますが、素早くプロセスの状況を確認したいなら、こちらの方が簡単です。

  • タスクマネージャーを開き、[詳細]タブに切り替えます。
  • 列見出しを右クリックし、[列の選択]をクリックします。
  • 選択肢から[ハンドル]を追加します。
  • [ハンドル]列のヘッダーをクリックして、数値の多い順に並べ替えます。

Microsoftによると、接続に失敗している場合、ハンドル数が3000を超えているかどうかを確認すべきとのことです。これを超えている場合、そのアプリケーションが犯人である可能性が高いです。ただし、OSのサービスは例外です。それ以外のプロセスについては、一度停止してみて、ドメイン資格情報でのログオンが成功するかどうかを確認しましょう。

Process Explorerで詳細に調査する

タスクマネージャーで十分な結果が得られない場合は、Process Explorerを使用できます。DLLのバージョン問題やハンドルリークの追跡に役立ち、不正な動作をするアプリケーションの洞察にも有効です。Microsoft公式サイトからProcess Explorerをダウンロードしてインストールし、必ず管理者権限で実行してください。

  1. 列見出しを右クリックし、[列の選択]を選択します。
  2. [プロセスパフォーマンス]タブに切り替え、[ハンドル数(Handle Count)]を追加します。
  3. メニューから[表示 > 下部ペインの表示]をクリックします。
  4. 再度メニューから、[表示 > 下部ペインのビュー > ハンドル]を選択します。
  5. ハンドルを降順に並べ替えます。
  6. ハンドル数が最も多いプロセスが表示されます。
  7. 上位のハンドル数を持つプロセスのいずれかをクリックして強調表示します。
  8. 下部ペインに、すべてのハンドルの種類が表示されます。ポートやソケットは通常、「File \Device\AFD」というラベルで示されます。

ハンドル数が異常に多いプロセスを終了してください。アプリケーションが再び起動してくるようなら、それが原因の可能性が高いため、アプリケーションの修正を行うか、開発元(OEM)に修正を依頼する必要があります。

動的ポート範囲を拡大する応急策

アプリケーションの仕様上どうしても修正できない場合は、コンピューターが使用できるポート数を増やすことを検討しましょう。以下のコマンド(例)で範囲を変更・拡張できます。

netsh int ipv4 set dynamicport tcp start=10000 num=1000

設定可能な最小の開始ポートは1025、最大の終了ポートは65535を超えられません。

ただしこの方法はあくまで一時的な対策です。IT管理者としては、ポート枯渇に対するより根本的な解決策を見つける必要があります。場合によっては、複数のサーバーを用意してポート数を分散させることも選択肢になりますが、それはまた別のレベルの話になるでしょう。

  1. Windows 11/10でプリンタポートを変更する簡単な方法【手順を画像付きで解説】

    プリンタが突然動かなくなり、戸惑った経験はありませんか?実は、Windows 10やWindows 11ではこのようなトラブルがよく発生します。しかし、多くの場合、プリンタ本体に問題があるわけではありません。原因の多くはソフトウェア、あるいはポート設定にあります。本記事では、その中でも「ポート」に焦点を当てて解説していきます。 最近、「プリンタポートを変更する必要がある」という声が多く寄せられています。プリンタがオフライン状態になり、どう対処すればよいのか分からず悩んでいる方も少なくないようです。ご安心ください。この問題の解決方法はとても簡単です。以下の手順に沿って進めれば、迷うことなく修正で

  2. Windows 11/10のリモートデスクトップで画面が真っ黒になる問題の解決方法

    最近のWindows 11/10では、RDP(Remote Desktop Protocol)を使用すると画面が真っ黒になるという報告が多数寄せられています。この問題は、Windows 11/10の「リモートデスクトップ接続」機能を利用する際に発生することがあります。主な原因としては、ディスプレイドライバーの不具合や、リモートデスクトップ接続ユーティリティの設定ミスが考えられます。 Windows 11/10のRDPで発生するブラックスクリーン問題 典型的な症状として、Windows 11/10のリモートデスクトップに接続すると画面が真っ黒になったまま表示されず、その後接続が切断されてしまい