web-dev-qa-db-ja.com

いくつのソケット接続が可能ですか?

現代の標準ルートサーバー上でtcp-socket接続がいくつ可能か、誰にもわかりませんか? (一般に、各接続のトラフィックは少なくなりますが、すべての接続が常にアップしている必要があります。)

編集: Linuxサーバーを使用します。

72
TheHippo

Linuxデスクトップ(16G RAM、I7 2600 CPU)で1600kの同時アイドルソケット接続を達成し、同時に57k req/sを達成しました。これは、epollを使用してCで記述された単一スレッドのHTTPサーバーです。ソースコードは github 、a blog here にあります。

編集:

Java/Clojureを使用して、同じコンピューターで60万の同時HTTP接続(クライアントとサーバー)を行いました。詳細情報 投稿 、HNディスカッション: http://news.ycombinator.com/item?id=5127251

接続のコスト(epollを使用):

  • アプリケーションは接続ごとにRAMを必要とします
  • TCPバッファー2 * 4k〜10k、またはそれ以上
  • epollは、ファイル記述子のためにepoll(7)からのメモリを必要とします

登録された各ファイル記述子は、32ビットカーネルで約90バイト、64ビットカーネルで約160バイトかかります。

83
shenedu

これは、問題のオペレーティングシステムだけでなく、構成(潜在的にリアルタイムの構成)にも依存します。

Linuxの場合:

cat /proc/sys/fs/file-max

同時に開くことができるファイル記述子の現在の最大数が表示されます。チェックアウト http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html

22
Eddie

10,000? 70,000?それだけです:)

FreeBSDはおそらくあなたが望むサーバーです。ここに 小さなブログ投稿 100,000の接続を処理するためのチューニングに関するものがあります。完了ポートメカニズム。

Solarisは100,000の接続を処理できます 前世紀に遡ります!彼らはLinuxの方が良いと言う

私が出会った中で最高の説明は、スケーラブルなウェブサーバーの作成に関するこのプレゼンテーション/ペーパーです。彼はそれがそうであるようにそれを言うことを恐れていない:)

ソフトウェアについても同様です。アプリケーション層のクレチンは、OS層に大きな革新をもたらしました。 Lotus Notesはクライアントごとに1つのTCP接続を開いたままにするので、IBMは「1プロセス、100.000オープン接続」の場合の主要な最適化をLinuxに提供しました。

O(1)スケジューラーは、元々、いくつかの無関係なJavaベンチマークで得点を上げるために作成されました。一番下の行は、この肥大化が私たち全員に利益をもたらすということです。

8
gbjbaanb

Linuxでは、非同期I/Oにepollを使用することを検討する必要があります。また、ソケットバッファを微調整して、接続ごとにカーネルスペースを無駄にしないようにする価値があるかもしれません。

妥当なマシンで10万の接続に到達できるはずだと思います。

5
cmeerw

開いているソケットの数の制限は、/ procファイルシステムで構成可能です

cat /proc/sys/fs/file-max

整数の制限で定義されたOSのincoming接続の最大数。

Linux自体はbillionsのオープンソケットを許可します。

ソケットを使用するには、アプリケーションをリッスンする必要があります。 Webサーバー。ソケットごとに一定量のRAMを使用します。

RAMとCPUは実際の制限を導入します。 (モダン2017、数十億ではなく数百万だと思う)

100万は可能ですが、簡単ではありません。 XギガバイトのRAMを使用して100万個のソケットを管理する予定です。

発信TCP接続は、IPごとに〜65000のポート番号によって制限されます。複数のIPアドレスを使用できますが、無制限のIPアドレスは使用できません。これは、LinuxではなくTCPの制限です。

5
teknopaul

アプリケーションに依存します。各クライアントから少数のパッケージしかない場合、Linuxでは100Kが非常に簡単です。私のチームのエンジニアが数年前にテストを行った結果、結果は次のとおりです。接続が確立された後、クライアントからパッケージがない場合、Linux epollはCPU使用率50%未満で読み取り可能な400k fdを見ることができます。

3
fatmck

どのオペレーティングシステムですか?

Windowsマシンの場合、拡張性の高いサーバーを作成し、I/O完了ポートと非同期I/Oを使用する場合、主な制限は、アクティブな接続ごとに使用する非ページプールの量です。これは、マシンがインストールしたメモリの量に基づく制限に直接変換されます(非ページプールは、インストールされているメモリの合計に基づく有限の固定サイズの量です)。

トラフィックが少ない接続については、非ページプールを使用せず、ロックされたページの制限に影響しない「ゼロバイト読み取り」を投稿することで、より効率的にすることができます。多数のソケット接続を開いている)。

それとは別に、プロファイルを作成する必要がありますが、控えめに指定された(760MBメモリ)サーバーで70,000以上の同時接続を取得できました。こちらをご覧ください http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html 詳細.

明らかに、「接続ごとのスレッド」や「選択」などの効率の悪いアーキテクチャを使用している場合は、それほど印象的な数値を達成しないと予想されるはずです。しかし、私見では、Windowsソケットサーバーにこのようなアーキテクチャを選択する理由はまったくありません。

編集:こちらをご覧ください http://blogs.technet.com/markrussinovich/archive/2009/03 /26/3211216.aspx ;非ページプールの量の計算方法はVistaおよびServer 2008で変更されており、現在ではさらに多くのものが利用可能です。

1
Len Holgate