web-dev-qa-db-ja.com

Spring-boot Tomcatは10,000未満の接続しか提供できませんか?

私はスプリングブートでサーバーをテストしています。しかし、テスト中に問題が発生しました。

私のテストは、Webソケットセッションの増加に伴ってサーバーが使用するメモリの数(クライアントの数)です。

1,000クライアント(9000セッション未満)は、テストの実行に問題はありません。しかし、10kの接続をテストしようとすると、サーバーはほぼ10,000まで接続を確立しました(9990までのセッションを作成することもあれば、9988、9996のように、ソケットの数を制限することはありません)。その後、セッションの作成を停止しました。エラーが応答しない。

一部のクライアントがタイムアウトして接続を解放すると、接続を待機していた他のクライアントが接続を取得できます。

'environment' Tomcat:8.0.36 spring-boot:1.3.3 Java:1.8

解決策については、私は試しました

  1. ヒープサイズの増加。

    • Jvmヒープメモリを5GB増やします。ただし、接続に使用されるヒープメモリはわずか2GBです。ですから、JVMメモリとは関係ないと思います。
  2. Application.porpertiesでserver.Tomcat.max-thread = 20000を設定しました。

    • しかし、それは失敗しました。以前は違いはありませんでした。

私はこの問題について本当に興味があります。あなたたちがこの問題を知っていて、アイデアを持っているなら、私に理由を教えてください。ありがとう。

8
Jason

Tomcat --maxThreads vs maxConnections

maxConnectionsプロパティを10000より大きく設定してみてください。

から ドキュメント

サーバーが任意の時点で受け入れて処理する接続の最大数。この数に達すると、サーバーはもう1つの接続を受け入れますが、処理はしません。この追加の接続は、処理される接続の数がmaxConnectionsを下回るまでブロックされます。その時点で、サーバーは新しい接続の受け入れと処理を再開します。制限に達した後でも、オペレーティングシステムはacceptCount設定に基づいて接続を受け入れる場合があることに注意してください。デフォルト値はコネクタタイプによって異なります。 BIOの場合、Executorが使用されていない限り、デフォルトはmaxThreadsの値です。使用されている場合、デフォルトはexecutorからのmaxThreadsの値になります。 NIOの場合、デフォルトは10000です。 APR /ネイティブの場合、デフォルトは8192です。

WindowsのAPR /ネイティブの場合、構成された値は、maxConnections以下の1024の最大倍数に減少することに注意してください。これは、パフォーマンス上の理由から行われます。 -1の値に設定すると、maxConnections機能が無効になり、接続はカウントされません。

8
StanislavL

スプリングブートのプロパティであるTomcatmax-connectionがあり、application.propertiesファイルで設定する必要があります。

server.Tomcat.max-connections= # Maximum number of connections that the server will accept and process at any given time.