LoginSignup
3
2

More than 3 years have passed since last update.

New RelicのPHPエージェントによりCPUが高負荷状態になった場合の対処について

Last updated at Posted at 2019-06-14

問題の背景

New RelicでPHPのアプリケーションを監視する際にCPUが高負荷状態になった場合に確認・対処する方法についてExplorer Hubというコミュニティベースの掲示板に記事が公開されています。日本で利用されている方の中で困っている方がいるかもしれませんので、今回はこの記事の概要を紹介します。

Relic Solution: PHP Agent CPU Overhead Tips

PHPに限らずNew Relicが各言語向けに提供しているAPMのエージェントは有効にすることでシステムに深刻な影響を与えることがないように作られています。ですので、もし何か問題が発生していましたら、サポートチケットを作成いただくか先ほどのExplore Hubなどに質問をお願いします。英語はちょっと...という方はお手伝いしますので私までご連絡ください。

診断方法

さて、PHPエージェントにおいてCPUが通常よりも高負荷状態になった場合、以下のコマンドにてクロックソースの確認をお願いします。

利用可能なクロックソースを確認します。

cat /sys/devices/system/clocksource/clocksource0/available_clocksource

現在設定しているクロックソースを確認します。

cat /sys/devices/system/clocksource/clocksource0/current_clocksource

CPUが利用可能なタイムスタンプカウンターを確認します。

cat /proc/cpuinfo | grep tsc

vDSOが利用可能か確認します。

strace php -m 2>&1 | grep gettimeofday

もし、vDSOが利用可能でない場合対処方法をご確認ください。

問題の詳細

PHPのエージェントでは、関数の開始と終了時刻を取得するのにgettimeofday()関数を利用しています。vDSOwをサポートしていないクロックソースを利用した場合、CPU負荷が高くなる問題が発生する可能性があります。

対処方法

vDSOが利用可能なクロックソースを利用するように設定してください。例えばtscになります。

echo tsc > /sys/devices/system/cl*/cl*/current_clocksource

もしクロックソースの変更ができない場合、次善の策としましてCPUを利用するエージェントの設定を無効化する方法があります。newrelic.iniファイルに次の設定を追加してください。

newrelic.transaction_tracer.enabled = false
newrelic.transaction_tracer.detail = 0

もしこれらの方法で改善されない場合、さらに詳細な調査が必要となりますのでお問い合わせください。

参考資料

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2