Kbase P64584: Unable to create shared memory Global\sharemem error 0. (1719)
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  3/21/2006 |
|
Status: Unverified
FACT(s) (Environment):
OpenEdge 10.x
Progress 9.x
Operating System
Windows NT 32 Intel/Windows 2000
SYMPTOM(s):
Unable to create shared memory Global\sharemem error 0. (1719)
proserve dbname -B value_>1.7GB fails to start with error (1719)
Machine has 8GB of RAM ( 6GB free )
-B 240000 ; database blocksize is 8K
CAUSE:
"The Progress design limits (for 32-BIT versions, 9.1 and later) are:
1. Maximum allowed value for -B: 125,000,000 buffers.
2. Maximum usable shared memory segment size: 134,217,728 bytes.
3. Maximum number of shared memory segments: 21 segments.
4. You don't get to use all the shared memory for database buffers. There
are other things that must also fit. The buffer pool is typically the
largest contributor though.
Note that 128 megabytes times 21 is about 2.7 GB.
In addition to these limits, the operating system will have limits too. In
practice, you are unlikely to be able to get 2.7 GB of shared memory on most
systems.
For 32-BIT systems, the total address space of any program is limited to 4
gigabytes. Of this, the operating system will normally not give all of it
to an application - it reserves some of it for itself. Windows for example,
limits the application to 2 GB. Other systems have other limitations. They
all make different tradeoffs.
Out of whatever fraction of the address space you have to work with, all the
program's code and data must be fit into it. This includes:
* The code for the program itself (the "text segment" on Unix)
* Code in shared libraries or dynamic link libraries ("dll's")
the program uses
* The program stack
* Thread stacks
* Constant or static data
* Global variables
* The "heap", a pool of private memory from which space for various
temporary data structures, like Progress widgets, r-code buffers,
record buffers, etc. is taken from.
* Shared memory segments
* File buffers for open streams
* Memory mapped files
* etc, etc, etc,
Note that many of these vary depending on what your 4GL application uses.
Note also that if your application connects to more than one database as
self-serving, then the shared memory segments from all the databases must be
attached at once. If you max out -B for all of them, this will probably not
be possible."
FIX:
Use value for -B which is lower than ( 1.7GB / database block size )