とある日の午後、最近リリースした環境でCPU高負荷が発生し、処理が実行できないので調査して欲しいとの連絡を受けました。
構成は以下の通りです。
対象のサーバはAIXのLPARという技術で仮想化してあり、暫定措置として別のサーバからCPU割り当てを減らしてその分を割り当てたとの事で、私が現地に着いた時にはCPU使用率が下がって落ち着いた状態でした。
対象サーバには20のDBが構築されているのですが、その内ひとつで障害が発生していると担当部署から情報を得たので、さっそくAWRを取得して確認しました。
・・・が。
Host Cpuを確認するとidleが10%を切っているものの、Load ProfileによればDBのCPU時間は割り当ての35%程度です。
Per Second | Per Transaction | Per Exec | Per Call | |
---|---|---|---|---|
DB Time(s): | 8.4 | 4.7 | 0.00 | 0.00 |
DB CPU(s): | 0.7 | 0.4 | 0.00 | 0.00 |
ならば「障害が発生している」DBでは無く、他のDBでCPUを食いつぶしているのでは?と思ったのですが、そもそも一つのインスタンスがサーバ全体のCPUを食いつぶす事の無いように、初期化パラメータのcpu_countをそれぞれ2に設定してあります。
リリース済みの全DBが2コアずつ使い切っても全体のCPU使用率が100%にはならない計算です。
初め「オラクルのプロセスがCPUを使っている」と連絡を受けたのですが、よくよく聞くとオーナーがオラクル・インストール・ユーザであるプロセスがCPUの大半を使用しているが、その約半数はJavaのプロセスが使用しているとの事でした。
このシステムではOracleEnterpriseManagerCloudControl 13.2を導入し、DBの一元管理を行っている為、各DBサーバにはOEMエージェントがインストールされています。
詳細に確認したところ、CPUを食いつぶしていたのはOEMエージェントでした。
早速MOS(MyOracleSupport)で調査したところ、以下のドキュメントを見つけました。
EM Agent Consuming High CPU Usage on IBM AIX Due to Privileges issue on /tmp/.com_ibm_tools_attach (ドキュメントID 2353920.1)
/tmp/.com_ibm_tools_attachディレクトリに対し、EMエージェントのオーナーが完全な権限を持たない時にCPUを大量消費するというものでAIXの独自事象です。
実機で/tmp/.com_ibm_tools_attachディレクトリの権限を確認したところ777だったので、これには該当しません。
次に見つけたのが以下ドキュメントです。
カスタマ推奨EM 13c: Agent is Consuming High CPU and gcagent.log Reports Error "java.sql.SQLException: The connection is closed: The connection is closed" (ドキュメントID 2478680.1)
gcagent.logを確認したところ、上記ドキュメントに記載のエラーが繰り返し発生していました。
サポートにも確認しましたが、上記事象に該当するとの回答を得ましたので、暫定措置としてEMエージェントの再起動を行い、CPU使用率低下が確認できました。
正式対応としては個別パッチを適用する事になります。
カスタマ推奨がタイトルの頭に付いているドキュメントって重要度が高いのでしょうが、テキストで「カスタマ推奨」とついている訳では無くチェックマーク+リボンみたいな図形?なので、「カスタマ推奨」で検索してもヒットしないのですよね・・・