
Intento configurar la memoria compartida para Sybase ASE 12.5 en CentOS. Mi servidor tiene 17G de memoria, quiero que 14G (=17-1-2) estén disponibles para Sybase. (1G para sistema operativo, 2G para disco ram 14 = 17-1-2).
aquí está la información:
[sybase@myserver ASE-12_5]$ free -g
total used free shared buffers cached
Mem: 17 7 9 0 0 7
-/+ buffers/cache: 0 17
Swap: 3 0 3
Hay una configuración de disco ram 2G.
[sybase@myserver ASE-12_5]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 12G 2.6G 8.8G 23% /
/dev/sda1 251M 19M 220M 8% /boot
none 8.7G 0 8.7G 0% /dev/shm ---what's this? is it related kernel.shmmax?
/dev/sdb1 30G 8.4G 20G 30% /home
tmpfs 2.1G 20M 2.1G 1% /db/tempdb -----this is ramdisk, what 's the difference between this and /dev/shm???
luego modifico /ect/sysctl.conf como:
[sybase@myserver ASE-12_5]$ cat /etc/sysctl.conf
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 1
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# kernel.shmmax = 10737418240
kernel.shmmax= 14738890752 ------modify this to 13.7G
kernel.shmmni = 4096
kernel.shmall = 2097152
entonces corre:
echo "kernel.shmmax=14738890752" >> /etc/sysctl.conf
luego reinicie CentOS.
luego intento configurar la memoria máxima de Sybase en 7196724 (2K), pero no puedo iniciar Sybase y aparece el error:
00:00000:00000:2014/04/02 16:50:26.92 kernel os_create_region: shmget(0xf402f74d): No space left on device
00:00000:00000:2014/04/02 16:50:26.92 kernel kbcreate: couldn't create kernel region.
00:00000:00000:2014/04/02 16:50:26.92 kernel kistartup: could not create shared memory
Solo me permite configurar la memoria máxima como 40000009(2k)=7.6G
No estoy seguro de por qué. Entonces, ¿configurar la memoria compartida en CentOS y cambiar solo kernel.shmmax en /etc/sysctl.conf no es suficiente? ¿O necesitas hacer más?
Además, no tengo menos de 2 filas en la salida de df -h
:
none 8.7G 0 8.7G 0% /dev/shm ---what's this? is it related kernel.shmmax
tmpfs 2.1G 20M 2.1G 1% /db/tempdb -----this is ramdisk
¿Cómo resolver este problema?
Respuesta1
Intentar asignar segmentos más grandes de lo permitido por shmmax
los resultados en EINVAL (Invalid argument)
, eso no es lo que obtienes. Intentar asignar más que el límite de memoria comprometido da como resultado ENOSPC (No space left on device)
cuál es lo que obtiene.
Hasta donde recuerdo, el límite predeterminado es la mitad de la RAM física más el espacio de intercambio total. Puedes ver tu valor actual con este comandogrep CommitLimit /proc/meminfo
El tamaño de los tmpfs
sistemas de archivos está controlado por la size
opción de montaje como se explica en man mount
.
/dev/shm
La llamada utiliza el sistema de archivos shm_open
. Eso no tiene relación con shmget
esas dos API diferentes que se originan en Posix y SysV.