타 CMS 기반으로 사이트를 개인적으로 돌리고 있는게 있습니다. 우선 쓰고 있는 타 CMS는 무거운 물건입니다. 일단 동접자 한두명 정도의 한가한 곳이라 2기라 램으로 돌리고 있는데 apcu도 키고 varnish도 돌리니 램 사용량 60퍼센트를 초과하더라고요.

 

혹시 2기가 램에서 varnish 같은 메모리 기반 프록싱 캐시를 쓰면 오히려 역효과로 서버가 뻗을 가능성이 더 높아질까요? 2기가 램 환경에서는 varnish를 끄는게 오히려 좋을까요? CPU 점유율은 낮은데 램 점유율이 높은데 고민이네요.

  • profile

    느려터진 보급형 스마트폰도 램 2기가 이상은 달려서 나옵니다.

    PHP, MySQL 등 여러 프로그램을 동시에 돌리기에 넉넉한 램은 아니지요.

    동접수가 0이라고 해서 램을 안 쓰는 것도 아니고, 동접수에 비례해서 늘어나는 것도 아닙니다.

    모든 프로그램은 기본적으로 필요한 최소한의 램이 있고, 그 이상은 설정하기 나름입니다.

     

    현실적인 답변을 받고 싶으시다면 현재 램 60%를 어떻게 나눠쓰고 있는지부터 보여주세요.

    free 명령이라든지, top 스샷이라든지...

    자세히 질문하시는 만큼 자세한 답변이 돌아옵니다.

  • profile profile

    top 명령어를 봤는데 varnish cache로 추정되는 프로세스가 21퍼센트나 먹고 있네요. 그다음이 PHP와 mysql 프로세스고요. free와 top 명령어를 처음 알았는데 top은 그냥 작업 관리자식으로 보여주는군요.

  • profile profile

    Varnish의 -s (스토리지) 옵션은 어떻게 되어 있나요? 위에서 말씀드렸듯이 서버 프로그램들은 각각 설정한 만큼의 램을 사용합니다. 설정하지 않았더라도 기본값이 있습니다. 어떻게 설정하는지에 따라 혼자서 램을 다 먹고 뻗어버릴 수도 있고, 아무 문제가 없을 수도 있습니다. 어느 정도의 램은 무조건 사용합니다. 얼마나 사용하는지가 문제지요. 물론 다른 프로그램들이 램을 얼마나 사용하고 있는지에도 영향을 받습니다.

     

    그래서 여러 프로그램들이 램을 어떻게 나눠쓰고 있는 상황인지 여쭤본 것인데, 스샷도 없고 임의로 해석/요약해서 두리뭉실하게만 말씀하시니 그다지 도움이 되지 않네요. 예를 들어 모닝에 일곱 명이 탈 수 있는지 묻고 싶으시면 각 사람의 키와 몸무게 정도는 정확하게 측정해 주셔야 하지 않겠어요?

  • profile profile

    server top.png.jpgtop에서 메모리 순으로 정렬한 순서입니다. 보시다시피 캐시 메인 프로세스가 메모리를 많이 먹고 있는데 vcache가 발생하는 프로세스가 varnishd랑 이것밖에 없으니 아무래도 varnish쪽 프로세스가 유력합니다. 나머지는 php나 mysql 등의 프로세스인데 사이트를 돌리는데는 꼭 필요하죠. 참고로 바니쉬의  -s 설정은 malloc,256m로 기본값입니다. 참고로 가린건 제가 서버에 로그인할때 사용하는 사용자명입니다.

  • profile profile

    네, vcache는 varnish가 맞고 -s malloc,256m라면 RES 400메가 조금 넘게 사용하는 것이 지극히 정상입니다. 서버 사양을 고려할 때 malloc 할당량을 50~100메가 수준으로 줄이거나, 램 대신 디스크(file)를 사용하도록 하는 것이 좋겠습니다. 디스크를 쓰더라도 현실적으로 성능에 큰 차이는 없습니다. 최소 256메가의 램을 추가로 확보할 수 있을 테니, 거기서 얻는 이득이 더 클 수도 있고요.

    문제는 PHP입니다. varnish보다 PHP가 램을 더 많이 먹고 있습니다. 저 정도 서버 사양에 PHP가 저렇게 램을 많이 잡아먹고 있으면 안됩니다. 지금은 동접수가 낮으니까 괜찮지만, 몇 명이라도 더 들어오면 서버 터지는 수가 있어요. apc는 64메가, opcache는 128메가 이하로 조정해 보세요.

    또한 약간이라도(256메가 이하) 스왑파일을 추가하면 꼭 램에 올려두지 않아도 되는 데이터를 커널이 자동으로 정리할 수 있으므로 램 관리에 도움이 됩니다. 스왑은 램이 부족해서 쓰는 것이 아니라, 램을 더 효율적으로 쓸 수 있도록 돕기 위한 장치입니다.

  • profile profile

    네 감사합니다. 사이트가 느려지는 부분이 있어서 apc를 늘렸는데 이걸 줄여야겠네요. 알고 보니 원인은 다른 곳에 있었기도 했고요. 근데 혹시 이런 저용량 메모리 환경에서는 APC만 쓰는게 이득이나요? 아니면 그래도 varnish와 APC를 함께 쓰는게 이득인가요? 참고로 저는 클라우드플레어 CDN을 쓰고 있습니다. 물론 본 서버는 미국에 있습니다.

  • profile profile

    APC는 DB에서 불러와서 처리해야 하는 각각의 데이터 조각을 캐싱해두는 것이고, Varnish는 그런 조각들을 모아서 만든 HTML 페이지 전체를 캐싱하는 것입니다. 둘 중 하나를 선택하는 것이 아니라 역할이 전혀 다릅니다. 물론 중복으로 캐싱해서 램이 낭비되는 부분도 분명 있을 테고요.

    그러나 서버 자원이 부족하다면 어느 쪽에 램을 몰아줄 것인지 선택해야 할 수도 있겠지요. 이 경우에는 정답이 있는 것이 아니라 실제로 번갈아 써보시면서 로딩속도를 측정해 보고 그나마 덜 느린 조합을 찾는 수밖에요.

     

    참고로 XE나 라이믹스처럼 국내 커뮤니티 사이트에 많이 쓰는 CMS는 회원마다 다르게 보여주어야 하는 부분이 여기저기 자잘하게 많기 때문에, 화면 전체를 캐싱하는 것은 의미가 없다고 판단하여 APC 활용률이 높은 편입니다. 반면, 블로그나 위키에 많이 쓰는 해외 CMS는 비로그인 사용자를 대상으로 화면 전체를 캐싱하는 데 초점을 맞추고, 자잘한 조각들을 효율적으로 캐싱하는 데는 그다지 관심을 기울이지 않는 경우가 많습니다.

  • profile profile
    네 사실 저도 이부분은 알고 있습니다. 근데 varnish가 하는 일이 CDN이 하는 일이랑 어느정도는 중복되다 보니(아예 패스틀리라고 varnish 기반으로 CDN을 만든 데도 있고요) 솔직히 어차피 CDN 쓰는데 이걸 없앨까 라는 고민이 자꾸 듭니다. 저는 국내 CMS 기반이 아닌 후자의 유형인 CMS를 쓰는 사이트를 운영하고 있는데, 솔직히 이렇다 해도 어차피 CDN 쓰는데 서버 자원도 부족하고 그렇다고 서버 자원을 늘리기에는 돈이 없는데다 당장의 접속자도 적고(접속자가 늘어나면 광고로 벌충할 수야 있겠지만 지금 사이트 수준으로는 애드센스 100달러는 언제 채울 수 있을지 모르겠습니다.), 일정부분 CDN이 해주는걸 서버에서 또 해서 자원을 낭비한다고 생각해서 varnish를 없앨까 라는 고민이 들었어요.
  • profile profile

    Varnish를 원활하게 구동할 수 있도록 서버를 업그레이드하는 비용보다 CDN 쓰는 편이 더 경제적이라면 굳이 Varnish를 쓸 필요는 없겠지요. 이중 삼중 캐싱은 솔직히 낭비잖아요.

     

    클플이라면 해외망으로 연결되어서 오히려 더 느려지겠지만, 다른 글에서 소개해 주신 AWS 클라우드프론트라면 서울지점도 있는데다 소규모 사이트 정도는 거의 무료일 테고요.

  • profile profile
    네 지금 사이트의 서버가 해외에 있어서 적어도 non-CDN 대비 속도 저하는 없는데, 사이트 갈아엎을 겸 CDN 업체도 옮길까 고민 중입니다.