
Identify and resolve memory-related issues within Progress OpenEdge applications.
The Progress® OpenEdge® Memory Profiler (OEMP) helps Advanced Business Language (ABL) developers analyze memory usage, detect memory leaks and optimize application performance.
By providing visibility into memory allocation and object lifecycles, OEMP helps organizations improve application stability, reduce troubleshooting time and deliver more reliable business applications.
A memory profiler is a diagnostic tool that helps developers understand how an application allocates, uses and releases memory during execution.
Memory profiling enables teams to identify excessive memory consumption, leaks and inefficient allocation patterns that can negatively affect performance and stability.
OEMP is designed specifically for OpenEdge applications and Progress® Application Server (PAS) for OpenEdge® environments, providing detailed insight into memory behavior within the OpenEdge runtime.
Helps identify areas where memory usage is higher than expected. By pinpointing memory-intensive processes and objects, developers can optimize resource utilization and improve application performance.
Enables developers to identify memory growth patterns and compare memory snapshots to investigate objects that remain in memory longer than expected. Memory leaks can lead to application crashes, system instability, performance degradation and increased infrastructure costs. This allows teams to isolate potential leaks during development and testing before they affect production environments.
Supports the uncovering of these patterns and facilitates more efficient application design. Because not all memory-related issues are caused by leaks—repeated object creation, inefficient data structures and unnecessary allocations can all impact performance.
Provides visualizations and detailed metrics that simplify troubleshooting and accelerate the resolution of memory-related issues. Thus, developers can spend less time diagnosing problems and more time improving application functionality.
OEMP collects memory usage information while an application is running and stores the results for analysis. A typical workflow for the OEMP:
Figure 1: OEMP Architecture. Memory profiling recordings generated by OpenEdge AVM processes and PAS for OpenEdge instances are stored as .oemp files and imported into OEMP for analysis and troubleshooting.
OEMP supports multiple approaches to analyzing application memory. Each technique helps developers investigate different types of performance and stability issues, including:
Captures the state of application memory at specific points in time by comparing memory snapshots, allowing developers to identify which objects remain in memory, how memory usage changes during execution and where unexpected growth may be occurring.
Records when objects are created and how memory is allocated throughout application execution, which helps identify code paths that generate excessive object creation, unnecessary allocations or inefficient memory usage that can impact performance.
Focuses on identifying objects that continue to consume memory after they are no longer needed by comparing multiple memory snapshots, allowing developers can investigate retained objects, determine why they remain referenced and resolve issues before they affect application stability.
Different development platforms require different memory profiling tools, such as:
| Platform | Typical Memory Profiling Tool |
|---|---|
| OpenEdge ABL | OEMP |
| Python | Memray, memory_profiler |
| .NET | dotMemory, Visual Studio Profiler |
| C++ | Valgrind, Visual Studio Diagnostic Tools |
For OpenEdge applications, OEMP provides profiling capabilities tailored specifically to the OpenEdge runtime environment.
Import memory profiling recordings into an OpenEdge database for centralized access and analysis.
Open and view existing memory profiling recordings for ABL applications or PAS for OpenEdge instances stored in the database.
Access a summary of the objects within a specific memory snapshot to quickly understand memory allocation and identify areas that may require further investigation.
Drill into individual objects within a snapshot to gain deeper insight into memory usage and investigate objects contributing to memory growth.
Organize profiling recordings and delete one or more from the database when they are no longer needed and retain only pertinent data.
Use visualizations to identify memory usage trends, allocation and consumption patterns and optimization opportunities.
OEMP collects memory information while an application is running and stores profiling results in recordings that can be analyzed later. Within a recording, snapshots provide views of application memory at particular points in time.
It is a memory profiling file generated by an OpenEdge AVM process or PAS for OpenEdge instance when memory profiling is enabled. The recording can be imported into OEMP and stored in an OpenEdge database for analysis.
It captures information about objects in memory at a particular point during application execution. A recording can contain multiple snapshots, allowing developers to examine how memory changes throughout a profiling session.
A recording represents the profiling session and contains the memory profiling information collected during that session. A snapshot represents memory at a particular point within the recording. Comparing snapshots helps developers understand what changed between different stages of application execution.
Snapshots can be generated automatically during profiling or created at specific points in application execution. Developers can use targeted snapshots before and after a particular operation to investigate how that operation affects memory usage.
Analyzing multiple snapshots allows developers to observe memory usage over time. Consistent growth across repeated application operations can help identify objects or processes that require further investigation.
Developers can compare snapshots taken at different points during application execution to identify changes in object counts and memory consumption. For example, a developer can capture a snapshot before running a process and another after the process completes. Objects that continue to accumulate when they are expected to be released may indicate inefficient memory management or a potential memory leak.
Organizations use OEMP to:
Memory leaks are often identified by comparing memory usage over time rather than examining a single snapshot. A typical investigation follows these steps.
Enable memory profiling using the -profileMemory startup parameter
Run the application while performing the workflow you want to analyze
Capture multiple memory snapshots during execution
Compare snapshots to identify objects that continue to grow in memory
Examine retained objects and their allocation details to determine why they remain referenced
Modify the application to release unnecessary objects and repeat the analysis to verify the issue has been resolved
This iterative process helps developers isolate memory leaks before they affect application performance, scalability or stability in production environments.
As an example, an application can repeatedly run a business process that creates temporary objects, but memory consumption continues to increase after each execution. A developer can capture a baseline snapshot before running the process and another snapshot after it completes. Comparing the two snapshots can reveal that certain objects created during the process remain in memory instead of being released.
The developer can then examine those objects to determine why they are being retained and identify the relevant code that needs to be corrected. After modifying the application to release the objects appropriately, the developer can run the same process again and compare new snapshots to verify that the objects are released and memory usage no longer continues to grow.
Explore OpenEdge Memory Profiler resources, review the documentation or connect with a Progress expert to learn how memory profiling can help improve the performance and reliability of your OpenEdge applications.