2016-08-23 1 views
1

Ich habe eine JAX-RS-Webdienstmethode geschrieben, die auf WebLogic 12.2.1 ausgeführt wird, um zu testen, wie viele gleichzeitige Anforderungen verarbeitet werden können. Ich mache absichtlich die Methode 5 Minuten zur Ausführung.Bearbeitung gleichzeitiger JAX-RS-Anforderungen mit WebLogic 12.2.1

Ich schrieb auch ein eigenständiges Client-Programm, um 500 gleichzeitige Anfragen an diesen Dienst zu senden. Der Client verwendet für jede Anfrage einen Thread.

Soweit ich weiß, hat WebLogic standardmäßig maximal 400 Threads, dh es kann 400 Anfragen gleichzeitig verarbeiten. Diese Zahl wird mit meinem untenstehenden Testergebnis bestätigt. Wie Sie sehen können, wurden innerhalb der ersten 5 Minuten ab 10:46:31 nur 400 Anfragen bearbeitet.

23/08/2016 10:46:31.393 [132] [INFO] [Services.ping] - Method entered, total running requests: [1] 
23/08/2016 10:46:31.471 [204] [INFO] [Services.ping] - Method entered, total running requests: [2] 
23/08/2016 10:46:31.471 [66] [INFO] [Services.ping] - Method entered, total running requests: [3] 
23/08/2016 10:46:31.471 [210] [INFO] [Services.ping] - Method entered, total running requests: [4] 
23/08/2016 10:46:31.471 [206] [INFO] [Services.ping] - Method entered, total running requests: [5] 
23/08/2016 10:46:31.487 [207] [INFO] [Services.ping] - Method entered, total running requests: [6] 
23/08/2016 10:46:31.487 [211] [INFO] [Services.ping] - Method entered, total running requests: [7] 
23/08/2016 10:46:31.487 [267] [INFO] [Services.ping] - Method entered, total running requests: [8] 
23/08/2016 10:46:31.487 [131] [INFO] [Services.ping] - Method entered, total running requests: [9] 
23/08/2016 10:46:31.502 [65] [INFO] [Services.ping] - Method entered, total running requests: [10] 
23/08/2016 10:46:31.518 [265] [INFO] [Services.ping] - Method entered, total running requests: [11] 
23/08/2016 10:46:31.565 [266] [INFO] [Services.ping] - Method entered, total running requests: [12] 
23/08/2016 10:46:35.690 [215] [INFO] [Services.ping] - Method entered, total running requests: [13] 
23/08/2016 10:46:35.690 [269] [INFO] [Services.ping] - Method entered, total running requests: [14] 
23/08/2016 10:46:35.690 [268] [INFO] [Services.ping] - Method entered, total running requests: [15] 
23/08/2016 10:46:35.690 [214] [INFO] [Services.ping] - Method entered, total running requests: [16] 
23/08/2016 10:46:35.690 [80] [INFO] [Services.ping] - Method entered, total running requests: [17] 
23/08/2016 10:46:35.690 [79] [INFO] [Services.ping] - Method entered, total running requests: [18] 
23/08/2016 10:46:35.690 [152] [INFO] [Services.ping] - Method entered, total running requests: [19] 
23/08/2016 10:46:37.674 [158] [INFO] [Services.ping] - Method entered, total running requests: [20] 
23/08/2016 10:46:37.674 [155] [INFO] [Services.ping] - Method entered, total running requests: [21] 
23/08/2016 10:46:39.674 [163] [INFO] [Services.ping] - Method entered, total running requests: [22] 
23/08/2016 10:46:39.705 [165] [INFO] [Services.ping] - Method entered, total running requests: [23] 
23/08/2016 10:46:39.705 [82] [INFO] [Services.ping] - Method entered, total running requests: [24] 
23/08/2016 10:46:39.705 [166] [INFO] [Services.ping] - Method entered, total running requests: [25] 
23/08/2016 10:46:41.690 [84] [INFO] [Services.ping] - Method entered, total running requests: [26] 
23/08/2016 10:46:41.690 [160] [INFO] [Services.ping] - Method entered, total running requests: [27] 
23/08/2016 10:46:43.690 [226] [INFO] [Services.ping] - Method entered, total running requests: [28] 
23/08/2016 10:46:43.705 [162] [INFO] [Services.ping] - Method entered, total running requests: [29] 
.... 
.... 
23/08/2016 10:50:52.008 [445] [INFO] [Services.ping] - Method entered, total running requests: [398] 
23/08/2016 10:50:52.008 [446] [INFO] [Services.ping] - Method entered, total running requests: [399] 
23/08/2016 10:50:54.008 [447] [INFO] [Services.ping] - Method entered, total running requests: [400] 
23/08/2016 10:51:31.397 [132] [INFO] [Services.ping] - Exiting method, total running requests: [399] 
23/08/2016 10:51:31.475 [207] [INFO] [Services.ping] - Exiting method, total running requests: [398] 
23/08/2016 10:51:31.475 [207] [INFO] [Services.ping] - Method entered, total running requests: [399] 
.... 
.... 

Aber was ich nicht verstehe ist, wie kommt es, dass die ersten 400 Anfragen nicht gleichzeitig von der Service-Methode bedient wurden? Wie Sie aus dem Testergebnis sehen können, wurde die erste Anfrage um 10: 46: 31.393 bearbeitet, aber die 400. Anfrage wurde um 10: 50: 54.008 bearbeitet, was mehr als 4 Minuten später ist.

Wenn wir uns access.log ansehen, können wir sehen, dass alle 500 Anfragen zwischen 10:46:31 und 10:46:35 von WebLogic empfangen wurden. Es sieht so aus, als ob WebLogic die Anfragen innerhalb kürzester Zeit erhalten hat, aber keinen Thread zuweist und die Service-Methode so schnell aufruft.

10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:31 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
.... 
.... 
10.204.133.176 - - [23/Aug/2016:10:46:35 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:35 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:35 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 
10.204.133.176 - - [23/Aug/2016:10:46:35 +0800] "GET /Test/Services/Ping HTTP/1.1" 200 0 

EDITED

Added Arbeit Manager mindestens 400 Fäden zu definieren.

weblogic.xml

<wls:work-manager> 
    <wls:name>HighPriorityWorkManager</wls:name> 
    <wls:fair-share-request-class> 
     <wls:name>HighPriority</wls:name> 
     <wls:fair-share>100</wls:fair-share> 
    </wls:fair-share-request-class> 
    <wls:min-threads-constraint> 
     <wls:name>MinThreadsCount</wls:name> 
     <wls:count>400</wls:count> 
    </wls:min-threads-constraint> 
</wls:work-manager> 

web.xml

 <init-param> 
     <param-name>wl-dispatch-policy</param-name> 
     <param-value>HighPriorityWorkManager</param-value> 
    </init-param> 

Antwort

0

Das ist, wie WebLogic Skalen threadpools (sie sind "Selbstoptimierung"), ist es nicht 400 Threads startet sofort . Es ist eher eine langsame Zunahme von Threads, um den Durchsatz zu maximieren.

https://docs.oracle.com/cd/E24329_01/web.1211/e24432/self_tuned.htm#CNFGD113

+0

Als ich wieder meinen Test ausführen, ohne den Server neu zu starten, ist das Ergebnis immer noch das gleiche. Ist es möglich, die ersten 400 Anfragen gleichzeitig zu bearbeiten? – user3573403

+0

Sie könnten die Minium-Threadpool-Größe auf 400 erhöhen, indem Sie einen Run-Parameter für den Server -Dweblogic.threadpool.MinPoolSize = 100 festlegen, dann wären die Threads sofort verfügbar (siehe hier: https://blogs.oracle.com/muraliveligeti/). Eintrag/why_we_should_not_try). Nicht sicher, ob dies immer noch in 12c funktioniert, müssen Sie möglicherweise einen neuen Workmanager definieren – Slettal

+0

Ich habe einen Workmanager hinzugefügt, um mindestens 400 Threads zu definieren, wie in meiner obigen Bearbeitung gezeigt. Als ich nun die Anfragen pumpte, wurden die ersten 400 Anfragen fast zur gleichen Zeit bearbeitet. Die 400. Anfrage wurde 3,3 Sekunden nach der ersten Anfrage bearbeitet. Dies ist ein großer Unterschied zu den früher beobachteten 4 Minuten plus. – user3573403

Verwandte Themen