2

tomcat 5.5 から tomcat 7.0.37 に移行する際に奇妙な動作に遭遇しました。標準の https コネクタを使用します。

<Connector address="x.x.x.x" port="9090" scheme="https" secure="true"
  clientAuth="false" sslProtocol="TLS" SSLEnabled="true" 
  ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,
        TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
        TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,
        SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
        SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" 
  URIEncoding="UTF-8" keystorePass="x" keystoreFile="x" 
  connectionTimeout="-1" maxPostSize="-1" />

フラグconnectionTimeout="-1"が設定されている場合、Tomcat へのすべてのリクエストで、一定の 20% ~ 30% のプロセッサ使用率が発生します。したがって、任意のタイプのリソース (単純な html ページ、jar ファイル) に対して 5 つの要求を生成した後、プロセッサの使用率は 100% に達します。

フラグを削除するとconnectionTimeout="-1"、この動作は発生しません。標準の Tomcat 7 構成を使用しています。

誰かが何が起こっているのか説明できますか?

4

1 に答える 1

1

これを理解するのに1分かかりました。この問題も再現できました。http コネクタのドキュメントを参照してください。-1 に設定できるとは言いませんが、できないとも言いません。だから私は確かに見つけるためにコードに飛び込みました。コードで私は以下を見つけました(soTimeout = connectionTimeout)

if (soTimeout != null && soTimeout.intValue() >= 0)
  socket.setSoTimeout(soTimeout.intValue());

そのため、-1 が設定されることはなく、Socket Javaクラスはデフォルト設定を使用しています。

無限のタイムアウトが必要な場合は、0 に設定します (これはあらゆる種類の問題を引き起こす可能性があるため、お勧めしません)。

編集#1

これをもう少し詳しく調べたところ、Tomcat にバグがあり、7.0.42 以降で報告されているようです。

于 2013-06-29T00:27:34.603 に答える