Linuxのメモリ監視運用について、Oracleが稼働している場合は要注意

  • 投稿日:
  • by
  • カテゴリ:

Linuxでは稼働時間の経過と共に(ファイルの書き込みの度に?)freeコマンドで見たところのcachedの値が増加する傾向にある。
Linuxはファイルを書き込む際に、いきなりディスクに書き込むわけではなく、一旦キャッシュ(メモリ)上に書き込み、これでI/Oを完了したとすることでパフォーマンス向上を図っているためである(ディスクに書くよりメモリに書く方が速い)。
キャッシュ上のデータは非同期でディスクに書き込まれる。
このように使われていないメモリはどんどんキャッシュとして利用されるため、時間の経過と共にcachedの値が増加する。
最終的にはメモリ全体の使用率が95%程度まで(かな?)増加するため、単純にfreeコマンド等でメモリの使用率を見るとメモリが逼迫しているように見える。
しかし、OSやアプリケーションがメモリを必要とした際には、このキャッシュ領域が開放されて使われる。
freeコマンドで表示されるbuffersやcachedは必要に応じて解放されて使われるため、メモリの空き領域の一部として考えることが多い。

上記特徴から、Linuxでメモリの使用率監視を行う際には、freeコマンドの「-/+ buffers/cache」で表示される「used」の値を使用率と見て監視することが多い。

しかし、Oracle Databaseが稼働しているサーバでは、SGA、PGA、バックグラウンドプロセスの容量を足した数値(Oracleが使っているはずのメモリの容量)が、上記usedの値よりも小さく表示されていた。
使っているはずなのに使っているように見えない??
・・・だが、実際には大量のスワップが発生していたため、やはりメモリは使われていた様子。
調べてみると、Oracleの共有メモリはfreeコマンドで見たところのusedではなく、cachedに計上されている様子。
容量の内訳からしてそうかとは思っていたが。。。
ただ、Oracleの設定によってどこに計上されるかが変わるようなので、正確なところはもっと調査の必要有り。

また、JBossが稼働しているAPサーバでも同様の傾向があるため、こちらも要調査。