한줄요약: 라이믹스 내 폴더가 모종의 원인으로 인해 간혈적으로 랜덤하게 접근 권한이 변경되거나 lock?이 걸리거나 하여 파일 열람이 안되는 상황이 있을 수 있는지 궁금합니다. 

 

-----

지난 주말 그간 보지 못해본 오류로 문제가 생겼다가 자동복구(?) 되었는데

원인을 찾지 못해 Xetown분들의 도움을 받을 수 있을까 싶어 글을 올려봅니다.

 

rhymix 버젼은 : 1.9.8.1 이고 

서버는 카페24의 단독웹을 사용하고 있습니다.

 

오류는 갑자기 시작되어서 모든 방문자가 사이트 열람 시 페이지 상단에 오류가 나타났는데 약 7시간 후 저절로 문제가 해결되었더라고요.

- 오류 문구가 내내 표시되다가 어느 시점부터 오류가 갑자기 사라지고 정상 접근이 가능해짐.

- 마침 주말이라 서버 업체도 연락이 안 닿고 저도 자리에 없어 문제 상황 전후로 그 어떤 개발관리적 조작이 전혀 없었음.

- 관리자 화면 조작도 없었음.

Screen Shot 2021-08-21 at 10.27.12 AM.png

Fatal error: require(): Failed opening required 'www/사이트 라이믹스폴더 경로/vendor/composer/autoload_classmap.php (include_path='.:/usr/local/php/lib/php') in /사이트 라이믹스폴더 경로/vendor/composer/autoload_real.php on line 36

 

해당 시간대에 ftp를 접속하거나 관리자 화면을 조작한 관리자도 없어 서버측 문제가 아닐까 싶어

서버업체에 문의를 넣어보니 업체측에서는 별다른 특이점을 찾을 수 없다고 답변을 주시네요.

Screen Shot 2021-08-25 at 9.47.15 PM.png

 

이와 관련해 연관이 있는지 모르겠는데 

예전에도 갑자기 CSS파일을 불러오지 못해 사이트가 제대로 표시되지 않는 오류가 있었던 적이 있습니다.

상태가 딱 봐도 레이아웃의 css파일을 불러오지 못해 생기는 문제라 확인을 해보니 403 Forbidden, 접근 권한 오류가 뜨더라고요.

딱히 누가 작업을 하고 있던 상황도 아니었던 터라 뜬금 없이 폴더 권환이 왜 바뀌어 있나 생각만 하고 넘어갔는데

이번 오류도 보니 혹시 폴더 권한이 제멋대로? 변경되어? 해당 파일을 불러오지 못했던 것이 아닌가 싶은 생각이 들었습니다.

그러다가 7시간 후에 다시 정상으로? 복귀?하고요.

(제가 생각해도 너무 상상의 나래를 펼친 거 같은 가설인데 이 외에는 대체 왜 문제가 생겼다가 복구된건지 전혀 알수가 없네요 ㅠ)

 

정확한 원인을 모르니 다음에 또 발생할 수도 있는 문제이고 어떻게 대처해야 할지도 몰라

Xetown에 혹시 이에 관해 아시는 분이 계실까 싶어 글을 올려봅니다.

 

글 읽어주셔서 감사하며 아무쪼록 간단하게라도 어떤 식으로 접근해 확인하면 좋을지 도움을 받을 수 있으면 좋겠습니다.

좋은 하루 보내세요!

 

 

참고 /vendor/composer/autoload_real.php on line 36

Screen Shot 2021-08-25 at 9.44.11 PM.png

 

  • profile

    autoload_classmap.php 파일명 뒤에 붙어 있는 2개의 깨진 글자에 주목하셔야 할 것 같습니다. 에러가 났던 CSS 파일도 자세히 보시면 어딘가 한 글자 틀렸거나 깨진 글자가 붙어있었을 가능성이 높습니다.

     

    PHP 7.x에서 동시접속자가 많고 소스 파일 갯수가 많은 사이트를 운영할 떄, php.ini의 opcache 설정을 세심하게 튜닝하지 않으면 멀쩡한 소스가 잘못 캐싱되어서 파일명, 클래스명 등이 깨질 수 있습니다.

     

    PHP의 성능 향상에 필수적인 opcache라는 기능이 있는데, 여기서 내부적으로 사용하는 캐시가 리셋되는 순간 누군가가 접속하면 race condition이 발생하면서 memory corruption으로 이어지는 것으로 추정하고 있습니다. 원본 소스는 멀쩡한데 PHP 엔진에서만 깨진 값으로 잘못 인식합니다. 랜덤으로 깨지는 것이 아니라 상습적으로 깨지는 파일이 따로 있습니다. 어느 정도 시간이 지나면 정상적인 값이 다시 캐싱됩니다.

     

    관련 PHP 버그 (7.0뿐 아니라 7.0~7.3 대부분의 버전에서 발생합니다.)

    - https://bugs.php.net/bug.php?id=71135

    - https://bugs.php.net/bug.php?id=72112

    - https://bugs.php.net/bug.php?id=75579

     

    카페24에서 상당히 오래된 버전의 PHP를 사용하는 탓에, 일반 웹호스팅 상품에서도 간혹 발생하는 문제입니다. 일반 웹호스팅은 접속자가 많지 않기 때문에 자주 눈에 띄지는 않습니다. 확인하려고 해도 증상을 재현되기 쉽지 않아서 고객센터도 난감하고 고객도 짜증나게 되지요. 그러나 웹호스팅과 동일한 세팅으로 많은 접속자를 소화하는 단독서버라면 이 문제가 반복적으로 발생할 가능성이 훨씬 높습니다. XE나 라이믹스처럼 소스 파일 갯수가 많은 CMS 사용시 더욱 자주 눈에 띌 수 있습니다.

     

    라이믹스처럼 소스 파일 갯수가 많고 자주 변경될수록 가비지가 늘어나는데, PHP opcache는 가비지 컬렉션 로직이 매우 단순합니다. 일정량 이상의 가비지가 쌓이면 통째로 리셋을 해버립니다. 기본값은 128MB, 5%인데 이 설정으로는 가비지가 6MB만 쌓여도 리셋되기 때문에 리셋이 자주 발생하고, 리셋되는 순간 접속자가 들어와서 오류를 일으킬 기회도 그만큼 늘어납니다. 님 서버는 리셋 주기가 평균 7시간인 것 같습니다.

     

    이 문제를 해결하려면 아래와 같은 조치가 필요합니다.

     

    1. 만약 라이믹스 코어에서 캐시 방식을 file로 사용하고 있다면 다른 것으로 변경합니다. 필요시 apc나 memcached를 설치합니다. file은 가비지 제조공장이나 마찬가지여서 PHP 7.x에서는 사용해서는 안됩니다. (극단적인 경우 1분에도 몇 차례씩 리셋이 발생하기도 합니다. 리셋 주기가 7시간이라면 이 부분은 문제의 원인이 아닐 가능성이 높습니다.)

     

    2. php.ini에서 opcache.memory_consumption을 512MB 이상, opcache.max_wasted_percentage를 60% 이상으로 설정하여 불필요하게 자주 캐시가 리셋되지 않도록 합니다. 서버에 RAM이 충분하다면 1GB, 80%로 설정하셔도 됩니다.

     

    3. 코어 업데이트, 모듈 업데이트, 대규모의 스킨 수정 등의 작업 후에는 관리자 화면 하단에서 "서버 환경 표시"를 클릭하고, 맨 아래에 있는 opcache_reset()을 클릭하여 가비지를 미리 비워주는 것도 좋습니다.

     

    고객센터에 이 댓글 링크를 전달해 주세요.

  • profile ?
    기진곰 님, 빠르고 상세한 답변 정말 감사합니다.
    원인을 몰라 이리저리 헤매며 고통에 허덕이고 있었는데 진짜 속이 시원합니다 ㅠㅠㅠㅠㅠㅠ
    (왜 진작 xetown에 글을 올리지 않았던 건가, 반성도 합니다)

    말씀하신대로 예전 css파일 오류때도 접근 오류 문구에 더불어 깨진 문자가 있었던 거 같습니다. 이번에도 그랬지만 그때도 파일 뒤에 저 깨진 문자는 뭘까? 공백이 깨져 보이는 건가? 하고 생각했었거든요. 그게 가장 문제가 되는 부분인 줄은 생각도 못했네요!

    상세하게 알려주셔서 감사합니다. 답변주신 내용 잘 참고하여 해결해보도록 하겠습니다!

    기회를 빌려,
    라이믹스를 꾸려주시고 저와 같은 사용자가 계속해 라이믹스를 사용할 수 있도록 꾸준히 도움주셔서 정말 감사합니다. 모르시는 곳에서 정말 큰 도움을 받고 있고 늘 감사히 생각하고 있습니다.

    늘 건강하시고 하시는 일 모두 잘 진행되시길 기원합니다!
    감사합니다!!!
  • profile
    댓글보고 감동한건 나뿐인가?ㅋ
  • profile

    엄청난 노하우가 집약된 답변 글이네요~... 추천합니다.