검색결과 리스트
도쿠위키에 해당되는 글 1건
- 2013.11.08 mod_disk_cache로 도쿠위키 속도 향상시키기
하는김에 도쿠위키도 mod_disk_cache를 간단히 적용시켜 보았습니다.
이론대로라면 도쿠위키의 경우에도 mod_disk_cache를 적용시키면 static html를 서비스하는 것과 같은 효과를 보게 되므로, 제 테스트 서버에서 ~2000 RPS의 속도가 나와야 합니다.
우선 테스트 서버에서 도쿠위키 해더를 분석해보았습니다.
$ wget -S -nd http://localhost/doku/doku.php --2013-11-08 23:00:14-- http://localhost/doku/doku.php Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Fri, 08 Nov 2013 14:00:14 GMT Server: Apache/2.2.17 (Fedora) X-Powered-By: PHP/5.3.8 Set-Cookie: DokuWiki=thd20jrlllcl784amndh49mrs3; path=/doku/; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: DWcc0cd92de073dc44ef3a8f01d4702539=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/doku/; httponly Vary: Accept-Encoding Connection: close Content-Type: text/html; charset=utf-8 Length: unspecified [text/html]
위의 예에서 살펴보면 Expires: Cache-Control: 및 Pragma: no-cache가 붙는데, 이는 도쿠위키에서 session을 쓸 때에 자동으로 붙게되는 헤더입니다. 이를 일단 무시하도록 하기 위해서 session_start()를 찾아서 session_cache_limiter('');를 넣어주면 Expires: Cache-Control:과 Pragma: no-cache가 붙지 않게 되며, Cache-Control 헤더에는 s-maxage=3를 수동으로 붙여넣어 주어야 합니다.
도쿠위키를 간단히 고쳐주면 다음과 같습니다.
--- inc/init.php 2013-11-08 22:40:43.606000239 +0900 +++ inc/init.php 2013-11-08 22:43:10.418000603 +0900 @@ -141,6 +141,7 @@ // init session if (!headers_sent() && !defined('NOSESSION')){ + session_cache_limiter(''); session_name("DokuWiki"); $cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir']; if (version_compare(PHP_VERSION, '5.2.0', '>')) { @@ -148,6 +149,7 @@ }else{ session_set_cookie_params(0,$cookieDir,'',($conf['securecookie'] && is_ssl())); } + header('Cache-Control: public, s-maxage=3, max-age=0, post-check=0, pre-check=0'); session_start(); // load left over messages
이렇게 고쳐주고 헤더가 잘 변경되었는지 살펴보니
$ wget -S -nd http://localhost/doku/doku.php --2013-11-08 23:07:23-- http://localhost/doku/doku.php Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Fri, 08 Nov 2013 14:07:23 GMT Server: Apache/2.2.17 (Fedora) X-Powered-By: PHP/5.3.8 Cache-Control: public, s-maxage=3, max-age=0, post-check=0, pre-check=0 Set-Cookie: DokuWiki=u9upco5mfls4nv87uqel66l4r0; path=/doku/; HttpOnly Set-Cookie: DWcc0cd92de073dc44ef3a8f01d4702539=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/doku/; httponly Vary: Accept-Encoding Connection: close Content-Type: text/html; charset=utf-8 Length: unspecified [text/html ...
위와 같이 s-maxage가 잘 추가되어있음을 알 수 있습니다.
이렇게 고치고 난 후에 아파치벤치(ab -n 1000 -c 3)를 돌려보니, 패치 전에는 ~90 RPS가 나오던 도쿠위키가 패치 이후에는 ~1500~2000 RPS가 나오게 되었습니다.
$ ab -n 1000 -c 3 http://localhost/doku/doku.php This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache/2.2.17 Server Hostname: localhost Server Port: 80 Document Path: /doku/doku.php Document Length: 37282 bytes Concurrency Level: 3 Time taken for tests: 0.641 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 37846542 bytes HTML transferred: 37356564 bytes Requests per second: 1560.62 [#/sec] (mean) Time per request: 1.922 [ms] (mean) Time per request: 0.641 [ms] (mean, across all concurrent requests) Transfer rate: 57679.66 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.2 0 1 Processing: 1 1 0.4 1 3 Waiting: 0 1 0.4 1 2 Total: 1 2 0.4 2 3 Percentage of the requests served within a certain time (ms) 50% 2 66% 2 75% 2 80% 2 90% 2 95% 3 98% 3 99% 3 100% 3 (longest request)
mod_disk_cache 적용시 주의할 점
주의할 점은 이 패치는 단지 mod_disk_cache를 이런 식으로 붙일 수 있다는 것을 보여줄 뿐이지, 도쿠위키와 긴밀하게 작동하지는 않는다는 점입니다. (도쿠위키의 경우 세션을 사용하기때문에 세션 쿠키가 헤더에 붙게되는데, 이러한 쿠키는 mod_disk_cahe가 캐시를 효율적으로 하기 어렵게 합니다. 도쿠위키 및 모니위키 모두 mod_disk_cache를 십분 활용하기 위해서는 session 쿠키 등등을 최소화해서 static html로 서비스하도록 고쳐주어야 합니다.)
미디어위키 속도 향상을 위한 설정 #1 (2) | 2013.11.19 |
---|---|
mod_disk_cache를 사용하여 XpressEngine 속도 향상시키기 (1) | 2013.11.09 |
mod_disk_cache로 모니위키 속도 향상시키기 (0) | 2013.11.08 |
eAccelerator win32 버그 및 빌드 (0) | 2013.08.28 |
모니위키 속도 300RPS 벽을 깨다. (0) | 2013.05.21 |
RECENT COMMENT