Wie richte ich gemeinsamen Speicher ein und mache ihn verfügbar?

Wie richte ich gemeinsamen Speicher ein und mache ihn verfügbar?

Ich versuche, gemeinsamen Speicher für Sybase ASE 12.5 auf CentOS einzurichten. Mein Server hat 17 GB Speicher, ich möchte 14 GB (= 17-1-2) für Sybase verfügbar machen. (1 GB für Betriebssystem, 2 GB für Ramdisk 14 = 17-1-2).

hier sind die Infos:

[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

Es gibt ein 2G-Ramdisk-Setup.

[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???

dann ändere ich /ect/sysctl.conf wie folgt:

[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

dann renne:

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

Starten Sie dann CentOS neu.

dann versuche ich, den maximalen Sybase-Speicher auf 7196724 (2K) einzustellen, aber ich kann Sybase nicht starten und erhalte die folgende Fehlermeldung:

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

Ich kann den maximalen Speicher nur auf 40000009(2k)=7.6G einstellen

Ich bin mir nicht sicher, warum. Also reicht es nicht aus, Shared Memory auf CentOS einzurichten und nur kernel.shmmax in /etc/sysctl.conf zu ändern? Oder muss man mehr tun?

Außerdem mag ich keine unter 2 Zeilen in der Ausgabe von 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

Wie kann dieses Problem gelöst werden?

Antwort1

Der Versuch, größere Segmente zuzuweisen als zulässig , shmmaxführt zu EINVAL (Invalid argument), das ist nicht das Ergebnis, das Sie erhalten. Der Versuch, mehr als das zugewiesene Speicherlimit zuzuweisen, führt zu ENOSPC (No space left on device)dem, was Sie erhalten.

Soweit ich mich erinnere, beträgt das Limit standardmäßig die Hälfte des physischen RAM plus den gesamten Swap-Speicher. Sie können Ihren aktuellen Wert mit diesem Befehl sehengrep CommitLimit /proc/meminfo

Die Größe der tmpfsDateisysteme wird durch die sizeMount-Option gesteuert, wie unter erläutert man mount.

Das /dev/shmvom Aufruf verwendete Dateisystem shm_open. Dies hat nichts damit zu tun, shmgetdass es sich um zwei verschiedene APIs handelt, die aus Posix und SysV stammen.

verwandte Informationen