트러블 슈팅

PHP 확장 모듈(PHP Extension module) 및 whatap-php 서비스(Service) 수동 설정

PHP 확장 모듈(PHP Extension module) , whatap-php 서비스(Service) 설치 및 선택 설치(install.sh )가 정상적으로 이루어 지지 않을 경우 수동으로 설정하는 방법을 설명합니다. PHP 컴파일(Compile) 설치 등의 이유로 환경 정보를 확인 할 수 없는 경우 사용합니다.

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=            # 발급된 라이센스 key
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_name

Apache 서버는 ‘APHP’, php-fpm 은 ‘FPHP’를 사용합니다.

whatap.app_process_name

Apache 또는 php-fpm 의 실행 프로세스 이름 설정으로 정확한 프로세스명 입력하면, 해당 프로세스에 대한 사용 메모리를 수집합니다. 예) httpd, apach2, php-fpm, php-fpm 등.

PHP 명령어(CLI) 경로 확인

$ which php

/usr/bin/php

whatap-php 서비스(Service) 환경 변수 설정

$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) 지원 여부 확인

apache
$ sudo apachectl -V | grep MPM

Server MPM: Prefork       	# ZTS 지원 안함
Server MPM: Worker       	# ZTS 지원
PHP-FPM
$ sudo php-fpm -i | grep Thread

Thread Safety => disabled       	# ZTS 지원 안함
Thread Safety => enabled       	# ZTS 지원

PHP 확장 모듈(PHP Extension module) 경로 확인 및 설정

PHP 확장 모듈(PHP Extension module) 경로 확인

$ sudo php -i | grep extension_dir

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

PHP 확장 모듈(PHP Extension module) 설정

PHP API 버전, PHP ZTS 지원 여부를 확인하여 환경에 적합한 라이브러리를 선택하여 PHP 확장 모듈(PHP Extension module) 경로에 whatap.so 파일명으로 복사합니다.

  • PHP ZTS를 지원할 경우 - whatap_zts_[PHP API 버전].so

  • PHP ZTS를 지원하지 않을 경우 - whatap_[PHP API 버전].so

    $ sudo cp /usr/whatap/php/modules/x64/whatap_20100412.so /usr/lib64/php/modules/whatap.so

whatap-php 서비스(Service) 환경 변수 설정

$WHATAP_PHP_EXT_HOME 환경변수에 PHP 확장 모듈 경로를 설정합니다.

$WHATAP_PHP_EXT_SRC 환경변수에 와탭 라이브러리 전체 파일 경로를 설정합니다.

$ 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)]

whatap.ini 설정

PHP 추가 ini 설정 경로 확인

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

Scan this dir for additional .ini files => /etc/php.d

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 서비스(Service)를 재시작 합니다.

whatap-php 서비스(Service)를 재시작 합니다.

Error: Not found PHP API

PHP 명령어(CLI)를 찾지 못하는 경우 발생합니다.

PHP 명령어(CLI)의 위치를 정확히 찾고, ‘PHP 확장 모듈(PHP Extension module) 및 whatap-php 서비스(Service) 선택 설치’ 항목을 진행합니다.

PHP API 버전 정보 확인
$ sudo php -i | grep 'PHP API'

PHP API => 20100412

Error: Not found PHP ini directory

PHP 환경 중 ‘Scan this dir for additional .ini files’ 항목의 값을 확인 하지 못하는 경우 발생합니다. PHP 컴파일(Compile) 설치 옵션 ‘--with-config-file-scan-dir=PATH’ 이 설정 안된 경우에 해당 환경정보가 없습니다. PHP 명령어의(CLI) 경로를 정확히 찾고, ‘PHP 확장 모듈(PHP Extension module) 및 whata-php 서비스(Service) 수동 설정’ 항목을 진행합니다.

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

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

응답 시간 분포도 (히트맵)에 트랜잭션이 표시되지 않는 경우

CPU, Memory의 그래프는 표기 되지만 응답 시간 분포도(히트맵)가 표기 되지 않는 현상은 에이전트가 수집서버와 정상적으로 연결 되었지만,
트레이서가 정상적으로 PHP 확장 모듈(PHP Extension module)로 적용되지 않았거나,
설정 후 Apache 및 PHP-FPM 서비스(Service)를 재시작 하지 않은 경우에 발생합니다.

PHP 확장 모듈(PHP Extension module) 확인

$ sudo php -m

 [PHP Modules]
bz2
calendar
Core
ctype
curl
date
…
whatap                 # 와탭 모듈 로드 확인
…
[Zend Modules]

PHP 확장 모듈(PHP Extension module) 적용을 확인 한 경우 Apache 및 PHP-FPM 서비스(Service)를 재시작 합니다.
적용이 안된 경우는 정상 설치 되지 않은 것으로 whatap.so 또는 whatap.ini 파일 경로가 PHP 환경과 일치하는 지 확인합니다.
‘PHP 명령어(CLI) 경로 확인,’ PHP 확장 모듈(PHP Extension module) 경로 확인’, ‘PHP 추가 ini 설정 경로 확인’ 을 확인합니다.

Segmantaion fault, Sig bus error

PHP 모니터링을 적용한 후 서비스에 오류가 발생할 경우 Apache 또는 PHP-FPM 의 error log를 확인합니다.

error log 내용 중 segmantaion 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 설정

덤프파일을 생성할 디렉토리의 권한을 부여합니다.

chmod 0777 /home/httpd-core

시스템 설정을 합니다.

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

Apache conf 에 CoreDumpDirectory 항목을 설정합니다.

vi /etc/httpd/conf/httpd.conf

CoreDumpDirectory /home/httpd-core

Apache 를 재시작하면 설정이 완료 됩니다. 오류가 발생하면 dump 파일이 생성됩니다.

dump 파일이 생성되면 gdb를 통해 오류 원일을 확인합니다. bt full 명령어를 통해서 전체 스택 정보를 확인합니다.

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

> bt full

PHP-FPM

FPM 설정 파일에서 rlimit_core 를 설정합니다.

rlimit_core = unlimited

PHP-FPM을 재시작하면 설정이 완료 됩니다. 오류가 발생하면 dump 파일이 생성됩니다.

dump 파일이 생성되면 gdb를 통해 오류 원일을 확인합니다. bt full 명령어를 통해서 전체 스택 정보를 확인합니다.

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

> bt full