Q&A

일부 환경에서 나타나는 메모리 부족 오류

2019.05.02 08:21
381
0
CMS/프레임워크 Rhymix 1.9
개발 언어 PHP 7.1

PHP Fatal Error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 16384 bytes) in classes/template/TemplateHandler.class.php on line 355

 

가끔은 로그인할 때, 가끔은 포인트 내역 보기를 시도할 때 등 전혀 관련이 없는 것 같은 환경에서 이러한 오류 메시지가 출력됩니다. XETOWN에서 찾아보면 php.ini에서 최대 RAM 사용량을 늘리라고 하는데, 현재 서버 RAM 용량이 8GB이고 PHP에서 최대로 사용할 수 있는 RAM을 이미 5GB까지 늘린 상태임에도 저 상태입니다.

 

그렇다고 사용 가능량을 -1로 설정해버리면 해당 작업 중에 점점 서버가 느려지더니 결국 멈추는 수준까지 갑니다. 뭐가 문젠지 도저히 모르겠는데 혹시 아시는 분 계신가요?

댓글 6

  • 2019.05.02 08:39 #1215430
    저희는 XE를 사용하고 있습니다. 해당 문제가 전혀 발생하지 않다가.. 라이믹스에서 이미 적용중인 패치를 적용하면 말씀 하신 문제로 사이트 접속을 못하게 되어 해당 패치를 선패치 해보려다가 롤백했습니다.
    https://github.com/xpressengine/xe-core/pull/2377

    위 패치 였습니다. 관련이 있는지는 모르겠습니다.
  • 2019.05.02 09:44 #1215465

    메모리 부족 오류는 디버깅하기가 무척 어렵습니다. 에러메시지에 나오는 소스 위치는 원인과 아무 관련이 없는 경우가 대부분이고, 게다가 메모리가 없으면 로그도 backtrace도 전혀 기록할 수가 없기 때문에...

     

    XE는 기본적으로 memory_limit을 128MB만 주어도 충분히 잘 돌아갑니다. 이미지 처리 이외의 목적으로 그것보다 더 많은 메모리를 필요로 한다면 어딘가 쓸데없이 많은 정보를 한꺼번에 집어삼키려고 하는 서드파티 자료가 있는 것입니다. 애드온을 하나씩 꺼 보거나, 에러가 나는 화면에 끼어들 만한 모듈들을 하나씩 지워보는 수밖에요.

  • 2019.05.02 10:14 #1215471
    조금더 검색을 해보니 라이믹스 파일이 누락이신분이 계셨고 또 특정모듈에서는 특정조건의 검색에서 오류가 있는 경우도 있었네요. 휴면계정정라모듈의 경우 어떤 검색결과에 0명인 조건에서 문제가 되는 것을 고친 사례가 있네요.

    특정하기 어려운 상황이라면 혹시 라이믹스 파일누락도 의심해 볼 필요도 있을 것 같구요.

    저는 패치적용할때 제가 제대로 못고친 부분이 있었길 바라고 있네요. 저 패치가 살제 코어에 반영이 되면 저는 어차피 다시 해봐야 할 것 같습니다.
  • 2019.05.02 12:23 #1215482

    xdebug의 profiler 기능으로 PHP 동작중의 메모리 사용량을 추적할 수 있습니다.
    일단 xdebug 모듈을 설치하신 다음에 xdebug.ini 에서 profiler 관련 옵션을 켜세요.
    그러면 정해진 파일명으로 프로파일 추적 내용이 저장됩니다.
    이때 무조건 저장하게 할 수도 있고 Trigger라고 해서 쿠키에 특정명령이 포함되어
    있어야만 저장하게 할 수 도 있습니다. 이미 돌아가는 사이트라면 Trigger 옵션을
    on으로 하시고 크롬 확장 프로그램중에서 XDebug helper라는 것을 쓰시면
    쉽게 on/off가 가능합니다.
    하여튼 그렇게 저장된 프로파일을 툴을 사용해서 열어보시면 아마 금방 원인파악이
    가능할겁니다.
    PHPStorm같은걸 쓰시면 툴안에 프로파일 분석기가 내장되어 있어서 굉장히
    쉬운데.. 그걸 안쓰시면..
    https://kcachegrind.github.io/html/Download.html
    https://xdebug.org/docs/profiler
    이 문서를 보고 따라해보세요. 근데 이건 리눅스용 프로그램이라서..
    윈도우에서 쓸 수 있는 뭔가 다른 프로파일 분석 프로그램이 있는지는 잘 모르겠습니다.

    그냥 phpstorm을 1달만 쓸 수 있는 evaluation 버젼으로 설치하시는게 더 쉬울 수도 있겠네요

  • 2019.05.02 22:00 #1215588
    자체 해결했습니다. 검색어 자동완성 애드온이 문제였었네요. 도움주신 분들 감사드립니다!
  • 2019.05.03 03:15 #1215621

    카운트가 설정된 값으로 안되고 무한대로 되어 메모리가 부족할 수 밖에 없는 상황이 나타나는게 지금 다양한 서드파티의 문제인지 아니면 코어에서 문제가 있는건지 확인이 필요해 보입니다. 코어에서 막아줄 수 있는 방법이 있다면 불특정한 서드파티 자료들에서 쿼리시 이런 무한 카운트 쿼리가 발생되지 않을 수 도 있지 않을까 하는 생각이 들었습니다. @기진곰 님 참조용으로 멘션 추가했습니다.