web-dev-qa-db-ja.com

sysctl.confのshmmax設定が有効にならない

RHEL 4 Update 6を実行しており、Oracleのインストールを行っています。 『Oracle Installation Guide』に従って、shmmax値を更新しようとしています。ガイドに従って、/ etc /sysctl.confに次の行を追加しました。

 kernel.shmmax = 5319303168

ただし、後で次のコマンドを入力して確認すると、次のようになります。

/sbin/sysctl -a | grep shm 

値がまだ1024335872であることがわかります。次を実行すると:

cat /proc/sys/kernel/shmmax

値1024335872も表示されます。システムを再起動しようとしましたが、それでも機能しません。この設定を有効にする方法はありますか?

1
Patrick

OK、理由はわかっていると思います。これはLinuxの32ビットバージョンです。この場合のshmmaxの最大値は2GBのようです。

1
Patrick

まず、sysctl.confを編集しても、再起動するか実行するまで値は変更されません。

sysctl -p

値をリロードするため。

これは32ビットLinuxだとおっしゃっています。これにより、SHMMAXを設定できるサイズとOracleSGAのサイズに制約が生じます。ここで発生する制限の詳細については、 FC2へのOracle9iのインストール を参照してください。一般的に役立つ最大の設定は次のとおりです。

kernel.shmmax=2147483648

そして、あなたが試したのは4GBを超えているので、それが完全に失敗した理由です。

多くの人は、共有メモリの値がシステムにとって本当に意味があるかどうかを実際に考慮せずに、ここでの設定に関するガイドやOracleの提案をマジックナンバーとして使用しているようです。 Linuxで設定を生成するために、次の小さなスクリプトを作成しました。記述されているように、共有メモリブロックはRAM全体の50%に制限されます。これは、Oracleでの使用には軽い場合があります。より高いパーセンテージに簡単に調整できます。私は人々がこの値を彼らのサーバーのRAMの量よりも高く設定するのを見ることを嫌います。

#!/bin/bash
mem_bytes=`awk '/MemTotal:/ { printf "%0.f",$2 * 1024}' /proc/meminfo`
mem_max=`expr $mem_bytes / 2` 
page_size=`getconf PAGE_SIZE`
shmall=`expr $mem_bytes / $page_size`
echo \# Maximum shared segment size in bytes
echo kernel.shmmax = $mem_max
echo \# Maximum number of shared memory segments in pages
echo kernel.shmall = $shmall

これからの出力は、sysctl.confの最後まで書き込まれ、「sysctl -p」を実行すると、合理的でありながら安全な設定が可能になります。

3
Greg Smith

Oracleに関する私の石畳のメモには、同じ手順が示されています。私が違うのは、最初に実行することだけですecho 5319303168>/proc/sys/kernel/shmmax。私はそれが実行中の設定であり、他の設定はそれが再起動後も存続するようにすることであることを知っています。

Oracleのバージョンは何ですか? 9iの指示に従っていますが、4.xで9iのバージョンを実行できるかどうかわかりません。 10gのインストールはまだ行っていないので、確認する必要があります。

0
Keith Stokes