운영중인 사이트가 비정기적으로 굉장히 로딩이 느려지는 현상으로 카페24에 문의한 결과 "apache2 메모리 과점유로 인한 메모리 부족" 원인으로 답변을 받았습니다.

 

어떤 조치를 취해야 할지 도움 말씀 부탁드리겠습니다.

 

1. 사이트 환경

 카페24 가상서버 호스팅 ( 램 3G ) / XE 최신 버젼 / 일 1000~ 1500명 수준 방문

 

2. 이전 질문글  (  https://xetown.com/qna/717132  )에서 기진곰님의 조언대로 팁을 적용 그동안 문제없이 사이트 운영중이었습니다.

 

아래 시간대에 apache2 프로세스가 과도안 자원을 사용하면서

OOM(Out Of Memory)가 발생된 것으로 확인됩니다.

메모리 및 swap이 모두 소진되면서 성능상에 상당한 저하가 또는 일시적인 다운이 있었을 것으로 예상됩니다.

지속적으로 apache2 프로세스가 위와 같은 상태가 지속되지 않도록 상태를 확인 해보셔야 할 것으로 보이니 이점 이용에 참고 부탁 드립니다.

 

-> MaxRequestWorkers 값을 150에서 20으로 수정 변경  문제가 해결 되었습니다.

80889ba3ce52e489304531e10ea73764.jpeg

 

3. 그동안 방문자수에는 큰 변화가 없었고 최근 사이트에 SSL 을 적용한 이후 비 정기적으로 사이트 로딩이 굉장히 느려져서 다시 카페24에 문의 후 아래와 같은 답변을 받았습니다. 

 

서버 확인 시 이전에도 동일한 apache2 메모리 과점유로 인한 메모리 부족 상태로 확인됩니다.

주기적으로 apache를 재시작 하시어 메모리를 확보하시길 바라며 과접근 등으로 인하여 추가적인 자원 확보가 필요하시다면

상위사양으로 변경을 고려 해보셔야 할 것입니다.

20a81252d0d4ab792b6543826199fc95.jpeg

 

 

저의 서버 메모리 관련 부분입니다.

남은 메모리가 아파치를 재부팅 후 처음 보면 대략 640메가 정도인데 이틀정도 지나면 380메가 정도로 점점 줄어들고 있습니다.

 

1.PNG

2.PNG

 

 

 

궁금한 부분이 

1. 제가 올린 현재 저의 서버에 관한 정보가 충분치 않을것 같은데요. 메모리 부족현상에 대해 혹시 적용 해볼만한 팁이 있을까요? 

2. 카페24에서 답변 받은 내용 중 "과접근" 은 어디서 확인 해 볼 수 있을까요? 혹시 SSL 설치 후 검색 봇의 방문이 영향을 미칠 수 있을까요?

2. 방문자수에 큰 변화가 없는데 상위사양으로 올리는게 맞는지 그리고 아파치서버를 매일 특정시간에 재부팅하는 스크립터(?)를 검색을 해봤지만 찾을 수 가 없는데 혹시 참고 해볼만한 곳 아시면 도움 부탁드립니다.

 

  • profile

    마지막 스샷에서도 메모리는 충분히 남아 있습니다. 총 3009M 중 487M를 사용하고 2521M가 남아 있네요.

    첫번째 줄의 used와 free는 보는 거 아닙니다. top에 나오는 메모리 사용량도 마찬가지로 엉터리이니 믿지 마세요.

     

    즉 평소 아파치의 메모리 사용량에는 문제가 없는데, 갑자기 1기가 넘게 차지하면서 뻗어버리는 것 같습니다.

    어딘가 메모리 누수가 있는 모양인데요, php.ini에서 memory_limit, post_max_size, upload_max_filesize 등이

    너무 크게 지정되어 있는 게 아닌지 확인해 볼 필요가 있겠습니다.

     

    서버의 메모리 사용량은 일정 수준까지 점차 증가한 후, 이후 몇 달이 지나도 비슷한 상태를 유지하는 것이 정상입니다.

    주기적으로 재시작해 주는 것은 땜빵밖에 되지 않습니다. 무슨 저따위 조언을 해주는지 모르겠네요.

     

    메모리가 충분하지 않은 가상서버에서 적용할 수 있는 최상의 팁이라면

    링크하신 글에서도 잠깐 언급했듯이 아파치를 버리고 nginx로 넘어가시는 거예요^^ (아파치님 죄송...)

  • profile ?

    게시판 업로드용량 증가를 위해 적용한 팁이 너무 과도 하게 작용한 걸까요?
    [ 게시판 파일 업로드 기본 용량 증가 ]
    #vi /etc/php5/apache2/php.ini
    #vi /etc/php5/cli/php.ini 의 2개 파일 모두 아래와 같이 변경했습니다. 너무 과도하다면 적당한 값을 어떻게 적용하면 될까요?

    :/max_execution_time 385라인 초기값 30 -> 3600
    :/max_input_time 395라인 초기값 60 -> 3600
    :/memory_limit 406라인 초기값 -1 ->100M
    :/post_max_size 엔터 673라인 초기값 8M ->110M
    :/upload_max_filesize 805라인 초기값 2M ->100M

    그리고 MaxRequestWorkers 값을 20에서 50정도로 늘려준상태입니다.

    매번 도움 주시는 부분 감사의 말씀 드립니다. 

  • ? profile

    메모리 제한 100M 정도로 문제가 생기지는 않습니다만 (보통 기본값이 128M입니다)
    동접자 50명이 각각 100M씩 쓴다고 가정하면 문제가 생길 수도 있습니다.

    메모리 제한을 너무 낮추면 XE가 제대로 돌아가지 못하므로

    MaxRequestWorkers를 원래대로 낮추는 것이 가장 분명한 해결책이겠습니다.

    max_execution_time을 크게 늘린 것도 상당히 위험해 보입니다.
    타임아웃이 길면 한 사람이 아파치 프로세스 하나를 무한정 붙잡고 있을 수 있게 되므로
    동접자 수가 같더라도 평소보다 더 많은 프로세스가 생성될 수밖에 없고,
    이것들이 각각 메모리를 차지하기 시작하면 서버가 다운되는 것은 시간 문제입니다.

    인터넷상의 모든 타임아웃은 30초를 넘지 않는 것이 좋습니다.
    너무 비효율적으로 코딩되어서 실행 시간이 30초 이상 걸리는 기능이 있다면
    그거 하나만 타임아웃 걸려서 뻗는 것이 서버 전체가 뻗는 것보다 낫기 때문입니다.
    어차피 뭐 하나 클릭하고 30초씩 기다려 줄 사람도 없습니다. 벌써 창 닫고 떠났지요.

  • profile ?
    MaxRequestWorkers 값을 알려주신 20으로 되돌리고
    max_execution_time 값을 3600에서 초기값 30으로

    그리고 max_input_time 초기값 60에서 3600으로 변경한 부분을 60으로 되돌리는게 나을런지 궁금합니다.

    일단은 말씀 주신 부분과 max_input_time 값도 변경값 3600에서 30 초기값으로 돌리고 운영을 한번 해보겠습니다.

    매번 도움 말씀 감사드립니다.
  • ? profile
    max_input_time은 기본값 60으로 해놓아도 별 문제가 생기지 않습니다.

    나머지는 말씀하신 것처럼 줄이는 것이 좋겠네요. 더 많은 동접자를 소화해야 한다면 아파치와 PHP를 분리하거나 nginx로 옮기시는 방법밖에 없습니다.
  • profile ?

    기진곰님 증상이 개선되지 않아 한가지만 더 문의 드리겠습니다.

    MaxRequestWorkers 값 20

    :/max_execution_time 385라인 초기값 30 
    :/max_input_time 395라인 초기값 60 
    :/memory_limit 406라인 초기값 100M
    :/post_max_size 엔터 673라인 초기값 110M
    :/upload_max_filesize 805라인 초기값 100M

     

    10명 정도 동시 접속이 상태에서 보면 아래와 같이 버퍼/캐쉬메모리는 별 크게 작아진 부분은 안 보이는데 계속 비정기적으로 접속이 아주 느려집니다.

    2.PNG

     

    카페 24 서버 호스팅의 방화벽 설정에서 ssl 포트 443 오픈을 한것을 삭제하고 xe에서 http로 접속 관련된 내용을 설정하고 접속해보면 추정이지만 비정기적으로 느려지는 현상이 없는것 같습니다.

    ㅁㅁㅁ.PNG

     

    ssl 설정 시 아래 카페24의 답변에 있는 과접근과 관련이 있는 부분이 혹시 있을까요?

    20a81252d0d4ab792b6543826199fc95.jpeg

    주기적으로 apache를 재시작 하시어 메모리를 확보하시길 바라며 과접근 등으로 인하여 추가적인 자원 확보가 필요하시다면

    상위사양으로 변경을 고려 해보셔야 할 것입니다. 이점 이용에 참고해주시길 바랍니다.

     

     

    혹 어떤 부분을 더 살펴봐야 할지 도움 말씀 부탁드리겠습니다.

     

  • ? profile
    예전처럼 서버가 다운되나요? 아니면 그냥 가끔씩 느려지는 건가요?

    https는 느린데 http는 괜찮다는 말씀인가요? 아니면 방화벽에서 https를 지우는 것만으로도 효과가 있나요?

    저사양 가상서버에서 아파치가 RAM을 다 잡아먹지 않도록 하려면 MaxRequestWorkers 설정으로 동접수 제한을 걸어야 하기 때문에, 동접수가 제한을 초과하는 순간 접속이 지연되는 것은 감수하셔야 합니다. 이 증상을 조금이나마 완화시키려면 아파치의 KeepAliveTimeout 설정을 3~5초 정도로 줄여보세요. 페이지 로딩이 끝난 후 아무 것도 안 하고 있는 방문자는 서버에서 접속을 끊어버리고 다른 방문자를 우선 처리합니다.

    과접근이라는 말은 전문용어가 아니고요, 그냥 동접수가 많다는 뜻으로 읽으시면 될 것 같습니다.
  • profile ?

    1. 예전처럼 서버가 다운되나요? 아니면 그냥 가끔씩 느려지는 건가요?
    -> 10초정도 느려지는 경우도 있고 가끔 아래 이미지처럼 끊어지는 경우도 있습니다.

    ㄴㄴ.PNG

     

    2. https는 느린데 http는 괜찮다는 말씀인가요? 아니면 방화벽에서 https를 지우는 것만으로도 효과가 있나요?
    같은 서버환경에서 ssl 설치 전에는 아무 문제가 없었고 ssl 설치 이후 문제가 발생되는 걸로 추정하고 있습니다.

    현재 카페24 자체 방화벽 443 오픈 된것 삭제, xe 기본설정에서 hhtp로 변환 시험 작동 중이고 아직 접속에는 문제가 없습니다.

     

    3. 저사양 가상서버에서 아파치가 RAM을 다 잡아먹지 않도록 하려면 MaxRequestWorkers 설정으로 동접수 제한을 걸어야 하기 때문에, 동접수가 제한을 초과하는 순간 접속이 지연되는 것은 감수하셔야 합니다. 이 증상을 조금이나마 완화시키려면 아파치의 KeepAliveTimeout 설정을 3~5초 정도로 줄여보세요. 페이지 로딩이 끝난 후 아무 것도 안 하고 있는 방문자는 서버에서 접속을 끊어버리고 다른 방문자를 우선 처리합니다.

    -> 설정을 바꿔보고 테스트 해 보겠습니다.

  • profile ?

    기진곰님 램을 1기가 추가 후에도 같은 문제가 있어 카페24로 부터 아래와 같은 답변을 받았는데요.
    어떤 모듈, 애드온, 레이아웃 인지 혹시 한번 봐주실 수 있으실 런지 부탁드리겠습니다.

    ========================================
    안녕하세요.
    카페24 호스팅입니다.

    사이트가 느려지는 문제는 여러가지 문제일 수 있습니다.
    host 서버의 자원상태나 부하상태는 문제없습니다.
    고객님서버내에 구동한 웹서비스 접속시 발생되는것으로 보이며 후 발생되는것이라면 제작된 코드자체에서 버그등 무한루프등으로인해 메모리 및 서버자원이 고갈될 수 있습니다.

    또한 DB쪽의 지연등으로도 문제가될수있는 상태입니다.

    웹접근시 개발자도구로 체크시 아래와같은 내용이 무한정으로 ! 체크가되는데 해당부분의 영향일 수 있으니 사이트 제작자에게 요청하셔서 사이트내에 전반적인 버그나 오류가없는지 검수받아보시기 바랍니다.

    x.min.js?20170918153215:1 DEPRECATED : xGetElementById() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xDef() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xStr() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xNum() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xScrollTop() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xDef() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xDef() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xClientWidth() is deprecated function.
    x.min.js?20170918153215:1 DEPRECATED : xTop() is deprecated function.
    x.min.js?20170918153215:1 DEPR! ECATED : xGetElementById() is deprecated function.

    다른문의가 있으시면 언제든지 게시판으로 문의주시기 바랍니다.
    성심성의껏 안내해 드리겠습니다.

    =========================================================

    개발자 도구에서 아마 아래 이미지 경로인것 같습니다.

    2017-10-27 12,09,30.PNG

     

  • ? profile
    x.min.js에서 나오는 메시지는 오류가 아닙니다. 서버 안정성에 영향을 주지도 않습니다.
  • profile ?
    관련 애드온 ( 졸졸이 배너 애드온 )을 꺼고 테스트 해봐도 말씀 처럼 영향을 미치지 않는가 봅니다. 계속 홈페이지에서 이것 저것 파일 올리고 작업하다보면 Google Analytics 동접자수 9~12정도 되면 페이지를 못불러오다 위 대글이미지 안내 메세지가 뜨고 또 몇십초정도 기달려다 접속하면 빠르게 접속이 되고..이런 상황입니다.

    음 같은 서버환경에서 동접 약15이내 일방문자수 큰 변화가 없는데도 추정상 ssl 설치 한것과 카페24 에서 방화벽 관리에서 포트443 (tcp )를 추가 한 이후에 발생하는 문제인것 같기도 한데...램을 올려도 해결이 안되고 그러네요.
    관심을 가져주신 점 감사 말씀드립니다. 주말 잘 보내세요.
  • ? profile
    계속 문제가 있다면 서버진단 한번 의뢰해 보세요^^;
    특정시간대 로그기록만 찍어보는 거랑 실제로 들어가서 보는 거랑 또 다릅니다.
  • profile ?

    네 서비스운영에 집중하고 싶은데 맘대로 잘 안되네요.
    진단이 나을지 장기적으로 볼때 아예 이전이 나을지 고민 중이구요. 개인적으로는 내년 봄쯤에 좀 한가해질때까지만 버텨 주면 좋을것 같은데 상황을 지켜보고 조만간 결정이 되면 문의드리겠습니다.

  • profile
    돈 더내고 메모리 더 큰 상위상품으로 변경하면 되지 않을까요
  • profile ?

    접속자수에는 큰 변화가 없는데 ssl 설치 이후 생기는 문제인것 같아서요
    단순 메모리 업으로 증상이 개선될지 잘 모르는 부분이 있어 고민 중입니다.