Support Article
Service Rest Requestor (called by POST) are not closing
Summary
User creates a Service Rest as an asynchronous service. The request gets processed via a service request processor.
But observes an issue where even after the service request processor completes the processing the requestor is still persisting in the system and not closing down.
System Management Application (SMA shows different requestor's IDs all the time and non of the requestors seems getting reused causes all requestors just take memory which seems is not getting freed.
There are no errors in the log as well. Related activity works just fine.
Also, the Service Package configuration for Service REST in question got the following configuration:
Max idle requestor: 10
Max active requestor: 10
Max wait (seconds) : 10
SMA shows only 5 requestors at the time, but for the very first request there are 2 requestors reported as
SMA shows Max active 2 instead of 1.
Error Messages
Not Applicable
Steps to Reproduce
1. Create Service Package as Stateless (this doesn't matter) with some access group
2. In Pooling TAB set the following defaults:
Max idle requestor: 10
Max active requestor: 10
Max wait (seconds) : 10
3. Create Connect REST and set Processing options:
- End Requestor When Done checked
- Execution mode - async
- specify Request Processor
4. Request Processor options:
- Queuing Options TAB: set Queue Class Name to the class derived from System-Queue-ExecutionRequest-Service-
I used Default and Save AS option to create System-Queue-ExecutionRequest-Service-A93038 class
- Dequeuing Options: leave all defaults
5. For Service REST Methods TAB specify POST method options:
- Activity with the following steps:
1. InfoForced Log-Message with message: "Processing Request: " + pxRequestor.pxClientConnection
2. Wait for 10 seconds
3. InfoForced Log-Message with message: "DONE for: " + pxRequestor.pxClientConnection
This is to track which requestor is processign the request and will match to those in SMA
- Response TAB for the REST to have the following Message Data:
Map from Constant + Map From KEy: {"aa":"bb"} - this CAN be left empty
This is to see the service responding, but activity is not getting processed until agent will pick the requestor form the queue
6. Create Periodic Advanced Agent with ProcessQueue Activity for class you created at step 4:
System-Queue-ExecutionRequest-Service-A93038
Set interval to 90 seconds and enable this Agent
7. In SMA clear all requestor pools
8. Fire POST request form any REST Client and observe the service has responded with the JSO Payload as set in step 5.
9. Refresh Requestors Pools and observe we have a new pool, but it shows MAX active as 2 right after very first request and MAX idle set to 1, while it should be 0.
Wait for time set in Wait for Activity to process POST request and refresh again.
Observe 0 active and idle 2 - means the request processed
10. Check Requestors and observe the requestor ID pointed in Log-Message step still shown
11. File 10 POST request shortly one after another and check Requestors Pool.
Observe 5 active only of 10 configured and MAX active is 6.
12. Check Console and logs to see agent is working and activity reporting he requestors used to process the request,
When you see all done check Requestors and observe all of the are still present.
Root Cause
A defect in Pegasystems’ code or rules as Asynchronous mode of execution acquires requestors from the pool while executing the queued jobs
but does not return the requestors to pool properly causing memory leak.
Resolution
Apply HFix-29464, and a server restart is needed.
Published November 24, 2016 - Updated October 8, 2020
Have a question? Get answers now.
Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.