D
dbeavon
Guest
I've noticed that ABL sessions in an ms-agent process can remain stuck in memory over time. If they are pinning resources, like memory, then this will gradually detract from what is available . Notice above that the msagent process is taking 4 GB. That memory is almost entirely due to an IDLE session ID 697. (its memory utilization is vastly understated in the OEE console but that is another issue). In our environment we are trimming idle sessions all day long on 30 minute intervals, but session ID 697 refuses to be trimmed. Whenever this happens, I can use the tomcat "manager" webapp and find an idle HTTP session that was never properly disconnected (ie. the client application must have been shut down in a way that wasn't graceful). From tomcat "manager" webapp, I am given the ability to expire HTTP sessions pre-emptively (before the regularly configured HTTP session timeout). When the HTTP session is expired in that way, then some internal tie is broken which had existed between the HTTP session and the ABL session. And the ABL session is finally able to be trimmed via the oemanager REST interface. To make a long story short, when the HTTP session is expired (preemptively) then it is possible for an ABL session to be trimmed. The ABL session would otherwise be pinned in memory for a long period of time. This leads me to my question. From ABL code is there a way to gain access to the related HTTP session that is provided by tomcat? For example, could I dynamically change the current HTTP session timeout from a given appserver procedure? I would like it if some procedures could have shorter HTTP session timeouts than others. This would only be needed for certain unusual and long-running procedures (reports, for example). Here is a link to show that webapps can do this type of thing directly from java. stackoverflow.com/.../how-to-set-session-timeout-dynamically-in-java-web-applications (It appears they can use the setMaxInactiveInterval - tomcat.apache.org/.../HttpSession.html ). I have not found a way to interact with the HTTP session directly (from ABL code). The only thing I found was some read-only properties (Progress.Lang.OERequestInfo ) that are accessible from SESSION:CURRENT-REQUEST-INFO . Any help would be appreciated. I realize that there are some layers of indirection between tomcat and the ABL code running in the MS-agent. Perhaps Progress doesn't even want me to know the HTTP session that I use from one round-trip to the next (APSV ). But knowing the HTTP session and interacting with it could help us to avoid problems when clients are terminating/disconnecting in a way that is not very graceful. The types of clients that are prone to terminating in this way may need to have their HTTP session-timeouts shortened programmatically. Hope this is clear. Thanks, David PS. The following is shown in the PASOE session-manager's log when remote clients are not gracefully disconnected. If we see this, then it is possible that the related server memory will be pinned for a while (at least until the HTTP session is timed out within tomcat). 12:49:54.825/406187373 [thd-20] ERROR c.p.appserv.adapters.apsv.Request - APSV(6EAD798526514531062362F4A78CB5AEF1834FB500E2.oepas1) : IOException while processing request : org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine. (18318) 12:49:54.828/406187376 [thd-20] ERROR c.p.appserv.adapters.apsv.Request - APSV(6EAD798526514531062362F4A78CB5AEF1834FB500E2.oepas1) : An error occurred processing the POST request : Unexpected error : org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine. (18320)
Continue reading...
Continue reading...