본문으로 건너뛰기

설치 문제 해결

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= # 웹서버 구분 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 의 실행 프로세스 이름 설정으로 정확한 프로세스명 입력하면, 해당 프로세스에 대한 사용 메모리를 수집합니다. 예시로 httpd, apache2, php-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= # 와탭 라이브러리 경로 및 파일명
# (/usr/whatap/php/modules/x64/whatap_20100412.so)]
  1. $WHATAP_PHP_EXT_HOME 환경변수에 PHP 확장 모듈 경로를 설정하세요.
  2. $WHATAP_PHP_EXT_SRC 환경변수에 와탭 라이브러리 전체 파일 경로를 설정하세요.

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-FPM 서비스를 재시작하세요.
  • 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와 Memory 그래프를 볼 수 있지만 응답 시간 분포도 즉 히트맵을 볼 수 없는 현상은 다음과 같은 경우에 발생합니다.

  • 에이전트가 수집 서버와 정상적으로 연결되었으나 트레이서가 정상적으로 PHP 확장 모듈에 적용되지 않은 경우
  • 설정 후 Apache 및 PHP-FPM 서비스를 재시작하지 않은 경우
  1. PHP 확장 모듈이 적용되었는지 확인하세요.

    $ sudo php -m

    [PHP Modules]
    bz2
    calendar
    Core
    ctype
    curl
    date

    whatap # 와탭 모듈 로드 확인

    [Zend Modules]
  2. Apache 및 PHP-FPM 서비스를 재시작하세요.

  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 fault, sig bus 등의 오류 문구가 있는지 확인하세요. kill child process, exit child, exit 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