OpenEdge client executable reached the Virtual Address Space limit on the Windows 32-bit platform.
A misconception is that the 32-bit Windows platform allocates 4 GB of virtual memory per process running in the user space, this is not the case. Microsoft Windows Virtual Memory Manager splits the 4 GB of
addressable memory space into two segments:
- 2GB that can be used for the User Process and
- 2GB for the Operating System itself, which includes drivers, kernel and various other structures that need to be shared between different processes running on the same machine.
This 2GB of
Virtual Address Space (also known as
VAS) is mapped by the Windows Operating System to the Physical Memory and the Paging File when needed, for each running process. When an user process is initiated, it will use its allocated VAS for its execution segment, data, loaded dlls, memory mapped files (which is the way how the shared memory is accessed), stack, heap etc. All of this must fit within the process' VAS which is limited on Windows 32-bit to 2GB.
Moreover there are loaded dlls, allocated stack, heap, open files, and various other memory structures allocated from within its executable, or from within functions residing in its dlls, which leaves even less space remaining for attaching the database shared memory segments. When there is no enough space in process' VAS and the client tries to connect as self-service to the database server or servers in the case of multiple databases, failure to attach the shared memory segment will result in error 1720 with the error code 0.
One way to observe the current usage of a process' memory virtual address space is to use the Microsoft Windows Performance Monitor, with the object 'process' and add counter 'Virtual bytes peak'. This will provide an approximate value of the size being used in the process' VAS.