I am using open Edge 10.2 B on Red Hat 6. To achieve multi-threading I am running an internal procedure in asynchronous way on progress app-server. Here I am processing around 800K transactions on 80 agents. As execution proceeds, I observed, main process which is calling procedure on app-server in asynchronous way, is becoming slow.
When I checked resource utilization of that main process, It is showing constant increase in virtual memory usage(around 1M increase per min). As this Virtual memory usage increasing, process execution is becoming slower.
I guess this is issue with memory leakage. I suspect this is due to async-request-handle
used while running internal procedure in asynchronous way on app-server. Even I tried to delete this handle after use, but it wont help.
Anyone case across such scenario? your comments/inputs are most welcome.
When you call something asynchronously, the performance of the client side caller should not be affected at all by what the asynchronous call is doing. I presume when you say "I checked resource utilization of that main process, It is showing constant increase in virtual memory", I presumed you are talking about the server process. But then you say you suspect the async-request-handle which is on the client side. This is a tiny amount of memory and you get one handle per call. Yes, you should be deleting it when the request completes, but I doubt that you would see a spike in memory from this in any case, unless you were making thousands of calls. What is the client side doing while the async routine is running on the server?
@Laura: By main process, I mean client side process which is making asynchronous calls. I also agree that client side process should not be affected by server side process. You are correct, I am making around 100K calls and its increasing memory usage. Suspect issue in handle deletion. Will try to delete the async request handle properly and will update you guys. Thanks for inputs.
@James: Yes, there are some handles used, I am making code changes to clean them up. Will update the status.
You have indicated the total volume of transactions ... but what about the rate? Is that 100K in a minute, an hour, a day?
@Thomas: Transaction processing is not OLTP. Its batch based processing. Transaction records are added in DB in business hours. So at day end, we have 100K transaction available in DB for processing.
You could try debugging with the option to monitor dynamic objects to see what/when things get left behind per iteration.
see menu in debugger - diagnostics/monitor dynamic objects
So, it is a single, large batch which you want to process as quickly as possible. Does it need to be processed sequentially or could you use multiple client processes to do it in parallel? The fact that you are using async suggests that strict sequentiality is not required.
@Thomas: It was memory leakage only. We identified some leakage in legacy code and resolved it. Now it is working fine. Processing rate is 500K transaction in one hour on 100 app server agents.