ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 서버에 설치된 MPM 확인
    웹 운영 2021. 3. 27. 04:14
    반응형

     

    운영 환경은 웹서버로 apache를 사용중이며, 

    웹 서비스 운영 중 웹서버 httpd.log에 이상한 로그가 남는 것을 확인하였다.

    당장의 서비스에는 지장없어 보였으나, 해당 로그가 왜 남는지 분석해보기로 했다.

     

    WARNING: MaxClients of 4096 would require 64 servers, and would exceed the ServerLimit value of 16. Automatically lowering MaxClients to 1024.  To increase,  please see the ServerLimit directive.

     

    해당 로그 중 MaxClient, Serverlimit 등과 같은 내용으로 MPM 설정에서 나온 것으로 생각했다.

    그래서 선임에게 확인한 내용으로는

    "저희 웹서버 MPM 은 어떤 종류로 설정되어있나요?" 였고, 돌아오는 대답은 "Worker" 였다.

    하지만 

    apachectl -V 로 확인되는건 Prefork 였다.

    Server version: Apache/2.2.26 (Unix)
    Server built: 
    Server's Module Magic Number: 
    Server loaded: 
    Compiled using: 
    Architecture: 64-bit
    Server MPM: Prefork
    threaded: no
    forked: yes (variable process count)
    Server compiled with.... 
     

    분명 Prefork 로 보여지는데 이야기해주시는건 Worker 였다.

    그러고나서 선임의 이야기에 따라 확인을 해보니 apachectl이 설치된 디렉토리로가서 ./apachectl -V 로 확인해보니 Worker 로 보여졌다.

    Server version: Apache/2.2.26 (Unix)
    Server built: Jul 18 2014 10:27:16
    Server's Module Magic Number: 20051115:34
    Server loaded: APR 1.4.8, APR-Util 1.5.2
    Compiled using: APR 1.3.9, APR-Util 1.3.9
    Architecture: 64-bit
    Server MPM: Worker
    threaded: yes (fixed thread count)
    forked: yes (variable process count)
    Server compiled with....

     

    일단 앞선 로그에서의 내용 확인도 확인이지만, 분명 OS에 MPM 설정은 전체로  반영되는줄 알았는데.. 왜 2개가 보여지는건지 확인해보았다.

    선임과 저의 차이는 apachectl -V 로의 확인이냐 ./apachectl -V 로의 확인이냐의 차이였고,

    이렇게 다른 명령어로 서로 다른 설정이 확인되는 경우는 OS에 설치된 apachectl과 별도로 설치한 apachectl MPM 설정이 다르기 때문이었다.

    그렇다면, 현재는 기동중인 웹서버는 둘 중 어떤 설정으로 운영되는것일까?

    "실제 프로세스로 기동된 httpd의 apache 경로를 확인하면 된다."

    그럼 다시 돌아가서 WARNING 로그의 원인으로는

    운영중인 웹서버는 Worker 의 MPM으로 설정되어있으며,

    설정된 값 중 ServerLimit이 설정이 안되있으며,

    <IfModule worker.c>
        ThreadLimit 4096
        StartServers 10 
        MaxClients 4096
        MinSpareThreads 512
        MaxSpareThreads 1024
        ThreadsPerChild 64
        MaxRequestsPerChild 10000
    </IfModule>

    ServerLimit은 MaxClient / ThreadsPerChild 보다 크거나 같아야 하기 때문에 ServerLimit 64를 추가해주었다.

    수정하여 재기동하였더니 해당로그는 확인되지 않았다.

     

     

    * 로그확인을 통해 MPM에 대해 조금 더 알 수 있었고, OS에 설치된 apache와 별도로 설치된 apache로 인한 차이에 대해서도 알 수 있었다. 

     

    * MPM : (Multi-process Module) 다중 처리모듈로, 받아들인 요청에 대하여 처리 요청을 다중으로 분배하는 것
    * Prefork vs Worker : 멀티프로세스를 사용해 요청을 처리하는 것과 멀티쓰레드오 멀티프로세스를 사용해 요청을 처리하는 차이.

     

    반응형

    '웹 운영' 카테고리의 다른 글

    GC Overhead Limit Exceeded 발생..  (0) 2022.03.01
    DNS  (0) 2020.03.07
    ISMS - Information Security Management System 심사 후기  (0) 2020.02.28
    데브옵스란..  (3) 2020.02.07
    웹 운영 회사 취업 후 신입 이야기  (1) 2019.12.24
Designed by Tistory.