질문/조언팁/리소스 공유

PHP의 역사에서 가장 큰 폭으로 성능이 향상된 두 사건을 꼽자면 아래와 같습니다.

    1. PHP 5.5에서 opcache가 도입된 것 (3~4배 향상)

    2. PHP 7.0에서 전체적으로 최적화된 것 (2배 향상)

결과적으로 PHP 7.0은 순정 상태의 PHP 5.4보다 6~7배 가량 빨라졌고,

이후에도 계속 성능 개선이 있어왔으므로 PHP 7.4와 8.0은 정말 어마어마하게 빠릅니다.

 

그런데 이 두 가지 개선점이 충돌을 일으켜서 캐시가 엉망으로 꼬이는 일이 가끔 있습니다.

PHP 7.0 이상 버전에서 opcache가 말썽을 일으키면 멀쩡한 클래스나 함수가 존재하지 않는다고 하거나,

캐시를 재생성해도 비워지지 않거나, RXE의 경우 메뉴 부분에서 문제가 일어나는 경우가 많습니다.

 

특히 일부 웹호스팅 업체들은 호랑이 담배피던 시절 PHP 5.2를 세팅하던 경험을 그대로 살려서

opcache 최적화에 대한 고려 없이 서버를 대충 세팅해놓는 일이 많으므로 이 문제가 더 심하게 일어납니다.

단독서버나 VPS에서도 동시접속자가 늘어나면 opcache 때문에 말도 안 되는 오류가 랜덤으로 일어나곤 합니다.

 

가끔 이와 관련된 질문글이 올라오면 opcache를 리셋(reset)해야 한다고 답변을 드리는데,

이걸 어떻게 하는 건지 직관적이지도 않고, 검색해도 잘 안 나옵니다.

그래서 검색에 잘 걸리라고 관련 키워드를 잔뜩 넣어서 글을 하나 남깁니다.

 

 

1) 수동으로 리셋하는 법 (XE, 라이믹스, 기타 모든 CMS 공통)

 

아래와 같은 내용으로 파일 하나를 만들고 opcache.php 등 적당한 이름을 붙입니다.

 

  <?php opcache_reset(); ?>

 

이 파일을 브라우저에서 한 번 호출해 주면 됩니다. 백지화면이 나오는 것이 정상입니다.

리셋 후에는 RXE 관리자 화면에 들어가서 캐시파일 재생성을 한 번 해주거나,

files 폴더 아래에 있는 cache 폴더를 FTP에서 지워주면 더욱 확실합니다.

 

 

2) 라이믹스 2.0.7 이상

 

관리자 화면 하단의 "서버 환경 표시" 링크를 클릭합니다.

맨 아래로 스크롤하면 opcache_reset() 이라는 파란색 링크가 있습니다.

이것을 한 번 클릭하면 됩니다.

 

리셋 후에는 RXE 관리자 화면에 들어가서 캐시파일 재생성을 한 번 해주거나,

files 폴더 아래에 있는 cache 폴더를 FTP에서 지워주면 더욱 확실합니다.

 

 

주의: 동시접속자가 많을 때 함부로 opcache를 리셋하면 더 큰 문제가 생길 수도 있습니다.

이런 경우에는 해결될 때까지 몇 차례 반복해서 리셋하시면 됩니다.

단독서버라면 PHP-FPM을 재시작하는 것이 더 빠를 가능성도 있습니다.

 

글쓴이 기진곰

profile
GitHub 아이디는 @kijin입니다. 사람을 위한 인터넷 생태계의 발전과 웹 보안에 많은 관심을 가지고 있습니다.
우리가 만들어 가는 XE의 새 이름, 라이믹스(Rhymix) 프로젝트에 참여하고 있습니다.
오픈소스 도로명주소 검색서버 및 API Postcodify를 개발, 운영하고 있습니다.
국내외 서버 및 클라우드서버 세팅, 이전, 튜닝해 드립니다.
  • profile
    오우!! 안그래도 opcache, redis ,memcache, jit , super cache 모듈 총동원해서 돌아가면서 성능최적화를 하고 테스트중인데요. 고민이 첫화면은 빨리 열리는데 메뉴간 이동이 수십초 캐시하다가 한꺼번에 렉이 걸린것처럼 멈췄다가 나옵니다. 자세한 설정값을 모르니 삽질하는데 따라서 시간이나 때우면서 사이트 학대하고 있는데 장님 코끼리 뒷다리 더덤듯이 하는중입니다!! 아주 삽질하는라 몸살까지나서 누울뻔했습니다. ㅎㅎ