Problem How to allocate a large memory space for Informix shared memory segments on Red Hat Linux 3 (RHEL3).
Solution PROBLEM When you try to allocate Informix IDS shared memory above 1.8 GB (Gigabytes) on Red Hat Linux 3 you get the error message:
13:52:26 shmat: [ENOMEM][12]: out of available data space, check system memory parameters (e.g. MAXMEM).
reported in the online log file.
SCOPE The following products and operating systems are affected: Product Name Product Version(s) Hardware Vendor Operating System IBM? Informix? Dynamic Server? 10.00.UC3 All Red Hat Linux 3
CAUSE The limitation of 1.8 GB is due to the placement of the Informix IDS Shared Memory base address, which by default is 0x44000000. Important: This is only one possible cause of the problem. If this document does not provide you with a solution to your problem, you should search for other documents that refer to this topic.
SOLUTION The layout of shared memory can be inspected by running this command, where "pid" is the process id of the main CPU VP : > cat /proc/"pid"/maps 089f8000-08b7c000 rw-p 009b0000 08:02 655537 /usr3/products/10.0/bin/oninit 08b7c000-08bfe000 rw-p 00000000 00:00 0 0a01b000-0a03c000 rw-p 00000000 00:00 0 44000000-45419000 rw-s 00000000 00:04 8519685 /SYSV52c44801 (deleted) 45419000-49419000 rw-s 00000000 00:04 8552455 /SYSV52c44802 (deleted) 49419000-494a0000 rw-s 00000000 00:04 8585224 /SYSV52c44803 (deleted) b75ea000-b75ed000 rw-p 00001000 00:00 0 bffbc000-c0000000 rwxp fffc0000 00:00 0 So, with the default SHMBASE, a total shared memory allocation (i.e. RESIDENT plus MESSAGE plus VIRTUAL) of: 0xb75ea000 - 0x44000000 = 0x735EA000 = 1935581184 = 1,845 MB approximately can be achived. This can be seen by this output of the "onstat" command: >onstat -g seg IBM Informix Dynamic Server Version 10.00.UC3 -- On-Line -- Up 00:00:16 -- 1821120 Kbytes Segment Summary: id key addr size ovhd class blkused blkfree 8617989 1388595201 44000000 21073920 215476 R 5141 4 8650759 1388595202 45419000 1843200000 56904 V 3490 446510 8683528 1388595203 b31e9000 552960 672 M 135 0 Total: - - 1864826880 - - 8766 446514 (* segment locked in memory) However, if the Shared Memory Base address is lowered down from 0x44000000 to 0x0b000000, a total memory allocation of : 0xb75ea000 - 0x0b000000 = 0xAC5EA000 = 2891882496 = 2,757 MB approximately can be acheived. Set: SHMBASE 0xB000000L in the "onconfig" file, and increase shared memory parameters to utilise more memory. > onstat -g seg IBM Informix Dynamic Server Version 10.00.UC3 -- On-Line -- Up 00:00:21 -- 2721120 Kbytes Segment Summary: id key addr size ovhd class blkused blkfree 8880133 1388595201 b000000 21073920 215476 R 5141 4 8912903 1388595202 c419000 2764800000 85024 V 3486 671514 8978441 1388595204 b10d1000 552960 672 M 135 0 Total: - - 2786426880 - - 8762 671518 (* segment locked in memory) > cat /proc/731/maps 089f8000-08b7c000 rw-p 009b0000 08:02 655537 /usr3/products/10.0/bin/oninit 08b7c000-08bfe000 rw-p 00000000 00:00 0 08f32000-08f53000 rw-p 00000000 00:00 0 0b000000-0c419000 rw-s 00000000 00:04 10813445 /SYSV52c44801 (deleted) 0c419000-5ea75000 rw-s 00000000 00:04 10846215 /SYSV52c44802 (deleted) 5ea75000-b10d1000 rw-s 00000000 00:04 10878984 /SYSV52c44803 (deleted) b10d1000-b1158000 rw-s 00000000 00:04 10911753 /SYSV52c44804 (deleted) b75ea000-b75ed000 rw-p 00000000 00:00 0 bffbe000-c0000000 rwxp fffc0000 00:00 0 Note that the operating system has split the virtual memory segment into 2 equal sizes, as the virtual segment is greater than 2 GB and the operating system segment size has been limited to 2 GB: > ipcs -ma ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x52c44801 10813445 root 660 21073920 14 0x52c44802 10846215 root 660 1382400000 14 0x52c44803 10878984 root 660 1382400000 14 0x52c44804 10911753 root 666 552960 14 The product is designed to work this way.