
CentOS 上の Sybase ASE 12.5 用に共有メモリを設定しようとしています。私のサーバーには 17G のメモリがあり、14G (=17-1-2) を Sybase 用に利用できるようにします。(OS 用に 1G、RAM ディスク 14 用に 2G = 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
2G の RAM ディスク セットアップがあります。
[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.6Gに設定できるだけです
理由はわかりません。CentOS で共有メモリを設定するには、/etc/sysctl.conf の kernel.shmmax を変更するだけでは不十分ですか? それとも、さらに何かが必要ですか?
また、出力では 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
この問題を解決するにはどうすればいいでしょうか?
答え1
shmmax
で許可されているよりも大きなセグメントを割り当てようとするとEINVAL (Invalid argument)
、 という結果になりますが、これは正しい結果ではありません。コミットされたメモリ制限を超えて割り当てようとすると、 という結果にENOSPC (No space left on device)
なりますが、これは正しい結果です。
私の記憶では、制限のデフォルトは物理RAMの半分とスワップスペースの合計です。現在の値は次のコマンドで確認できます。grep CommitLimit /proc/meminfo
ファイルシステムのサイズは、で説明されているようにマウント オプションtmpfs
によって制御されます。size
man mount
呼び出しではファイル/dev/shm
システムが使用されますshm_open
。これは、shmget
Posix と SysV に由来する 2 つの異なる API とは無関係です。