안녕하세요,

 

현재 제 사이트는 일일 사용자가 62,000명입니다.

사양은 아래와 같습니다.

CPU Core : 12개

Ram : 10GB

HDD : 400GB

SWAP : 1024mb

Nginx, MySQL[InnoDB],php7.0, 그누보드5[아미나 빌더]

최적화 작업 : Nginx - X ,MySQL[InnoDB] - X ,php7.0 - X

 

종종 피크타임[시간당 5,000명]때 사이트 속도가 느려지는 것 외에는 별 문제가 없습니다.

종종 사이트 접속이 안될때 swap을 확인해보면 꽉 차 있습니다.

그래서 크론탭으로 service mysql restart를 이용해 하루마다 mysql을 재시작합니다.

그러면 다시 사이트가 접속이 됩니다.

그러나 이때 10초정도 사이트에 딜레이가 생겨 유저들이 이탈할때가 있습니다.

딜레이 없이 스왑을 비울 수 있는지 알고 싶습니다.

읽어주셔서 감사합니다~

  • profile
    애초에 RAM을 너무 많이 사용하지 않도록 php-fpm과 DB 등을 튜닝해 놓으면
    swap을 다 쓸 일도 없고, 비울 필요도 없겠지요.

    종종 사이트 접속이 안되는 게 문제이지, 10초 딜레이를 걱정하실 때가 아닙니다.
    정상적인 서버라면 1년 넘게 돌려도 RAM/swap 사용량이 일정 수준을 넘어가지 않습니다.
    RAM이 10GB나 되는데 다 쓰고 swap으로 넘어간다면 심각한 거죠...
  • profile
    스왑을 비우는것 보다 메모리를 많이 사용하는 부분을 찾아서 수정 햐셔야 할것 같네요.
  • profile
    db서버를 분리해보세요. db서버 성능문제인것 같아요.
  • ?

    저도 비슷한 경험을 한적이 있고 현재 진행형지요 ㅎㅎㅎ

    제 경우를 중심으로 설명 드리겠습니다.

     

    보통 2주에서 1달정도는 어떻게 어떻게 버팁니다.

     

    근데 어느시점이 되면 스왑을 과도하게 쓰면서 로드에버리지가 엄청 올라서 뻣어 버리더라구요



    저같은 경우 맨처음 시도한게 스왑을 아예 쓰지 않아보는거였습니다.

    저도 처음에 스왑을 사용하기 시작하면 로드에버리지가 100대를 훌쩍 넘기면서 서버가 다운지경에 이르러서...


    swapoff -a

    이렇게 해서 스왑을 아예 쓰지 않게 해봤습니다.

    스왑이란게 저속의 보조기억장치를 사용하므로 사용하기 시작하면 RAM 과는 속도 비교가 안되게 느리므로 로드에버리지가 올라갈수 밖에 없으니 사용을 권장하지 않으시는 분들이 많더라구요.


    그래도... 역시나 어느순간이 되면 로드에버리지가 100대를 훌쩍 넘기더라구요.

    스왑 관련 문제가 아니였다는 거지요..(일부 관련성은 있겠지만.)


    리눅스 메모리 및 스왑 정책에 따라서 메모리는 아무리 많아도 최대한 사용하도록 작동하게 되어 있어서 여분의 메모리를 확보하는 방법을 통해서 사용자가 몰릴때... 메모리 용량으로 한번 밀어 붙어 보는거였습니다.

    16G 램에서 4G는 DB에 할당하고 나머지를 사용했는데요.

    리눅스 기본 설정에서는 메모리를 아무리 많이 달아도 free 메모리는 점점 줄어들어 결국 거의 0에 가깝게 되니깐.. 결국은 같은 현상이 생기더라구요.

    결국 다음 해결책으로

    https://brunch.co.kr/@alden/14

    위 글처럼
    vm.swapiness 와 <--1로 셋팅했습니다. 0보다는 1이 나을것 같아서요.

    vm.min_free_kbytes 부분을 손봤어요  <--2G 정도 잡았습니다.

    2G free 확보하게 했구요.

    그랬더니

    한 50여일 정도 서버가 버티던데...

    결국은 또 뻣어서

    새벽시간대에 사용자 거의 없을때

    crontab에

    service httpd restart 추가해서

    아파치 문제인지 유심히 관찰했습니다...

    근데 결국 이게 또 한 60일 지나니깐 뻣더라구요...

    결국

    crontab에

    service mysqld restart 추가 했네요...

    그러고 약 10일 지났는데...

    저도 정확한 원일을 잘 모르겠습니다.

    제 삽질 경험이 조금이나마 도움이 되셨으면 합니다.

     

    ps : 부족한 실력이지만

     

    apache 로그, mysql 로그 다 뒤졌는데 특별한 이상은 발견되지 않았습니다.

     

    에러 로그를 보면 mysql 소켓연결이 안된다고 하는데.... 그때가 로드에버리지가 높아서 지연되면서 밀리는 현상 같았습니다....

     

    최악의 경우 mysql 이 그냥 stop 되었다는 로그를 남기고 죽는 경우도 봤습니다.