서버 메모리는 8GB이고

램 용량이 평소에 모자라진 않습니다.

 

스왑 메모리도 램 용량과 동일하게 맞춰놨는데 동접자가 확 튈 경우 mysql 데몬이 죽는것보다 느리더라도 스왑메모리 쓰는게 나을 것 같아서 스왑 쪽을 늘릴까하는데 서버에 안좋은가요?

  • profile
    동접자 확 튀어서 서버죽어도 8기가 다 못쓸걸요
  • profile

    메모리가 부족하지 않다면 스왑을 설정할 이유는 전혀 없고 설사 메모리가 부족해도 스왑을 설정하는것보다 메모리를 증설하는것이 좋을겁니다.

    아무리 SSD라고 해도 메모리보다는 느립니다. 애초에 동접수가 늘어난다고 메모리 사용량이 급격히 늘어나지는 않을 뿐더러, 메모리가 부족해서 스왑까지 끌어다 쓸 상황이라면 스왑 사용으로 인해 성능 저하가 발생하므로 사실상 서버가 죽은것과 다르지 않는 상태가 될겁니다.

    자세한 답변은 아마 서버잘알(?)분들이 오셔서 해주실테지만 아는대로 적어봤습니다.

     

    이건 재미로... 요즘 핫한 ChatGPT 답변은 아래와 같습니다.

    ===

    스왑 메모리의 크기는 프로그램의 요구에 따라 늘릴 수 있지만, 램 용량과 동일하게 맞추는 것은 적합하지 않을 수 있습니다. 스왑 메모리는 하드 디스크를 대체하여 램 메모리의 부족한 부분을 가상적으로 확장하는 것을 말합니다. 만약 램 용량이 부족하지 않다면, 스왑 메모리를 많이 사용할 경우 디스크 I/O 속도가 느려져 성능이 저하될 수 있습니다.

    따라서 서버의 메모리 용량이 8GB이고, 램 용량이 평소에 모자라지 않으면, 스왑 메모리를 많이 사용하는 것은 적합하지 않을 수 있습니다. 대신 램의 용량을 늘려보거나, 메모리 요구가 높은 프로그램을 교체하는 것이 좋을 수 있습니다.

  • profile

    스왑의 용도를 정확하게 이해하셔야 합니다.

     

    메모리와 비슷하거나 더 큰 용량으로 설정하는 관례는 데스크탑PC에 해당됩니다. 예를 들어 브라우저와 엑셀을 켜놓은 상태에서 게임을 한다면, 게임이 최대한 많은 메모리를 쓸 수 있도록 브라우저와 엑셀은 스왑으로 옮겨놓는 거죠. 나중에 엑셀을 쓰려고 하면 좀 버벅거리겠지만, 지금 사용할 거 아니니까 상관없다는 발상입니다.

     

    서버는 다릅니다. 서버에서는 모든 프로그램을 항상 사용합니다. 페이지 하나만 로딩하려고 해도 아파치, PHP, MySQL을 모두 거쳐야 하죠. 따라서 사용하지 않는 프로그램을 스왑으로 옮겨놓을 수가 없습니다. 옮기더라도 곧바로 다시 필요해서 메모리에 불러와야 하기 때문에 아무 소용이 없지요. 이런 상태에서 메모리가 부족해진다? 그냥 좀 느려지는 정도로 끝나지 않습니다. 스왑이 없는 것과 마찬가지로 서버 터집니다.

     

    서버에 스왑을 넣는 이유는 딱 한 가지입니다. 사용하는 프로그램 중에서 일부 불필요하게 할당된 데이터만 스왑으로 이동시켜서, 커널이 더 효율적으로 메모리를 관리할 수 있도록 하는 것입니다. 이러한 용도로는 램의 1/8~1/32 정도면 충분합니다. 제가 최근에 세팅한 서버 2대는 메모리 4GB에 스왑 256MB, 메모리 128GB에 스왑 4GB 넣었습니다.

     

    그런데 일반적인 APM 서버라면 튜닝만 잘 해도 메모리가 부족할 일은 없습니다. 아래 그래프는 제가 운영중인 메모리 8GB짜리 서버의 지난 1주일 + 1년간 모니터링 내역입니다. 접속자수는 수시로 변하지만, 메모리는 지난 1주일은 물론이고 1년 내내 변함없이 5GB를 사용하고 있어요. (노란색, 남색, 맨 위의 형광연두색 부분을 미사용으로 간주합니다.) 딱 그만큼만 사용하도록 튜닝했기 때문이지요.

     

    memory-week.png  memory-year.png

     

    메모리 사용량은 접속자에 비례하여 증감하지 않습니다. 잘 튜닝된 서버라면 갑자기 메모리가 초과될 걱정을 할 필요가 없지요. 매일 적당량을 먹고 적당히 운동하는 사람이라면 갑자기 몸무게가 늘어날 걱정을 할 필요가 없는 것과 마찬가지로요.

  • profile

    서버도 서버 나름인데, 멀티유저가 접속해서 다양한 작업을 하는 (시뮬레이션 돌리고...) 서버는 메모리를 한없이 잡아먹죠. 한명이 시뮬레이션 돌리다말고 다른일 하느라 놀리고 있으면, 그 프로그램이 잡아먹던 메모리를 스왑에 저장해놓고, 다른 유저에게 실제 메모리를 할당해줘야 하구요. 이런경우 스왑이 한없이 커야하죠. 그런데 이런 시스템은 기업 연구소나 대학 연구실에서나 쓰는 것이고,

    데스크탑에서는 포토샵 레이어 있는 것 출판용으로 올리면 수십기가 그냥 잡아먹다보니까 다른 프로그램들 띄워놓은 것은(백그라운드에서 쉬고 있는) 다 스왑으로 넘어가더군요.

    그런데 웹 서버 같은 경우는 매일 하는일이 고만고만하고, 실행후 바로 종료하는 구조다보니까, 사용량이 일정해서, 저는 스왑을 아예 0으로 해놔도 아무 문제가 생기지 않더라구요. 특히 SSD를 쓰는 경우에는 스왑이 SSD를 죽이는 원흉이라니까...

  • profile
    저도 스왑을 0으로 사용중입니다
    부팅을 하면 스왑파일을 생성하지 못하도록 아예 설정을 해놨어요