congestion_wait() や shrink_inactive_list() による直接回収処理中にアプリケーションプロセスがハングする
Issue
-
問題は、直接回収のパスにおいて、複数のプロセスが shrink_inactive_list() および too_many_isolated() のループ内でほぼ永続的にスタックする可能性があることです。これらはその後、rw sema を介して他のプロセスをブロックし、ハングアップが連鎖的に発生します。
-
以下のような現象が見られることがあります。
- 多数のタスクがセマフォで待機していました。
- セマフォの保持者は "numad" でした。ページ回収のコード内で congestion_wait() が呼び出され、待機状態となっていました。
- 当時、別のタスクも同じ congestion_wait キューで待機状態にありました。
- メモリー不足に近い状態と、少量のスワップが発生していましたが、すべてのゾーンにおいて、
空きページ数が最小ウォーターマークを下回ることはありませんでした。
Environment
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.