本文へスキップ

インストール問題の解決

PHP拡張モジュールおよびwhatap-phpサービスの手動設定

PHP拡張モジュールとwhatap-phpサービスのインストールおよびオプションのインストール(install.sh)が正しく動作しない場合の手動で設定する方法を説明します。PHPコンパイルのインストールなど、環境情報が確認できない場合に使用してください。

whatap.ini作成

$ cp /usr/whatap/php/template.ini /usr/whatap/php/whatap.ini
$ vi /usr/whatap/php/whatap.ini

# 上部に内容を追加
; Enable whatap extension module
extension=whatap.so
whatap.license= # 発行されたアクセスキー
whatap.server.host= # #発行されたサーバーIP
whatap.app_name= # Webサーバー区分APHP、FPHP (apache : APHP, php-fpm : FPHP)
whatap.app_process_name= # apache, php-fpmのプロセス名(httpd,php-fpm)
設定説明
whatap.licenseプロジェクトメニュー > 管理 > エージェントインストールページで発行されたアクセスキーを確認できます。
whatap.server.hostプロジェクトメニュー > 管理 > エージェントインストールページで発行されたサーバーのIPを確認できます。
whatap.app_nameApacheサーバーは、APHPを使用し、php-fpmは、FPHPを使用します。
whatap.app_process_nameApacheまたはphp-fpmで実行可能なプロセス名を設定して正しいプロセス名を入力すると、そのプロセスに使用されるメモリが収集されます。例として、httpdapache2php-fpmなどが挙げられます。

PHPコマンド(CLI) パスの確認

$ which php

/usr/bin/php

whatap-phpのサービス環境変数の設定

$WHATAP_PHP_BIN環境変数にPHP CLIコマンドパスを設定します。

$ sudo vi /etc/init.d/whatap-php

export WHATAP_PHP_BIN= # PHP コマンドの場所(/usr/bin/php)

PHP APIバージョンの確認

$WHATAP_PHP_BIN環境変数にPHP CLIコマンドパスを設定します。

$ sudo php -i | grep 'PHP API'

PHP API => 20100412

PHP ZTS(Zend Thread Safe) サポート有無の確認

$ sudo apachectl -V | grep MPM

Server MPM: Prefork # ZTSサポート無し
Server MPM: Worker # ZTSサポート
$ sudo php-fpm -i | grep Thread

Thread Safety => disabled # ZTS非対応
Thread Safety => enabled # ZTS対応

PHP拡張モジュールのパスを確認して設定

PHP拡張モジュールパスの確認

$ sudo php -i | grep extension_dir

extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules

PHP拡張モジュールの設定

PHP APIバージョン、PHP ZTSのサポートを確認して、環境に適したライブラリを選択してください。PHP拡張モジュール(PHP Extension module) パスにwhatap.soファイル名をコピーします。

  • PHP ZTSにサポートされている場合 - whatap_zts_[PHP APIバージョン].so
  • PHP ZTSにサポートされていない場合 - whatap[PHP APIバージョン].so_
    # PHP ZTSをサポートしていない場合の例
    $ sudo cp /usr/whatap/php/modules/x64/whatap_20100412.so /usr/lib64/php/modules/whatap.so

whatap-phpのサービス環境変数の設定

$ sudo vi /etc/init.d/whatap-php

export WHATAP_PHP_EXT_HOME= # PHP Extensionパス(/usr/lib64/php/modules)
export WHATAP_PHP_EXT_SRC= # WhaTapライブラリパスおよびファイル名
# (/usr/whatap/php/modules/x64/whatap_20100412.so)]
  1. $WHATAP_PHP_EXT_HOME環境変数にPHP拡張モジュールパスを設定します。
  2. $WHATAP_PHP_EXT_SRC環境変数にWhaTapライブラリ全体のファイルパスを設定します。

whatap.ini設定

  1. PHP追加のini設定パスを確認します。

    $ sudo php -i | grep '.ini files'

    Scan this dir for additional .ini files => /etc/php.d
  2. whatap.iniをそのパスにコピーします。

    $ sudo cp /usr/whatap/php/whatap.ini /etc/php.d/whtap/ini

PHPの追加ini設定パスの確認不可

PHPコンパイル(Compile) インストールオプション ----with-config-file-scan-dir=PATH が設定されていない場合に発生します。

$ sudo php -i | grep '.ini files'

Scan this dir for additional .ini files => (none)

whatap.iniファイルの内容をphp.iniの末尾に追加します。

$ php -i | grep 'php.ini'

Loaded Configuration File => /etc/php.ini

$ sudo vi php.ini

# ファイルの最後に追加
[whatap]
;Enable whatap extension module
extension=whatap.so
whatap.ext.error_enabled=true
whatap.ext.exception_enabled=true
whatap.trace_user_enabled=true
whatap.trace_user_using_ip=false

その他のオプションは、_/usr/whatap/php/whatap.ini_を使用してください。

whatap-phpのサービス(Service) 環境変数設定

$WHATAP_CONFIG_HOME環境変数にwhatap.iniパスを選択します。

PHPの追加iniパスを確認できない場合は、whatap.iniで作成した*/usr/whatap/php*パスを設定してください。

$ sudo vi /etc/init.d/whatap-php

export WHATAP_CONFIG_HOME= # whatap.iniパス(/etc/php.d)

サービスの再起動

  • ApacheおよびPHP-FRMサービスを再起動します。
  • whatap-phpサービスを再起動します。

Error: Not found PHP API

PHP コマンド(CLI)が見つからない場合に発生します。

PHPコマンド(CLI)の位置を確認した上で、PHP拡張モジュールおよびwhatap-phpサービス選択インストール項目を進めてください。

Check PHP API version
$ sudo php -i | grep 'PHP API'

PHP API => 20100412

Error: Not found PHP ini directory

PHP環境の中でScan this dir for additional .ini files項目の値を確認できなかった場合に発生します。PHPコンパイルインストールオプション--with-config-file-scan-dir=PATHが設定されていない場合、対応できる環境はありません。

次の説明書を参照して、PHPコマンド(CLI)の正しい場所を確認した上で、PHP拡張モジュールおよびwhatap-phpサービス選択インストールに進みます。

$ sudo php -i | grep '.ini files'

Scan this dir for additional .ini files => (none)

応答時間分布表にトランザクションが表示されない場合

CPUとメモリのグラフは表示されるが、次の場合は応答時間分布 (ヒットマップ) が表示されません。

  • エージェントは、収集サーバーに正常に接続されましたが、トレーサーは、PHP拡張モジュールに正常に適用されませんでした。
  • セットアップ後にApache および PHP-FPM サービスを再起動していない場合
  1. PHP 拡張モジュールが適用されていることを確認します。

    $ sudo php -m

    [PHP Modules]
    bz2
    calendar
    Core
    ctype
    curl
    date

    whatap # WhaTapモジュールの読み込みを確認

    [Zend Modules]
  2. ApacheおよびPHP-FRMサービスを再起動します。

  3. PHP拡張モジュールが適用されていない場合は、正常にインストールされません。whatap.soまたはwhatap.iniファイルパスがPHP環境と一致していることを確認してください。

    次の説明書を参照して、PHPコマンド(CLI) パスPHP拡張モジュールパスPHP追加ini設定パス の項目を確認してください。

Segmentation fault, Sig bus error

PHPモニタリングを適用した後、サービスにエラーが発生した場合、ApacheまたはPHP-FPMのerror logを確認してください。

error log にsegmentation faultsig busなどのエラー文があるか確認してください。kill child processexit childexit processなどのメッセージが発生します。

当該エラーが発生する場合は、PHP Extensionモジュールであるwhatap.soモジュールで衝突が発生すると考えられます。PHP Extensionモジュールであるwhatap.soを中止した上でApacheまたはPHP-FPMを再起動してください。

サービスに影響しない環境でApacheおよびPHP-FPMにCore dump設定を追加した後に whatap.soを再読み込みしてください。その後、エラーが発生すると、dumpファイルが作成されます。dumpファイルをgdbで分析して原因を解決してください。

Core Dump設定

  1. dumpファイルを作成するディレクトリのアクセス権限を付与します。

    chmod 0777 /home/httpd-core
  2. システム設定をしてください。

    ulimit -c unlimited
    sysctl fs.suid_dumpable=2
    sysctl kernel.core_uses_pid=0
    sysctl kernel.core_pattern='| /home/httpd-core/core-%e.%p'

Apache

  1. Apache confにCoreDumpDirectory項目を設定してください。

    vi /etc/httpd/conf/httpd.conf

    CoreDumpDirectory /home/httpd-core
  2. Apacheを再起動すると、設定は完了です。

  3. エラーが発生するとdumpファイルが作成されます。dumpファイルが生成されると、gdbを使用してエラーの原因を確認します。bt fullコマンドを使用して、全体スタックの情報を確認してください。

    # gdb /usr/sbin/httpd /home/httpd-core/core-httpd.31832
    ...
    ...

    > bt full

PHP-FPM

  1. FPM設定ファイルにrlimit_coreを設定してください。

    rlimit_core = unlimited
  2. PHP-FPMを再起動すると、設定は完了です。

  3. エラーが発生するとdumpファイルが作成されます。dumpファイルが生成されると、gdbを通じてエラーの原因を確認します。bt fullコマンドで全体スタックの情報を確認してください。

    # gdb /usr/sbin/php-fpm /home/httpd-core/core-php-fpm.31832
    ...
    ...

    > bt full