いまさらながら。そして一部妄想系のメモ。
「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと。
万を超える接続に対応するプロセスやスレッドを生成するとメモリ上にプロセスやスレッドの管理領域が確保され、使われるメモリサイズもばかにならない。プロセスとスレッドでは差があり、1接続あたり1プロセス生成するほうがメモリやファイルディスクリプタなど使うリソースが大きくなるはず。
プロセス数、スレッド数、ファイルディスクリプタ数などの上限に達してしまうという問題もある。このあたりは実装依存だったり設定を変えれば増やせたりすると思う。数を設定で増やせても、大きくなると探索が遅くなったりして性能に影響する可能性もありうると思う。
第4回で触れましたが、select(2), poll(2)は、管理するディスクリプタが大量になると性能上の問題が発生すると言われています。いわゆるC10K問題で、目安としてクライアント10,000台あたりで性能劣化が発生するとのことです。epoll(7)はその点を解消していると言われていますが、ではどれだけの違いがあるのか。
ファイルディスクリプタについて(6) ~多重I/Oの性能とC10K問題 (1/5):CodeZine(コードジン)
nginxは「C10K問題」(クライアント1万台問題)に対応したWebサーバです。従来のWebサーバでは同時接続数が増えると、プロセス数やスレッド数が増えて、メモリを食いつぶしたり、コンテキストスイッチのオーバーヘッドが大きくなることにより本来の処理に時間が割けなくなったりします。nginxではマルチスレッドを使わずに、イベント駆動のアーキテクチャを採用することにより、このC10K問題に対応するような仕組みを設けております。このため、メモリの使用量も抑えることができ、メモリが少ないサーバでもそれなりに快適に動作します。
nginx連載1回目: nginxの紹介 - インフラエンジニアway - Powered by HEARTBEATS