Return-Path: X-Original-To: apmail-tomcat-users-archive@www.apache.org Delivered-To: apmail-tomcat-users-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7664C98F8 for ; Tue, 10 Apr 2012 06:42:54 +0000 (UTC) Received: (qmail 6702 invoked by uid 500); 10 Apr 2012 06:42:50 -0000 Delivered-To: apmail-tomcat-users-archive@tomcat.apache.org Received: (qmail 6342 invoked by uid 500); 10 Apr 2012 06:42:44 -0000 Mailing-List: contact users-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Users List" Delivered-To: mailing list users@tomcat.apache.org Received: (qmail 6299 invoked by uid 99); 10 Apr 2012 06:42:43 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 10 Apr 2012 06:42:43 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [195.50.194.148] (HELO mx6.playtech.com) (195.50.194.148) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 10 Apr 2012 06:42:33 +0000 Received: from EE-EXCH2.EE.playtech.corp (194.126.102.178) by mx6.playtech.com (195.50.194.148) with Microsoft SMTP Server (TLS) id 14.1.270.1; Tue, 10 Apr 2012 09:41:14 +0300 Received: from il-exch1.IL.playtech.corp (192.168.7.34) by ee-exch2.ee.playtech.corp (192.168.3.16) with Microsoft SMTP Server (TLS) id 14.2.247.3; Tue, 10 Apr 2012 09:42:06 +0300 Received: from il-exch1.IL.playtech.corp ([192.168.7.34]) by il-exch1 ([192.168.7.34]) with mapi; Tue, 10 Apr 2012 09:42:05 +0300 From: Vyacheslav Trainin To: "'users@tomcat.apache.org'" Date: Tue, 10 Apr 2012 09:42:04 +0300 Subject: RE: tomcat asynchronous invocation problem Thread-Topic: tomcat asynchronous invocation problem Thread-Index: Ac0Wd4dVaM2v2j7zR6KMUqxA1zveVgAZ+//w Message-ID: References: <4F831E50.1060106@pidster.com> In-Reply-To: <4F831E50.1060106@pidster.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart_000_05E9_01CD16FE.2FB41E10" MIME-Version: 1.0 ------=_NextPart_000_05E9_01CD16FE.2FB41E10 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit I reproduced it on: - tomcat-7.0.23 and 7.0.25 - java 64 bit 1.6.0_18 and 1.6.0_29 - Linux CentOS release 5.6 (Final) 64 bit -----Original Message----- From: Pid [mailto:pid@pidster.com] Sent: Monday, April 09, 2012 8:37 PM To: Tomcat Users List Subject: Re: tomcat asynchronous invocation problem On 09/04/2012 13:53, Vyacheslav Trainin wrote: > Hi, > > > > We encountered a problem during asynchronous operations (tomcat 7 with > servlet 3). Exactly which version of Tomcat 7.0? Same for Java version? Same for OS version(s)? p > _Description: _ > > One client continuously sends post requests to the server. On the > server side for each request created AsyncContext with timeout 20 seconds: > > AsyncContextasyncContext = req.startAsync(req, resp); > > asyncContext.setTimeout(20000); > > As expected after approximately 20 sec the requests are completed. > Then another client also begins to send requests to the server but in > this case they are explicitly completed after 500 milliseconds. > Something like this: > > AsyncContextasyncContext = req.startAsync(req, resp); > > asyncContext.setTimeout(20000); > > > > *try*{ > > Thread./sleep/(500); > > } *catch*(Exception e) { > > } > > > > asyncContext.complete(); > > > > The problem is that after running the second client all the requested > waiting for timeout (from the first client) are stuck and not released > (onTimeout method of AsyncEvent is not called) until the second client > stops sending requests. > > It looks like the problem occurs on Linux but not on Windows. > > > > Below is a simple test that may help to reproduce this issue. The > following servlet accepts URL parameter "complete". > > When "complete=1" the request will be completed after 500ms. > > Otherwise the request will wait till timeout (20 seconds). > > > > Run client that periodically sends requests to /servlet?complete=0. (I > have tested it with 10 parallel threads that run in a loop) > > Then run another client that periodically sends requests to > /servlet?complete=1 (This client can use only a single thread) > > See that the first client does not receive any responses while the > second client is running. > > > > > > public class WebTestServlet extends HttpServlet { > > private static final Logger LOG = > LoggerFactory.getLogger(WebTestServlet.class); > > > > @Override > > protected void service(final HttpServletRequest req, final > HttpServletResponse resp) throws ServletException, IOException { > > LOG.debug("Received request: {}", req); > > final long startTime = System.currentTimeMillis(); > > String isComplete = req.getParameter("complete"); > > > > AsyncContext asyncContext = req.startAsync(req, resp); > > asyncContext.setTimeout(20000); > > asyncContext.addListener(new AsyncListener() { > > public void onTimeout(AsyncEvent event) throws IOException > { > > long duration = System.currentTimeMillis() - > startTime; > > LOG.debug("Async Timeout. Request: {}. Waiting time: > {}", event.getSuppliedRequest(), duration); > > event.getAsyncContext().complete(); > > } > > > > public void onStartAsync(AsyncEvent event) throws > IOException { > > LOG.debug("Start async. Request: {}", > event.getSuppliedRequest()); > > } > > > > public void onError(AsyncEvent event) throws IOException { > > LOG.debug("Error occured. Request: {}. Error: {}", > event.getSuppliedRequest(), event.getThrowable()); > > } > > > > public void onComplete(AsyncEvent event) throws > IOException { > > long duration = System.currentTimeMillis() - > startTime; > > LOG.debug("Async Complete. Request: {}. Request > process > time: {}", event.getSuppliedRequest(), duration); > > } > > }, req, resp); > > > > if ("1".equals(isComplete)) { > > try { > > Thread.sleep(500); > > } catch (Exception e) { > > } > > > > asyncContext.complete(); > > } > > } > > } > > > > Regards, > > Slava > > > > > -- [key:62590808] ------=_NextPart_000_05E9_01CD16FE.2FB41E10 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIKzTCCAwMw ggJsAhEAuS9gzIifoXpGCbhbcGyKrzANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswHhcNOTgwNTE4MDAwMDAwWhcNMjgwODAxMjM1OTU5WjCBwTELMAkGA1UEBhMCVVMxFzAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l dHdvcmswgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKeIASF0LOcaA/CY4Zc8DyEI8Zzbl+ma /MIEBhO+X1LIzB4sElYsuAFpLMyZH62wlq55BPITOcF7mLoILOjChBMsqmnpCfTHqQKkQsIjT0rY 8A6i+zFsyeZvmScH9eb0THiebetGhvq5hslU8rLEr9RGHFrJFTD/DWz1LQ5tzn93AgMBAAEwDQYJ KoZIhvcNAQEFBQADgYEAci75f9HxcfvEnvbFXlGKQJi4aPibHIPY4p29/+2h5mbqLwn0ytfqpSuV 9iRghk1ELoOlxC2g0654aW9y2myuCPBjkjfmu8QwF613zEk1qs/Yj9G+txiWR3NqVCI0ZC22FptZ W7RRWTqzCxT0Et9noPStMmResUZyJ4wSe8VEtK4wggOiMIIDC6ADAgECAhA7h9gNabNnBYcvrtBp U4c0MA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu Yy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAeFw0wMDA4MjAwMDAw MDBaFw0xMzA4MTkyMzU5NTlaMIGrMRQwEgYDVQQKEwtBZGFjb20gUy5BLjEfMB0GA1UECxMWVmVy aVNpZ24gVHJ1c3QgTmV0d29yazE5MDcGA1UECxMwVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vc2Vj LmFkYWNvbS5jb20vcnBhIChjKTAwMTcwNQYDVQQDEy5BZGFjb20gQ2xhc3MgMiBPblNpdGUgSW5k aXZpZHVhbCBTdWJzY3JpYmVyIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNNBG4BUKG HfD9XjgTIsscGWYKFkKbSi4gM3d0Cik1SG2DoxO88uzepMutsehB1t3vH5y89WkfrcgyEgvOV8KR WZ7priOmkyUAB4UJo7SGui20pi3bf0YtbXIfir4b6g5s3GleHss6IMOfv+D2O7R/Ny/CYd4m8jOm n19k4t2cXQIDAQABo4GuMIGrMBEGCWCGSAGG+EIBAQQEAwIBBjAPBgNVHRMECDAGAQH/AgEAMAsG A1UdDwQEAwIBBjBCBgNVHSAEOzA5MDcGC2CGSAGG+EUBBxcCMCgwJgYIKwYBBQUHAgEWGmh0dHBz Oi8vc2VjLmFkYWNvbS5jb20vcnBhMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwudmVyaXNp Z24uY29tL3BjYTItZzIuY3JsMA0GCSqGSIb3DQEBBQUAA4GBAJhqcoc51gvRVZzHlh8r/zXMXv9t VfugLWVutrKEQT2ivPMD95C1L17cDEOVRQ+X9eflsdEPjzoJ8iBsZ6WmgQT5zxiE175WX5EoyDQR t1/ZBKuLL/mTBQQn5mm0FwJy2JXfksxsBEkQUBIOsSr1xG76cygG6P1ur6GGUzqtXLsPMIIEHDCC A4WgAwIBAgIQIUxQsxsBBRh0dh/L3LmudDANBgkqhkiG9w0BAQUFADCBqzEUMBIGA1UEChMLQWRh Y29tIFMuQS4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOTA3BgNVBAsTMFRlcm1z IG9mIHVzZSBhdCBodHRwczovL3NlYy5hZGFjb20uY29tL3JwYSAoYykwMDE3MDUGA1UEAxMuQWRh Y29tIENsYXNzIDIgT25TaXRlIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQTAeFw0xMTEyMDgwMDAw MDBaFw0xMjEyMDcyMzU5NTlaMIGxMSIwIAYDVQQKDBlQbGF5dGVjaCBTb2Z0d2FyZSBMaW1pdGVk MQswCQYDVQQLDAJJVDExMC8GA1UECwwoVGVybXMgb2YgdXNlIGF0IHNlYy5hZGFjb20uY29tL3Jw YSAoYykwODEbMBkGA1UEAwwSVnlhY2hlc2xhdiBUcmFpbmluMS4wLAYJKoZIhvcNAQkBFh92eWFj aGVzbGF2LnRyYWluaW5AcGxheXRlY2guY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA3B+jRnAJee3enFZEMJ0U+aqNWRCl/e7Dv0CnSNUysgydT9MjLilhSKvJlD/tHukuT8fLJdNk qxx8CVILRWUUrATIB+VfcCoHMq+/kr4tja6KvqgAquaDwHaKwhFvWNyJQsX4LuQTH0yHtQMQfgEk bqQZ4HzkUPL5UbuFzf5q80fynGd8Nu8TIonteVFv3PUjCpY5IUM5l8RP7I3EaehGX6tkPYeFAvOx kmP3GYJtg9ngHxQTJBzxBfzBylodW8jdbix16KIYZTGXottGGZiS98re1WooRa7UlxZQWFbz3EWx SMaE3uy9QUpB1jw5hnnDkOrDpGYKaT87cup0ljCLbQIDAQABo4G0MIGxMAkGA1UdEwQCMAAwQQYD VR0gBDowODA2BgpghkgBhvhFAQcaMCgwJgYIKwYBBQUHAgEWGmh0dHBzOi8vc2VjLmFkYWNvbS5j b20vcnBhMAsGA1UdDwQEAwIFoDARBglghkgBhvhCAQEEBAMCB4AwQQYDVR0fBDowODA2oDSgMoYw aHR0cDovL2NybC5hZGFjb20uY29tL09uU2l0ZVB1YmxpYy9MYXRlc3RDUkwuY3JsMA0GCSqGSIb3 DQEBBQUAA4GBAIdCyGwDWzQFgqTjGQNcjMcAqCGrG8fOYXhUHXmdufyo7e/ce5D2Uh4mLK+AE6PD jQhZlKh8EMBgg4cEGHTgrsbGVAqee0oXzh0BoY+WDTMc3GoUdVA46TyouptVAHpX522TSebu89ee UCGkupMHk2Xb9+SQtZG5/+NHh8QcTMIgMYIErTCCBKkCAQEwgcAwgasxFDASBgNVBAoTC0FkYWNv bSBTLkEuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTkwNwYDVQQLEzBUZXJtcyBv ZiB1c2UgYXQgaHR0cHM6Ly9zZWMuYWRhY29tLmNvbS9ycGEgKGMpMDAxNzA1BgNVBAMTLkFkYWNv bSBDbGFzcyAyIE9uU2l0ZSBJbmRpdmlkdWFsIFN1YnNjcmliZXIgQ0ECECFMULMbAQUYdHYfy9y5 rnQwCQYFKw4DAhoFAKCCAsEwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUx DxcNMTIwNDEwMDY0MjA0WjAjBgkqhkiG9w0BCQQxFgQUWFVB4yeHzRMUPRYoB8+gosol9yswgbcG CSqGSIb3DQEJDzGBqTCBpjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAoGCCqGSIb3DQMHMAsG CWCGSAFlAwQBAjAOBggqhkiG9w0DAgICAIAwBwYFKw4DAgcwDQYIKoZIhvcNAwICAUAwDQYIKoZI hvcNAwICASgwBwYFKw4DAhowCwYJYIZIAWUDBAIDMAsGCWCGSAFlAwQCAjALBglghkgBZQMEAgEw CgYIKoZIhvcNAgUwgdEGCSsGAQQBgjcQBDGBwzCBwDCBqzEUMBIGA1UEChMLQWRhY29tIFMuQS4x HzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOTA3BgNVBAsTMFRlcm1zIG9mIHVzZSBh dCBodHRwczovL3NlYy5hZGFjb20uY29tL3JwYSAoYykwMDE3MDUGA1UEAxMuQWRhY29tIENsYXNz IDIgT25TaXRlIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQQIQIUxQsxsBBRh0dh/L3LmudDCB0wYL KoZIhvcNAQkQAgsxgcOggcAwgasxFDASBgNVBAoTC0FkYWNvbSBTLkEuMR8wHQYDVQQLExZWZXJp U2lnbiBUcnVzdCBOZXR3b3JrMTkwNwYDVQQLEzBUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly9zZWMu YWRhY29tLmNvbS9ycGEgKGMpMDAxNzA1BgNVBAMTLkFkYWNvbSBDbGFzcyAyIE9uU2l0ZSBJbmRp dmlkdWFsIFN1YnNjcmliZXIgQ0ECECFMULMbAQUYdHYfy9y5rnQwDQYJKoZIhvcNAQEBBQAEggEA Zyb7SzfnnVlyeFLag7xlhoUuF2smZuoOXSLhSE5GEPmC8pALSPybx1V7rhdfPH9zKcytKhpFnSp0 wqXa7gFrpgyk+1NebHpNA9iq3IyuJtmRrgPrfsXk3pL+E/MFbQHsiyIzEQzWs3DUcu9Oo4ycTATP 2FAUBiSjca54Vbiu1sEMBKMYpGoQZRCzPvc7gCeyy8h91TaBXswONH5ob0VA9t9Jc7UuVg2fRJ5w EpgZ7NDAj5zS34S22aoM43w/t95kiIQ7f9xyi77eZIeESQKayomRDcpPQAa9NXuVK+p32Hfle3SC QuuovRID6P5NCMyoZ/BG5hn09iBPLfXoDcgnjgAAAAAAAA== ------=_NextPart_000_05E9_01CD16FE.2FB41E10--