Feedback
Did this article resolve your question/issue?

   

Article

How to capture a stack trace from a PAS for OE ABL Session?

Information

 
TitleHow to capture a stack trace from a PAS for OE ABL Session?
URL NameHow-to-capture-a-stack-trace-from-a-PAS-for-OE-ABL-Session
Article Number000113966
EnvironmentProduct: OpenEdge
Version: 11.6.x, 11.7.x, 12.x
OS: All supported platforms
Question/Problem Description
How to capture a stack trace from a PAS for OE ABL Session?
How to use JMX to get a stack trace from a PAS for OE ABL Session?
How to use the REST API to capture a stack trace from a PAS for OE ABL Session?


 
Steps to Reproduce
Clarifying Information
proGetStack does not work with PAS for OE Agents
Error Message
Defect Number
Enhancement Number
Cause
Resolution
With OpenEdge Classic Appservers, an ABL sessions stack trace could be gathered by sending a SIGUSR1 signal or using debug utilities such as proGetStack against the PID of the Agent process (_proapsv). This was possible because the Agents in the Classic Appserver were single threaded and therefore managed only one session per agent.

This is not an option with PAS for OE because the Agents are multi-threaded and manage multiple ABL sessions. With PASOE stack traces of an ABL session can be obtained with the REST API or by querying Java Managed Beans (MBean) with JConsole and/or JMX

OpenEdge Management and Explorer also provides a means to gather stack trace information through the REST API.

The following information is provided when dumping the stack of a PASOE Agent session thread:
 
- Agent ID- ABL Application- PAS Instance
- Agent Session ID- Status- Startup Parameters
- PROPATH- Databases- Persistent Procedures
- ABL Objects- Call Stack 
Steps to obtain an ABL sessions stack using OpenEdge Explorer/Management:

       1. From the main Resource page navigate to the Agents screen (For example: Resources/OpenEdge/Pacific Application Server/oepas1/ABL Application: oepas1/Agents) and click on the Stack link for the desired session. 
  •         The REST API requires that the oemanager.war or tcmanager.war application deployed are in the PASOE instance. 
Steps to obtain an ABL sessions stack using the REST API:
  1. Get the PASOE Agents ID as documented here.   
  2. Get a list of the Agents Session IDs as documented here
  3. Use the Agent ID and one of the Session IDs to gather the stack as detailed in the attached REST_API_Get_Stack.docx.
  • The REST API requires that the oemanager.war or tcmanager.war application deployed are in the PASOE instance. 
  • The documentation detailed in the attached REST_API_Get_Stack.docx will be included in the OpenEdge 12.0 REST API Reference. While it is not in the current documentation, it's supported and works in OpenEdge versions 11.6.x and 11.7.x.

Steps to obtain an ABL sessions stack using JConsole and/or JMX with MBeans (As detailed in the JConsole and JMX documentaion):
  1. Obtain the Agents ID by calling the getAgents operation of the AgentManager MBean. 
  2. Obtain a list of Session IDs by calling the getSessions operation of the AgentManager MBean
  3. Use the Agent ID and one of the Session IDs to get the sessions stack by calling the getSessionStacks operation of the AgentManager MBean.
Workaround
Notes
References to other documentation:

Progress article(s):
 proGetStack does not work with PASOE agent
Last Modified Date7/9/2021 3:58 PM
Attachment 
Disclaimer The origins of the information on this site may be internal or external to Progress Software Corporation (“Progress”). Progress Software Corporation makes all reasonable efforts to verify this information. However, the information provided is for your information only. Progress Software Corporation makes no explicit or implied claims to the validity of this information.

Any sample code provided on this site is not supported under any Progress support program or service. The sample code is provided on an "AS IS" basis. Progress makes no warranties, express or implied, and disclaims all implied warranties including, without limitation, the implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample code is borne by the user. In no event shall Progress, its employees, or anyone else involved in the creation, production, or delivery of the code be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample code, even if Progress has been advised of the possibility of such damages.