[서버환경] 

Dell Server PER640
Xeon(R) 6134 CPU 3.20GHZ
32기가 메모리

 

[운영체제]

윈도우 서버 2016 

 

IIS에 대한 지식이 없어서 윈도우 서버만 깔려있고 xampp로 APM 설치하여 운영 중 입니다.

동시 접속자 2300명 가량이고 이 사용자들이 쉬지 않고 지속적인 트래픽을 발생 시킵니다.

 

요즘 사이트가 매우 불안정 하고..  아파치 로그에는 php 관련 out of memory 관련 오류가 지속 발생합니다.

(메모리 리미트는 4기가 입니다만  메모리 문제가 아주 적은 kb 단위로 발생하는 것 보면 윈도우 환경에 문제 같습니다.)

 

라이믹스 관리자 화면에서 . .메뉴 추가할 때 마다 DB가 확 죽어버립니다.

db error 2006 mysql server has gone away << 화면을 띄우면서 .. DB 접속 불가.. ㅠㅠ

(max allow packet 은 점점 늘리다 보니 현재는 .. 6기가..까지.. )

 

애초에 윈도우 서버 환경으로 되어 있는 서버이고.. 운영체제를 마음대로 변경을 할 수가 없다보니

hyper-v 를 이용한 리눅스 서버 + apm 운영을 검색하고 있는데요 관련된 글이 없고..

마침 찾아낸 글이 서버에 직접 리눅스를 설치한게 아니라면 딜레이가 발생한다는 글도 있고 해서.. 여쭤봅니다..

 

어찌하는게 좋을지 .. ㅠㅠ

  • profile
    제가 볼땐 전혀 이득없고 오히려 손해볼것 같네요.
    저정도면 깔끔하게 리눅스로 가시는게 좋습니다.
    가능하면 디비 서버와 php 서버를 분리 하는것도 좋아 보이네요
  • profile profile
    감사합니다.
  • profile

    말씀하신 증상은 운영체제 문제라기보다는 사이트에서 사용하시는 특정한 기능이 메모리를 지나치게 많이 사용하는 것이 좀더 직접적인 원인으로 보입니다.

     

    memory_limit이 기가 단위로 되어 있더라도 실제로 뻗는 순간에는 마지막 몇kb를 할당하지 못해서 뻗는 것이 맞습니다. 3.99999기가를 이미 사용하고 있는 상태에서 0.00002기가를 더 할당하지 못하고 뻗는 거죠. 애당초 3.99999기가를 사용하는 기능이 있다는 것 자체가 문제입니다. 잘 만들어진 PHP 소스는 메모리를 아무리 많이 써봤자 100~200메가입니다. 수천 명이 접속해 있는 상태에서 특정 페이지가 몇기가의 램을 독식한다면 전체적으로 느려지는 것이 당연하지요.

     

    예를 들어 XE나 라이믹스에서 메뉴를 수백 개 이상 추가하면 (실제로 눈에 보이는 메뉴가 아니더라도) 메뉴 편집 화면에서 메모리를 어마어마하게 잡아먹는 구조적인 문제가 있습니다. 이건 메뉴 수를 줄여서 운영하는 방법밖에 없습니다. 그 밖에도 심하게 비효율적인 구현된 서드파티 자료가 종종 보입니다. 읽지 않은 알림이 몇 개 있는지 확인하기 위해 모든 알림을 다 불러온 후 PHP단에서 카운트하는 황당한 물건도 본 적이 있습니다.;;;

     

    max_allowed_packet은 현실적으로 100메가 이상 설정할 필요가 없습니다. 어떤 제한을 초과한다는 에러가 발생할 때는 해당 제한을 더 타이트하게 조여서 좀더 구체적인 에러메시지가 나오도록 하여 근본적인 원인을 찾는 것이 튜닝의 기본입니다. 계속 늘리는 식으로 운영해 오셨다면 서버의 튜닝 상태가 안드로메다에 가있을 가능성이 높습니다. ㅡ.ㅡ;;

     

    Hyper-V를 사용하든 WSL을 사용하든 VirtualBox를 사용하든 VMWare를 사용하든 일단 리눅스 안에 들어가면 다 똑같습니다. 해당 리눅스 배포판을 사용하는 법만 익히면 됩니다. 원하시는 방법으로 리눅스를 설치하는 법, 그리고 그 리눅스를 사용해서 웹서버를 운영하는 법을 따로 검색하셔도 무방하다는 뜻입니다.

     

    서버 성능 튜닝과 관련된 자료는 대부분 리눅스 기반이니 윈도우보다 검색하기가 더 쉬울 수는 있겠지만, 윈도우에서 메모리 다 잡아먹고 뻗는 소스라면 리눅스에서도 마찬가지일 것입니다.

  • profile profile
    소스쪽에 문제를 찾아보는 방향으로 해보겠습니다. ^^