포럼

간혹 XE가 느리다는 글이 올라오면 PHP 업그레이드부터 하라는 댓글이 달리곤 하죠. 그런데 과연 PHP 버전과 XE의 성능에는 어떤 관계가 있을까요? 막연한 추측이나 체감속도가 아니라 객관적인 수치를 구해 보겠습니다.

 

 

테스트 환경

 

Digital Ocean 8GB짜리 클라우드 서버를 사용했습니다.

CPU 코어 4개, SSD, 64비트 환경입니다.

 

1-1. CentOS 5.10 + Apache 2.2.3 + PHP 5.2.17

1-2. 위와 같으나 APC 모듈 설치

 

2-1. Debian 6.0 + Apache 2.2.15 + PHP 5.3.3

2-2. 위와 같으나 APC 모듈 설치

 

3-1. Debian 7.0 + Apache 2.2.22 + PHP 5.4.39

3-2. 위와 같으나 APC 모듈 설치

 

4-1. Debian 7.0 + Apache 2.2.22 + PHP 5.5.25 (via dotdeb.org)

4-2. 위와 같으나 아파치 대신 nginx 1.8.0 + PHP-FPM 사용

 

5-1. Debian 7.0 + Apache 2.2.22 + PHP 5.6.9 (via dotdeb.org)

5-2. 위와 같으나 아파치 대신 nginx 1.8.0 + PHP-FPM 사용

 

6. Debian 7.0 + nginx 1.8.0 + HHVM 3.7.0

 

각각의 PHP 버전을 가장 쉽게 설치할 방법을 찾다 보니 O/S 종류와 버전, 아파치 버전에는 차이가 있음을 양해 바랍니다. 현재 Digital Ocean에서 지원하는 O/S 종류와 버전들 중 PHP 5.2 설치가 가능한 것은 CentOS 5.10밖에 없는 것 같네요. 나머지는 제가 가장 좋아하는 Debian을 사용했습니다.

 

DB는 모든 테스트에서 MariaDB 10.0를 사용했고, XE에서는 mysqli_innodb 방식을 선택했습니다. InnoDB 튜닝 설정은 모든 테스트에서 동일합니다.

 

테스트에 사용한 XE 버전은 1.8.2입니다. 단, PHP 5.2 테스트를 위해 소스를 일부 수정했습니다. PHP 5.2 테스트에 1.7.13을 사용하려고도 해 보았으나, 기본 레이아웃이 너무 달라서 비교가 무의미하더군요.

 

 

테스트 방법

 

각각의 환경에서 XE를 새로 설치한 후, 메인화면을 반복 요청합니다. 동접수 10으로 총 1천 번 요청한 후, 초당 요청수와 평균 페이지 로딩시간을 측정합니다.

 

ab -c 10 -n 1000 -k http://localhost/xe-core/

 

클라우드 서버이므로 성능이 일정하지 않을 수 있습니다. 그래서 시간차를 두고 여러 번 테스트한 후, 가장 빠른 결과를 사용했습니다.

 

 

테스트 결과

 

test setup          req/s    time(ms)
5.2.17              27.60      362.24
5.2.17 + APC       108.93       91.79
5.3.3               26.83      372.66
5.3.3 + APC         88.36      117.40
5.4.39              28.06      356.34
5.4.39 + APC       122.75       81.46
5.5.25             131.88       75.82
5.5.25 (nginx)     134.19       74.52
5.6.9              141.94       70.45
5.6.9 (nginx)      152.38       65.62
HHVM 3.7.0         108.59       92.08

 

benchmark.png

 

PHP 5.2~5.4는 APC 모듈을 설치하지 않을 경우 초당 30회의 요청도 소화하지 못하고, 각 페이지를 로딩하는 데도 0.3초 이상 걸립니다. 그야말로 안습입니다.

 

그러나 APC를 설치하면 3~4배의 성능 향상을 얻을 수 있습니다. XE는 기본적으로 인클루드되는 파일 수가 장난이 아니기 때문에, 인클루드할 파일들을 미리 캐싱해 두는 APC의 덕을 톡톡히 보는 것 같습니다. (APC가 아니라도 Zend Optimizer, eAccelerator 등을 사용하면 비슷한 효과를 얻을 수 있습니다.)

 

PHP 5.5~5.6은 APC와 같은 기능을 하는 opcache 모듈이 내장되어 있어서 안정적인 성능을 보여줍니다. 초당 130~150회의 요청을 소화할 수 있고, 각 페이지의 로딩 시간도 0.065~0.075초로 크게 줄어들었습니다. nginx를 사용할 경우 약간의 성능 향상이 있지만, 큰 차이는 아닙니다. (실제 nginx의 성능 향상은 CSS, JS, 이미지 파일 등을 불러올 때 느낄 수 있으므로, PHP단의 성능만 측정할 때는 큰 차이가 없습니다.)

 

HHVM은 의외로 기대에 못 미치는 성능을 보여줍니다. XE의 특성상 코드를 미리 컴파일해 두는 RepoAuthoritative 기능을 사용하지 못해서 HHVM이 제 성능을 발휘하지 못하는 것인지도 모릅니다.

 

 

결론

 

PHP 버전, APC와 같은 캐싱모듈 사용 여부, nginx 사용 여부 등에 따라 최대 5배 이상의 성능 차이가 날 수 있습니다. 캐싱모듈 사용시에도 버전에 따라 편차가 크고, PHP 5.5 이상에 내장된 opcache 모듈을 감히 따라가지 못합니다.

 

최고의 성능을 얻으려면 nginx + PHP 5.6 조합으로 사용하세요.

 

 

사족

 

동일한 환경에서 그누보드 5.0.34 메인화면을 띄워보니 초당 204회에서 최대 813번까지 무지막지한 로딩속도를 보여주었습니다 ㅡ.ㅡ;; 그러나 설치 직후 그누보드 메인화면에는 그다지 뜨는 게 없다는 것이 함정 ㅋㅋ

PHP 7.0은 다음 글에서 테스트합니다.

https://www.xpressengine.com/forum/23018301

 

글쓴이 제목 최종 글
XE 공지 정치와 관련 되거나 욕설 포함된 컨텐츠 작성에 주의 부탁드립니다.  
BNU 공지 XE 이슈 등록은 Github 프로젝트를 이용해주세요. [13] 2016.07.15 by ZerglingGo
Devkang 그누보드5-> xe 데이터 이전 툴 좀 만들어주세요 [1] 2016.05.16 by pentopen
고나리자 가입형 XE 어떻게 생각하세요? [7] 2016.05.14 by Xiso
銀童 DaumEditor For XE 베타 0.1.0 배포합니다. [122] file 2016.05.10 by pentopen
해피지영 XE3 설치같이 해보고 서로 도와가며 해보아요~! 강남 코워킹 스페이스 제안 (지방분 1박도...) [17] 2016.05.07 by 해피지영
늅늅이 기존 AJAXBOARD 애드온은 못 구하는건가요? [1] 2016.04.25 by HowtoXE
마이웹 음... 개발자포럼을 이슈톡톡이란 이름의 포럼으로 변경하는건 어떨까~요? [43] file 2016.04.25 by 알짜포크
xidr98 XE3.0 사이트 관리가... [4] 2016.04.23 by xidr98
BJ람보 누리고 모듈 1.0.3 정식버전을 배포합니다. [1] 2016.04.22 by 카르마
모노소프트 댓글달면서 평점 남길 수 있는 걸 만들어봤는데요... [26] file 2016.04.18 by Xiso
BJ람보 오랜만에 출석부를 뜯어고치고 있습니다.. [6] file 2016.04.17 by Senahri
BJ람보 오늘 저녁 8시 생방송 링크~  
BJ람보 누리고 모듈 1.0.2 정식버전을 배포합니다. (수정 1.0.2버전입니다.) [8] 2016.04.12 by BJ람보
Chosun.us 스마트레이아웃을 쓰는데 레이아웃 좌측과 우측의 게시판의 간격을 띄우는 법  
BJ람보 4월 12일 방송 예고~아프리카 XE관련, 누리고관련 개발이야기, 초급이야기.  
라쳇YT PHP7 with XE3.0 [5] 2016.04.09 by KimTAJO
본능 XE 초짜인데 메뉴바랑 타이틀바 수정 방법좀 알려주세요 [1] file 2016.04.02 by 기진곰
Flolida Node.js 로 간단한 CMS 를 만들어 보았습니다. [3] 2016.04.01 by 이온디
jake 레이아웃 설정값의 import , export [1] 2016.03.27 by Novelic
XEPublic 로그인 기록 모듈을 XE Public으로 전환하였습니다.  
고나리자 XE의 마켓 활성화 실패에 대해선 어떻게 생각하시나요? [53] 2016.05.03 by 마이웹