Назад | Перейти на главную страницу

как настроить общую память и сделать ее доступной?

Я пытаюсь настроить общую память для Sybase ASE 12.5 на CentOS. У моего сервера 17 ГБ памяти, я хочу сделать 14 ГБ (= 17-1-2) доступными для sybase. (1 ГБ для ОС, 2 ГБ для рамдиска 14 = 17-1-2).

вот информация:

[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

Есть настройка RAMDisk 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???

затем я изменяю /ect/sysctl.conf как:

[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

затем запустите:

echo "kernel.shmmax=14738890752" >> /etc/sysctl.conf

затем перезагрузите CentOS.

то я пытаюсь установить максимальную память sybase на 7196724 (2K), но могу запустить sybase и получить ошибку:

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

Это позволяет мне установить максимальную память только как 40000009 (2k) = 7,6 ГБ

Не знаю почему. Итак, настройте общую память в CentOS, недостаточно только изменить kernel.shmmax в /etc/sysctl.conf? Или нужно сделать больше?

Кроме того, у меня нет менее 2 строк в выводе 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

как решить эту проблему?

Попытка выделить сегменты большего размера, чем разрешено shmmax приводит к EINVAL (Invalid argument), это не то, что вы получаете. Попытка выделить больше выделенного лимита памяти приводит к ENOSPC (No space left on device) что вы получаете.

Насколько я помню, ограничение по умолчанию составляет половину физической RAM плюс общее пространство подкачки. Вы можете увидеть свое текущее значение с помощью этой команды grep CommitLimit /proc/meminfo

Размер tmpfs файловые системы контролируются size вариант монтирования, как описано в man mount.

В /dev/shm файловая система используется shm_open вызов. Это не связано с shmget это два разных API, происходящих из Posix и SysV.