ええ、このエラーはWindows ServerでRDSを実行している多くのユーザーを悩ませています。サービスが「ビジー状態」のためユーザーが接続できない場合もありますが、その理由は必ずしも明確ではありません。通常、スタックしたセッションが残っている、リソース不足、またはどこかの設定ミスが原因です。幸いなことに、この問題を解決する適切な方法はいくつかありますが、Microsoftからの魔法のような解決策は期待できません。主に、問題のあるセッションをクリアするか、サーバーを正常な状態に戻す方法しかありません。ここでの目標は、スタックしたユーザーセッションをクリアして、毎回サーバー全体を再起動することなく、新しい接続を通過させることです。とはいえ、根本原因を理解することは役立ちますが、多くの場合、問題が発生したときにリセットするだけで解決します。
Windows Server で RDP サービスがビジー状態になる問題を解決する方法
RDSホストのパフォーマンスと利用可能なリソースを確認する
これは当たり前のことかもしれませんが、触れておく価値はあります。サーバーがメモリやディスク容量を大量に消費すると、RDS の動作に支障をきたす可能性があります。タスク マネージャーで CPU、RAM、ディスクの使用状況を確認してください。特に Windows がインストールされているドライブの使用量を確認してください。RAM の空き容量は少なくとも 1GB 必要です(多いほど良いです)。また、ディスクの空き容量も十分に確保してください。また、イベント ビューアーの「Windows ログ」>「システム」で、RDS またはプロファイル サービスに関連する重大なエラーがないか確認してください。リソースが不足している場合は、古いプロファイルのクリーンアップ、ログの圧縮、さらにはハードウェアのアップグレードを検討してください。リソースが十分に確保できたら、他の修正に移ってください。
RDS でハングしたリモート デスクトップ セッションをリセットする
ユーザー名がなく、ステータスが「切断」になっているユーザーセッションを見つけたら、それは危険信号です。これらのスタックしたセッションは新しいログインをブロックする可能性があり、通常、「ビジー」メッセージが表示されるのはそのためです。これらのセッションを見つけるには、タスクマネージャー(サーバー上でも、特別なツールは必要ありません)を開き、「ユーザー」タブに移動して、(4) とマークされているセッション、またはユーザー名のないセッションを探します。右クリックして「ログオフ」をクリックします。多くの場合、これで問題は解決します。しかし、 csrss.exeなどのプロセスが残ってセッションがハングすることがあります。これは、セッションハングのシナリオでよくある原因です。
単純なログオフでも問題が解決しない場合は、ユーザーのプロセス、特にそのセッションで実行されているcsrss.exeプロセスを手動で終了する必要があるかもしれません。手順は以下のとおりです。
query session管理者権限でコマンドプロンプトを実行すると、アクティブなセッションがすべて一覧表示されます。「no-name」または「(4)」のセッションを探します。- そのセッションのID (たとえば、2)をメモします。
query process /id 2セッション内で実行中のプロセスを一覧表示するには、csrss.exeの PID を調べてください。おそらく 5140 のようです。- そのプロセスを終了します:
taskkill /F /PID 5140。これによりプロセスが強制終了され、通常はその後セッションがクリアされます。
ハングしているセッションすべてに対して繰り返します。面白いのは、設定によっては最初の試みで完璧にクリーンアップできないこともありますが、ほとんどの場合、再起動せずにスタックしたセッションを解放するのに十分だということです。
今後このような混乱を防ぐには、グループポリシー(下記参照)でセッションタイムアウトを設定することを検討してください。また、クライアント接続のキープアライブを有効にすると、セッションが「切断」状態になるのを防ぐことができます。
コマンドラインからユーザーセッションを終了する
サーバーがタスクマネージャー経由でユーザーのログオフを拒否する場合は、コマンドラインアプローチを試すことができます。管理者権限のコマンドプロンプトを開き、次のコマンドを実行します。
query session
これにより、アクティブなセッションがすべて一覧表示されます。セッションをリセットするには、以下を実行します。
reset session rdp-tcp#16
またはセッションIDで:
reset session 3
これにより、ユーザーの接続が強制的に切断され、リソースが解放されます。一部のサーバー、特にリモートで管理している場合は、/ serverパラメータを追加することをお勧めします。
reset session rdp-tcp#16 /server:yourserver
覚えておいてください、これは警告なしにセッションを*強制終了*します – 慎重に使用してください。
ライセンス設定の確認と修正
最初は問題なく接続できたのに、その後突然接続できなくなった場合は、ライセンスに問題がある可能性があります。特にRDSが「ビジー」であるというエラーが表示される場合は、RDSライセンスサーバーが正しく設定されていることを確認してください。
サーバー上で、「サーバーマネージャー」 > 「リモートデスクトップサービス」 > 「コレクションまたは展開のプロパティ」に移動し、RDライセンス設定を確認します。正しいライセンスサーバーが指定されていることを確認してください。
または、グループポリシーの「コンピューターの構成」>「ポリシー」>「管理用テンプレート」>「Windowsコンポーネント」>「リモートデスクトップサービス」>「ライセンス」で、 「指定されたリモートデスクトップライセンスサーバーを使用する」ポリシーを設定し、サーバー名を指定します。ライセンスサーバーをインストールしたばかりの場合は、この手順が省略されることが多く、3人目くらいのユーザーがエラーに遭遇したときに発生します。
最後に、ライセンスモード(ユーザーごとまたはデバイスごと)が設定と一致していることを確認してください。ライセンスが正しくない場合、追加の接続がブロックされる可能性があります。
GPO経由で最大接続制限を無効にする
Windows Server では、ポリシーで別途設定されていない限り、デフォルトで無制限の RDP 接続が許可されます。これを確認または変更するには、管理者特権のコマンドプロンプトでgpresult /H c:\gpresult.htmlを実行し、ブラウザでレポートを確認してください。 「接続数の制限」を検索してください。
- そのようなポリシーが存在しない場合は心配する必要はありません。無制限の接続が許可されます。
- 存在し、番号が設定されている場合 (たとえば、2)、gpmc.mscで番号を増やすか、完全に無効にします。
変更後、gpupdate /force新しいポリシーがすぐに適用されるように実行してください。これにより、接続制限が厳しすぎるために発生する「サーバーがビジー状態です」という誤ったエラーを回避できます。
他に何も効果がない場合のその他のヒント
サーバーがまだ正常に動作しない場合(リソースに問題がなく、ログに問題がなく、セッションをリセットしても効果がない場合は、次の方法が効果的かもしれません。)
- リモートデスクトップサービスをリモートで再起動します。
net stop termserviceまたはnet start termservice、PowerShell 経由で次のコマンドを実行します。
Get-Service termservice -ComputerName YOURSERVER | Restart-Service
REG ADD "HKLM\SYSTEM\CurrentControlSet\control\Terminal Server\Winstations\RDP-Tcp" /v fQueryUserConfigFromLocalMachine /t REG_DWORD /d 1 /f
または同様のエントリHKLM\Software\Policies\Microsoft\Windows NT\Terminal Services。
SeTokenDoesNotTrackSessionObjectゴースト セッションまたは孤立したセッションをクリアできます。
願わくば、これでRDSの「ビジー状態」の混乱が解消されるでしょう。少なくともMicrosoftがより洗練された修正をリリースするまでは。通常は、スタックしたセッションをクリーンアップし、サーバーの負荷が過負荷にならないようにするだけです。それでも、再起動やセッションタイムアウトの設定をきちんと行うことで、この状況の再発を防ぐことができる場合もあります。