PHP5.5부터는 여러분들이 아시다 시피 좋은 캐시가 들어가 있습니다.

opcache.

다만 아직 주요 호스팅에서는 opcache를 사용하는 곳이 없네요...

 

사실 opcache에 대한 정확한 정보나 서버에 대한 지식이 없습니다. 다만 설정하면 매우 빨라진다는 정도를 알고 있기만 했지요.

 

php5.6.9에 redis, memcached, xcache 정도 사용해보았고, 이번 서버세팅에서 php5.6.15으로 업데이트하면서 opcache를 사용해봤습니다. 이거에 대해서 여러분들에 작은 지식이나 한번 공유해볼까 합니다.

 

환경은 XE1, Cetos + apache + nginx 프록시 서버 세팅입니다.

 

우선 Redis캐시서버에 대해서 알려드리겠습니다. redis는 XpressEngine의 Ajaxboard 모듈에서 웹소켓 서버를 세팅할때 쓰입니다.

해당 redis를 설치하게 되면, 해당 서버내에서 당연히 redis캐시 설정을 사용할 수 있게 됩니다.

다만, 해당 캐시 서버는 XE의 기본값으로 저장되어있지 않기 때문에 아래 링크의 이슈를 확인하시고 코드를 추가 해야합니다.

https://github.com/xpressengine/xe-core/pull/1708/files

 

자 그럼 제가 기존 세팅에서 Redis, memcached, xcache 를 써본 체감속도로는

memcached>= redis > xcache

였던것 같습니다. 기본 비슷한 반응속도(클릭 이후 응답하여 브라우저의 로딩을 시작할때까지의 시간)은 10ms차이정도로 거의 비슷했으나, memcached가 redis보단 아주 살짝 빨랐던 것으로 보였죠.

 

Xcache는 정확한 정보는 없지만 아주 오래된 캐시 방식이라고 들었습니다. 그때문에 선입견이엿는지 진짜 체감이였는지 모르겠으나 전체적인 로딩시간까지 합쳐서 느렸던 기억이 얼핏 나네요. 그래서 Xcache는 그이후로 처다도 안봤습니다.(이는 php5.5세팅시절때부터 느꼈던..)

 

그럼 요즘 말많은 opcache에 대해서 포스팅 해볼까 합니다.

역시 이번에도 opcache에 대한 정보나 그런 것은 잘 모릅니다. 저도 아직 서버의 지식을 쌓아가는 정도만 알아주세요.

opcache가 빠르다고 하는데 이 것이 재대로 활성화 되었을때 엉청난 속도향상을 불러옵니다.

 

기존에 제 서버에서 memcache를 사용했을때 반응 속도가 300ms정도였습니다. opcache를 적용했더니 150ms정도로 줄어듭니다.

 

엉청난 차이가 느껴지는거죠.(정확히 2분의1은 아니에요. 서버 반응 속도 대비 비율은 달라질 수 있다는점 명심하시길..)

 

그래서 심심해서 조합을 해보기 시작합니다.

opcache + memcache = 260ms.... 

opcache + redis = 260ms....

 

오히려 느려지더군요.. 아무런 캐시 설정을 하지 않은 XE에서 속도는 기존 300대라고 가정했다면 memcache만 설정하게 되면 10ms정도 줄어든다는 가정에서 memcache는 어느정도 이득이였기 때문에 저번에는 사용했었는데, 이번 opcache를 설정하게 되면서 오히려 조합을 할때 더 느려지는 모습을 보였죠.

 

왜 이런 현상이 발생했을까요?

 

기본적으로 memcache나 redis를 XE에서 사용하겠다고 설정하게 되면

files/config/db.config.php 파일에 다음과 같은 내용을 추가 하게 됩니다.

'use_object_cache' => 'redis://127.0.0.1:6379/1',
'use_template_cache' => 'redis://127.0.0.1:6379/2',
'use_object_cache' => 'memcache://127.0.0.1:11211',
'use_template_cache' => 'memcache://127.0.0.1:11211',

redis와 memcache는 서버의 아이피가 들어가게 됩니다.

즉, memcache서버와 통신 redis서버와 통신을 해야하는 겁니다. (그래서 phpredis라는것이 존재하고, memcache도 비슷한 형태가 존재합니다. 서버 자체는 따로 서버단위에 설치 되는거죠..)

 

즉 제 추측으로는

opcache는 php내에서 모든 작업을 마무리하고 캐시를 설정한다면, memcache, redis는 서버 통신을 주고, 거기서버에 디비를 저장하고 그 디비정보를 거기서버에서 가져오는 방식을 택하고 있는 것 같습니다. 그래서 서버자체와 통신을 해야하는 부분에서 응답속도가 느려지는 것 같더군요.

 

opcache와 비슷한 방식으로 쓰이는것이 제가 알기론 APC캐시 인데, 이 캐시 역시 마찬가지로 opcache와 비슷한 속도를 보입니다..

 

여러분들의 서버에는 어떻게 세팅되어있나요? 서로서로 서버정보도 교환해보아요~

람보

profile
람보입니다.
  • profile

    무.....무슨... 어..어려워....

    결과적으로 opcache를 제대로 사용하려면 memcache를 꺼야한다는 이야기인가욥?

     

     

    저는 노멀하게.. 기본 값으로... memcache를 사용하고 있습니닷..!

     

    PHP는 5.6.12네요..

  • profile profile
    opcache를 이용하면, memcache를 사용시 더 느려지는 현상이 있으므로 memcache는 빼는게 좋습니다.
    opcache사용여부를 잘 봐야해요 ㅋ
  • profile profile
    만약 memcache를 빼게 된다면 xe 캐시 설정은 어떻게 해줘야 할까요? 그냥 공란이면 되는 건가욧..?!
  • profile
    PHP 5.6에 멤캐시만 적용되어있는데,
    opcahe로 변경하면 더 빨라진다 이거인가요?!
  • profile

    참고로 opcache는 그냥 서버단에 설치하는 것이지, XE에서 설정해야 할 것이 아무 것도 없습니다.

    XE의 기능에도 전혀 영향을 미치지 않고요. 득만 있고 실은 없으니, 안 쓰면 바보죠 ^^

    그러나 한가한 서버에서 opcache, apc 이외의 캐시를 사용하면 응답속도가 약간 느려지는 것이 정상입니다.
    현재 XE의 구조상, 캐시를 추가로 사용하면 더 느려지면 느려졌지, 빨라질 부분은 별로 없어요.
    그러나 방문자가 많은 경우에는 개별 페이지 로딩시간이 좀더 길어지더라도 서버의 전체적인 부하를 낮춰주어
    결과적으로는 성능 향상을 볼 수도 있습니다.

     

    그 밖에 xcache, wincache, eAccelerator 이런건 모두 구시대의 유물입니다. 안 쓰는 게 좋습니다.

  • profile profile

    XE 구조상 기본 캐시 말고, files/config/db.config.php 에서 캐시 설정을 하지 않으면 제대로 캐시가 생성되지 않는 문제가 있더라구요..(인기글 애드온이라든지..)

    그래서 오빠캐시 쓰면 file 캐시라도 설정해야 하는 건지 아니면 아예 비워둬도 문제가 없는 건지 궁금해서 여쭤봤습니다..ㅎ.ㅎ

  • profile profile
    use_object_cache, use_template_cache 설정을 하지 않으면 꼭 필요한 부분에만 file 캐시가 자동 적용되는 것으로 알고 있습니다. 사실 다른 캐시 방법을 설정하더라도 여전히 일부 데이터는 file 캐시를 사용하게 되는데, 이 때 opcache 덕을 볼 수 있죠...
  • profile profile
    캐시관련 글은 볼때 마다 보도 모르겠습니다. ㅋㅋ

    일방문자 1000~ 1500 정도인데요. 동접은 10명 정도 됩니다.
    opcache 사용한다면

    'use_template_cache' => 'apc',
    'use_object_cache' => 'apc',

    위 설정을 없애는게 좋다는 건가요?
  • profile profile
    APC는 구지 빼지 않아도 속도는 괜찮을것 입니다..
  • profile profile
    "opcache, apc 이외의 캐시를 사용하면 응답속도가 약간 느려지는 것이 정상"이라고 했잖아요 ㅎㅎ 람보님이 언급하신 memcached나 redis와 달리, apc는 다른 프로세스와 통신하지 않고 opcache처럼 내부에서 처리하기 때문에 성능에 큰 영향을 주지는 않을 거예요. 그러나 동접수가 얼마 안 된다면 있어도 그만, 없어도 그만일 듯...
  • profile profile
    네. 지워봤는데 속도차이를 모르겠더라구요. 근데 저희 사이트는 IO쪽이 취약한지.. HDD 라서.. TTFB 타임이 즉 응답시간이 500ms 나 나와요... ㅡㅡ;

    구글페이지스피드에서 테스트해보면 이거 개선하라고 항상 나온다는게......
  • profile profile
    추가적으로 알려드리자면..
    use_template_cache나 use_object_cache는 캐시를 사용할 수 있는 설정을 정하는 요소로 쓰입니다.
    그런데 APC캐시는 유독 APC를 지정해줘야 XE에서 동작하게 되어있고, opcache는 아에 5.5~5.6php에 박아놔서 php설치되어만 있으면 그 캐시가 잘 작동되도록 되어있어서 사용하는 방식이 틀릴 뿐 사용은 비슷합니다.
  • profile
    use_template_cache, use_object_cache를 설정한다고 해서 구지 느려지는 설정은 아니고..
    이것들을 언급드린 이유는 서버와의 통신을 한다는 증명을 해보이기 위해서 언급한 것이지 큰 신경은 안서두되요. APC캐시는요 ㅎ
  • profile
    저희서버에서 XE관련 페이지의 경우 500ms 대의 응답이 나오는데 XE 관련 페이지가 아닌 경우 예를 들면 phpinfo페이지 혹은 html 출력 페이지등은 50ms 정도로 나와요... 이게 XE가 잘못인건지... 뭐 코어동작 없이 바로 동작한다해도 너무 차이가 심하게 나서요.. 이게 항상 의문이에요.
  • profile profile
    언급 하신 부분의 속도는 솔찍히 말씀드리자면, pomelove를 그대로 복사하여 제 사이트에 설치했을대도 동일한 속도가 나올것 같습니다.
    워낙 설치하신 것들이 많아 그것들을 줄여나가야 하고.. 진짜 속도에 엉청난 영향을 미친다는 기능이나, 이미지 닉네임기능 등등이 속도 저하의 주요인이 되는경우가 크기 때문이지요.
  • profile profile
    아니요. 첫문자 응답하는 TTFB타임이요. XE 빈페이지로도 테스트해봤어요
  • profile profile
    XE빈페이지라도 모듈이나 애드온이 동작하게 된다면 속도는 느려질 수밖에 없어요.
    그건 기본 응답하기까지 속도를 측정하는것인데 php에서 처리하기 때문입니다.
  • profile
    혹시 모르지만 저처럼 php 기본 세션을 memcache로 할당하신 분은 files 캐시로 변경해주고... 세션 경로도 폴더로 변경해줘야 합니다.(php.ini)

    저는 이렇게 변경하고 적용하니 확실히 체감이 되네요..ㄷㄷㄷㄷ
  • profile profile
    Memcache 보다 Files캐시가 더 빠른가요?
  • ?
    무슨 내용인지 이번건 패스 ㅜㅜ
  • profile
    간단하게 php 컴파일 후 설정에서 아래 옵션들 주석제거만 해주시면 됩니다.
    zend_extension=/usr/local/php/lib/php/extensions/opcache.so
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    opcache.enable_cli=1

    그러면 하위 계정단에서 별도 설정없이 캐시를 사용하게됩니다.
  • profile profile

    opcache.revalidate_freq=60 는 개발자입장에서 php파일이나 html파일이 60초마다 갱신되어 읽히도록 하는 기능이기 때문에 코드 자주 바꿔서 테스트 해야하는 서버에는 비추 ㅎ

     

    해당 부분을 아래와 같이 설정하면 설정값이 없어지죠..

    opcache.revalidate_freq=0

     

     

  • profile profile
    저거 수치는 어서 퍼온거라 그런것이고 자기에 맞게 셋팅하면 됩니다.
  • ?
    opcache 만 사용해도 엄청나게 빨라지나보네요.. 하나 배워갑니다