製品
ソリューション
顧客事例
サービス
ORACLE
りなっくす奮闘記
事件File No.19 カーネル・パラメータのチューニング

「カーネル・パラメータ」は、カーネルの動作をチューニングできるポイントです。Oracle Database 10gなどの「インストレーション・ガイド」を参照すると、このカーネル・パラメータの変更作業がかならず出てきます。MIRACLE LINUXでは、カーネル・パラメータを適切に設定した状態で出荷していますが、設定内容についてご質問を受けることがあります。そこで今回は、このカーネル・パラメータについて解説します。

Oracle関連のパラメータ

Oracleのインストレーション・ガイドには、表1のとおり複数のカーネル・パラメータ推奨値が記載されています。それぞれのパラメータがどのような意味をもつのか解説していきます。

※MIRACLE LINUXでは、カーネル・パラメータをすべて推奨値で設定していますが、大規模なシステムではこの限りではありません。

表1
表1:Oracle Database 10gインストレーション・ガイドの
カーネル・パラメータ推奨値一覧

■shmmax物理メモリサイズの1/2

shmmaxは共有メモリ・セグメント1つあたりの最大サイズ(バイト単位)を指定しています。共有メモリ・セグメントとは、SystemV IPC(プロセス間通信)の仕組みの1つで、さまざまなプロセスが1つのアドレス領域にアクセスすることにより、プロセス間でデータの受け渡しをおこなうことができます。Oracleのインスタンスが起動するとSGAのために共有メモリ・セグメントを最低1つ確保し、サーバープロセスはこのSGA共有メモリ・セグメントにアクセスしてデータを取得します。SGAが1つの連続した共有メモリ・セグメントを利用できるように、利用予定のSGAよりサイズを大きくすることが推奨されます。shmmaxに設定できる最大値は4GB−1byte=4,294,967,295となります。

■shmall 2097152

システム全体の共有メモリ・ページの最大数(ページ)を設定します。共有メモリ・セグメントはそれぞれ複数のページから構成されており、そのページ数のシステム全体の総数を指定します。

■shmmni 4096

システム全体の共有メモリ・セグメントの数の上限を設定します。OracleインスタンスのSGAには、1つだけ利用することが推奨されますが、そのほかのプロセスでも共有メモリ・セグメントを利用するため、この値が推奨となります。

■semmsl 250

セマフォ集合ごとのセマフォの最大数を設定します。ここでは、Oracleインスタンスの初期化パラメータprocessesより多い値を設定しなければなりません。複数のインスタンスを利用する場合は、各インスタンス中で最大のprocesses値を基準に設定するように推奨されます。セマフォはSystemV IPC(プロセス間通信)の仕組みの1つで、さまざまなプロセスが協調して安全に同じ共有メモリ・セグメントを利用できるように、排他制御機能を提供しています。

■semmns 32000

システム全体の、セマフォの最大数を設定します。以前は複数のインスタンスがある場合など、細かい計算をおこないましたが、現在はこの値が推奨値です。算出方法は[各インスタンスのprocesses値の合計]+[各インスタンスのprocesses最大値×2]+[10×インスタンス数]です。

■semopm 100

semop(セマフォ集合の変更関数)呼び出しごとの最大命令数を設定します。

■semmni 128

システム全体のセマフォ集合の最大数を設定します。

■file-max 65536

システムが読み書きのために開くことができるファイルの最大数を設定します。実際のファイルだけでなく、ファイルディスクリプタを利用して入出力をおこなう通信機器なども影響を受けます。

■ip_local_port_range 1024 65000

TCPとUDPの通信を開始する際に選ぶことができるポートの範囲を指定します。この範囲を広げることにより、通信が多くなったときのポートの不足を防ぎます。

※LinuxVM関連のパラメータバージョンごとに変更が加えられているため、ここではMIRACLE LINUX V3.0-Asianux Insideのkernel-2.4.21-9.38AXを対象にします。

ページキャッシュ関連パラメータ

まず、カーネルによるページキャッシュのライフサイクルを説明します。

図1
図1:ページキャッシュのライフサイクル

[Free][Active][InactiveDirty][InactiveLaundry][InactiveClean]は、ページキャッシュの状態を表しています。

1.[Free]は、利用可能な状態を表しています。ここからプロセスに配分されたページは[Active]となります。

2.[Active]は、プロセスに配分されている状態を表し、kscandによりアクセス頻度が低いと判断された場合は[InactiveDirty]状態に移されます。

3.[InactiveDirty]は、一定期間使われていない状態を表しており、メインメモリからの削除候補となります。

4.[InactiveLaundry]は、ディスクへの書き込みを待っている状態で、書き込みが完了したあとに再利用可能な[InactiveClean]状態になります。

5.[InactiveClean]は、ディスクにsyncされたあとの状態を表しています。再利用が可能な状態です。

※3、4、5いずれの状態でも、一度アクセスがあれば[Active]状態に戻ります。

■pagecache デフォルト値 1 15 100(単位:%)

左から最小値、維持目標値、最大値が実メモリに占める割合を表しています。注目すべきは右端の最大値で、デフォルトの状態では100%までページキャッシュとして利用されることになります。OracleなどのBatch系ジョブでは、ディスクデータの再利用が頻繁におこなわれるため、最大のパフォーマンスを発揮します。ファイルサーバーなど、ユーザーごとに違うデータが頻繁に読み書きされるサーバーでは、この値を70%程度まで低くすると、パフォーマンスが改善できる場合があります。設定方法は/etc/sysctl.confに[vm.pagecache 1 15 100]と追加します。

■inactive_clean_percent デフォルト値 30 (単位:%)

このパラメータは、すでに使わなくなった[InactiveDirty]状態のページキャッシュの容量に対する、ページキャッシュの再利用可能な[InactiveClean]状態と、再利用可能にするための書き込み待ち[InactiveLaundry]状態の合計容量の割合を指定します。

※数式で表すと以下のとおりです。
[InactiveDirty]× 30% <[InactiveClean]+[InactiveLaundry]

このパラメータの値を増やすことにより、使われないページキャッシュ[InactiveDirty]はより積極的にディスクに書き込まれ、再利用可能な[InactiveClean]状態の割合が増えます。設定方法は/etc/sysctl.confに[vm.inactive_clean_percent 30]と追加します。

以上、カーネル・パラメータの一部をご説明しましたが、shmmaxなどOracleのパラメータと密接にかかわりのある項目もありますので、皆さんの参考になれば幸いです。

今月の格言 肝心要

Linuxにとってカーネルは肝です。この肝の動作をコントロールするのがカーネル・パラメータなのです。

INFORMATION

MIRACLE Technology Conference 2005
- Asianux® 2.0発表

2005年3月2日に「MIRACLE Technology Conference 2005」が開催され、2,000名を超えるエンジニアや経営者層が来場しました。「プロジェクトX」のプロデューサー 今井彰氏による開幕講演のほか、Asianux®参画企業のトップらが各国のLinuxマーケット状況などを紹介。同時に、カーネル2.6搭載の「Asianux®2.0」を発表しました。同製品はRAS機能を強化し、信頼性・可用性が格段に向上しています。ぜひ「Asianux®2.0」にご期待ください。

参画企業各トップ
Asianux®参画企業の各トップによる
基調講演より

唐木 大介(とうのき だいすけ)
ミラクル・リナックス株式会社 プロフェショナル・サービス部 エンジニア
スノーボードへ行く回数が1回/シーズンとなってしまい、趣味の欄にはゴルフと書くべきなのか悩ましい今日この頃です。

お問い合わせ先
ミラクル・リナックス株式会社 マーケティング部
TEL 03-5404-5038 FAX 03-5404-5051
http://www.miraclelinux.com/
mktg@miraclelinux.com
目次へ戻る >>