WEB Server - PHP-FPM 설정하기




    PHP 5.3 부터는 PHP-FPM.CONF 설정파일이 바뀌며, 좀더 세세하게 설정할 수 있습니다

    이번 포스팅에서는 PHP-FPM.CONF 설정파일에 대해서 알아보도록 하겠습니다.






    관련 글 :


    WEB Server - NGINX Comfile 설치하기 - https://server-talk.tistory.com/301


    WEB Server - NGINX PHP 연동하기 - CentOS 7 - https://server-talk.tistory.com/307


    WEB Server - PHP 7.x 컴파일 설치하기 - CentOS 7 - https://server-talk.tistory.com/312


    WEB Server - PHP 확장 모듈(phpize) 알아보기 - https://server-talk.tistory.com/316


    WEB Server - PHP zip 확장 모듈 설치하기 - https://server-talk.tistory.com/317


    WEB Server - PHP5.2, PHP-FPM 설정하기 - https://server-talk.tistory.com/324






     PHP-FPM 설정파일 구조





    PHP-FPM 폴더 구조


    bin  - PHP 명령어가 있습니다

     

    etc - PHP-FPM 설정파일이 있습니다

     

    include  - PHP Module이 정보가 있습니다

     

    lib - PHP Engine 있습니다

     

    logs - PHP-FPM LOG 파일 있습니다

     

    sbin - PHP-FPM 구동파일이 있습니다






     PHP-FPM 동작 구조 이해하기




    PHP-FPM은 PHP가 프로세스로 분리되어 운영되고, PHP-FPM이 프로세스로 동작하는데 설정 파일 PHP-FPM.CONF 파일입니다 그리고 PHP-FPM.CONF 파일에 설정 따라 서버의 자원 효율, 서버 부하, 오류 등등에 많은 영향을 미치게 됩니다


    그리하여 PHP-FPM.CONF 파일에 설정 파일에 내용을 유심히 살펴봐야 됩니다




    PHP-FPM는 php-fpm.conf 설정에 따라서 성능 향상과 자원 관리를 효율적으로 할 수 있습니다 그리고 PHP-FPM에서 실행되는 로그설정을 통해 PHP 코드 해석에 따른 오류 분석하여 트러블슈팅을 진행할 수 있습니다.






     PHP-FPM 설정 파일 정의





    FILE : /usr/local/php53/etc/php-fpm.conf



    1. PHP-FPM - 에러 로그 경로 설정


    사용법 : error_log = /[경로]/php-fpm.log


    예시) error_log = /usr/local/php/log/php-fpm.log




    2. PHP-FPM - 로그 등급 지정


    사용법 : log_level = [alert or error or warning or notice or debug]


    예시) log_level = notice


    log_level은 alert, error, warning, notice debug 중에 선택하여 지정하시면 됩니다.




    3. PHP-FPM - 마스터 PHP-FPM 재시작 설정



    사용법 :

    1) emergency_restart_threshold = [숫자]

    2) emergency_restart_threshold = [숫자 and (h or d or m or s)]


    예시) emergency_restart_threshold = 10

    예시) emergency_restart_interval = 1m


    PHP-FPM 의 자식 프로세스가 지정된 시간안에 지정된 횟수만큼 실패하면 재시작 설정하는 부분입니다

    emergency_restart_interval 는 시간이며, emergency_restart_threshold 횟수 입니다.





    여기서 위 그림과 같이 PHP-FPM 프로세스는 부모(Master)프로세스와 자식(Child)프로세스로 PHP-FPM 프로세스가 구동 됩니다





    4. PHP-FPM - 프로세스 시간 제한 설정


    사용법 : process_control_timeout = [숫자]


    예시) process_control_timeout = 10


    하위 프로세스가 마스터 프로세스 신호에 반응을 기다리는 시간을 지정합니다




    5. PHP-FPM - 최대 프로세스 수 설정


    사용법 : process.max [숫자]


    예시) process.max = 128




    6. PHP-FPM - 백그라운드 혹은 포그라운드 설정


    사용법 : daemonize = [yes or no]


    예시) daemonize = yes


    FPM 백그라운드 또는 포그라운드 설정입니다 FPM의 상세한 내용을 원하시면 포그라운드를 통해 모니터링을 하시면 됩니다.




    7. PHP-FPM - 사용자, 그룹 설정


    사용법 :

    1) user = [사용자명]

    2) group = [그룹명]


    예시) user = nobody

    예시) group = nobody


    user와 그룹을 지정합니다 user는 필수이며, 그룹은 지정하지 않을 경우 기본 사용자 그룹으로 지정 됩니다




    8. PHP-FPM - FastCGI 요청에 연결 주소 설정


    사용법 : listen = [IP]:[Port]


    예시) listen = 127.0.0.1:9000


    NGINX, Apache 등등 PHP 요청에 필요한 주소를 지정하는 부분 입니다.




    9. PHP-FPM - FastCGI 요청에 연결 허용 IP 주소 설정


    사용법 : listen.allowed_clients = [IP]


    예시) listen.allowed_clients = 192.168.0.127


    연결 허용하실 IP 주소를 지정하시면 되며, 여러개의 IP를 허용할 경우 ,(쉼표)로 구분하면 됩니다 그리고 값을 비워 두시면 모든 IP 주소가 허용됩니다.




    10. PHP-FPM - 프로세스 제어 설정


    사용법 : pm = [static or ondemand or dynamic]


    예시) pm = static


    pm = static


    static : pm.max_children 에 지정된 자식 프로세스로 고정 됩니다


    ondemand : 요청시 프로세스가 생성되며 동적이 아닌 최대 pm.start_servers 의 수 만큼 생성됩니다


    dynamic : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers 값의 따라 자식 프로세스가 동적으로 생성 됩니다




    10. PHP-FPM - 실행시 자식 프로세스 생성 수


    사용법 : pm.start_servers = [숫자]


    예시) pm.start_servers = 2




    11. PHP-FPM - 최소 자식 프로세스 설정


    사용법 : pm.min_spare_servers = [숫자]


    min_spare_servers = 1


    최소로 유지되어야 될 자식 프로세스를 지정하는 부분 입니다.



    12. PHP-FPM - 최대 자식 프로세스 설정


    사용법 : pm.max_spare_servers = [숫자]


    pm.max_spare_servers = 3



    12. PHP-FPM - 프로세스 최대 requests 설정


    사용법 : pm.max_requests = [숫자]


    예시) pm.max_requests = 500


    자식 프로세스당 request 처리량 지정이며, 예로 500을 지정하면 500번의 request를 처리하고 프로세스를 해제하고 새로 프로세스를 생성하여 메모리 누수를 막을 수 있습니다

    그리고 너무 낮을 값을 지정할 경우 여러 번 프로세스를 해제,생성이 반복되면서 CPU 부화가 생기게 되며 서버가 다운될 수 있으니 적절한 값으로 설정하셔야 합니다



    13. PHP-FPM - 엑세스 로그 파일 경로 설정


    사용법 : access.log = /[경로]/access.log


    예시) access.log = /usr/local/php/log/access.log



    14. PHP-FPM - 느린 요청의 대한 로그 파일 경로 설정


    사용법 : 

    1) slowlog = /usr/local/php/log/slow.log

    2) request_slowlog_timeout = [숫자]


    예시) slowlog = /usr/local/php/log/slow.log

    예시) request_slowlog_timeout = 5s


    요청을 처리하기 기준 시간이 지정된 시간이 초과될 경우 PHP 역추적하여 파일의 로그를 남기게 됩니다

    request_slowlog_timeout 는 시간이며, slowlog의 경로 입니다.

    Posted by 서버이야기