この投稿では、CentOS/RHEL サーバーでカーネル セマフォの制限を変更する方法について説明しています。
セマフォ制限を設定するためのカーネル パラメータ
セマフォの制限を設定するためのカーネル パラメータは次のとおりです。
kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI SEMMSL - max semaphores per array SEMMNS - max semaphores system wide SEMOPM - max ops per semop call SEMMNI - max number of arrays
セマフォ制限の変更
制限を変更する必要がある場合は、(配列の最大数)*(配列あたりの最大セマフォ)>=(システム全体の最大セマフォ) を考慮する必要があります。 .配列ごとに最大セマフォを持つ可能な数の配列の量によって制限される場合、システム全体でより多くのセマフォを持つ必要はありません。
例:
# sysctl -a| grep kernel.sem kernel.sem = 250 32000 32 128
この例では、配列あたりの最大セマフォ数を 128 から 192 に増やす必要があります。システム全体の最大セマフォ数を 48000 (250*192 =48000>=32000) に増やすか、32000 のままにすることもできます。このシナリオでは、は 32000 のままです。
サーバーの再起動を必要とせずに、カーネル パラメータを動的に設定する。
# sysctl -w kernel.sem="250 32000 32 192" kernel.sem = 250 32000 32 192
システムに問題がない場合は、カーネル パラメータを /etc/sysctl.conf ファイルに追加して変更し、サーバーの再起動後も値が保持されるようにします。
# cat /etc/sysctl.conf | grep kernel.sem kernel.sem = 250 32000 32 192
sysctl -w を使用せずにファイルに直接設定する場合は、ファイルをリロードする必要があります:
# sysctl -p
現在設定されている制限を確認するには:
# ipcs -ls ------ Semaphore Limits -------- max number of arrays = 192 max semaphores per array = 250 max semaphores system wide = 32000 max ops per semop call = 32 semaphore max value = 32767
セマフォは、複数のプロセスによる共有リソースへのアクセスを制御するために使用されるカウンターのようなものです。これは、別のプロセスが特定のリソースに対して操作を実行しているときに、プロセスが特定のリソースにアクセスするのを防ぐためのロック メカニズムとしてよく使用されます。セマフォ値は、変数 SEMVMX、「セマフォ最大値」によって設定された最大値まで、インクリメントまたはデクリメントできます。