PukiWiki/パフォーマンスのチューニング http://www.ark-web.jp/sandbox/wiki/117.html

会社のPukiWikiが遅いです。
wikiディレクトリにあるファイル数は2077あり、容量は全部で11Mです。
FrontPageを出すのにも、10秒近くかかったりするので、どうやったら早くなるか、調べたところを書き留めていきます。

[edit]

ベンチマーク

調べてみると、一番パフォーマンスに影響しそうなのは、lib/file.phpのget_source関数が何回呼ばれるか、です。
PEARのBenchmarkを使ってこんな感じで組み込んでみました。

in3cのWikiにもフッターの一番下のベンチマークを組み込んでありますので、よければ見てみてください。

*** index.php.orig	2006-03-12 11:45:14.000000000 +0900
--- index.php	2006-03-12 11:45:20.000000000 +0900
***************
*** 2,7 ****
--- 2,12 ----
  // PukiWiki - Yet another WikiWikiWeb clone.
  // $Id: index.php,v 1.4 2004/09/20 00:48:34 henoheno Exp $
  
+ require_once "./Benchmark/Timer.php";
+ global $a_timer;
+ $a_timer = new Benchmark_Timer();
+ $a_timer->start();
+ 
  /////////////////////////////////////////////////
  // Error reporting
  
*** pukiwiki.php.orig	2005-01-03 23:03:12.000000000 +0900
--- pukiwiki.php	2006-03-12 11:44:15.000000000 +0900
***************
*** 2,7 ****
--- 2,13 ----
  // PukiWiki - Yet another WikiWikiWeb clone.
  // $Id: pukiwiki.php,v 1.38 2004/08/01 01:58:09 henoheno Exp $
  
+ require_once "./Benchmark/Timer.php";
+ global $a_timer;
+ $a_timer = new Benchmark_Timer();
+ $a_timer->start();
+ 
+ 
  // Directory definition
  // (Ended with a slash like '../path/to/pkwk/', or '')
  define('DATA_HOME',	'');
*** lib/file.php.orig	2004-08-01 23:23:20.000000000 +0900
--- lib/file.php	2006-03-12 11:21:17.000000000 +0900
***************
*** 8,13 ****
--- 8,25 ----
  // ソースを取得
  function get_source($page = NULL)
  {
+ if (is_page($page) ) {
+   $work = str_replace("\r", '', file(get_filename($page)));
+ }
+ else {
+   $work = array();
+ }
+ global $a_timer;
+ $a_timer->setMarker("「" . $page . '」読了 <div style="display: none;">(' . microtime() . ')</div>');
+ 
+ return $work;
+ 
+ 
  	if (! is_page($page)) {
  		return array();
  	} else {
*** skin/pukiwiki.skin.ja.php~	2005-07-03 12:02:36.000000000 +0900
--- skin/pukiwiki.skin.ja.php	2006-03-12 11:48:34.000000000 +0900
***************
*** 174,186 ****
  <ul id="about">
  <li>Modified by <a href="<?php echo $modifierlink ?>"><?php echo $modifier ?></a></li>
  <li><?php echo S_COPYRIGHT ?></li>
! </ul>
  
  </div>
  <!-- footer END -->
  
  </div>
  <!-- wrap END -->
  
  </body>
  </html>
--- 174,207 ----
  <ul id="about">
  <li>Modified by <a href="<?php echo $modifierlink ?>"><?php echo $modifier ?></a></li>
  <li><?php echo S_COPYRIGHT ?></li>
! <li>
! 
! <!-- benchmark -->
! <div>
! <?php 
! global $a_timer;
! $a_timer->stop();
! ?>
! <br>
! <a href="#benchmark" onclick='document.getElementById("benchmark").style.display = "block";'>Show Benchmark</a> &nbsp; 
! <a href="#benchmark" onclick='document.getElementById("benchmark").style.display = "none";'>Hide Benchmark</a>
! <a name="benchmark"></a>
! </div>
! <!-- benchmark end -->
  
+ </li>
+ </ul>
  </div>
  <!-- footer END -->
  
  </div>
  <!-- wrap END -->
  
+ <div id="benchmark" style="display: none;">
+ <?php
+ $a_timer->display();
+ ?>
+ </div>
+ 
  </body>
  </html>
[edit]

ベンチマークの考察

こうやってベンチマークを組み込んで、ls2プラグインなどを使ってみると、ls2プラグインが、下階層のファイルの中も全部取得しているのがわかります。
他、todoプラグインのような全ページの中身を読み込むものなど、ページ数が増えてくると、パフォーマンスが落ちてしまうプラグインは注意が必要ですね。

[edit]

relatedは遅い

default.ini.phpの

/////////////////////////////////////////////////                                                             
// 関連するリンクを常に表示する(負担がかかります)                                                             
$related_link = 1;

は0にした方が早いです。

[edit]

eAcceleratorを入れる

cd /usr/local/src
wget http://nchc.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.4.tar.bz2
tar xjf eaccelerator-0.9.4.tar.bz2
cd eaccelerator-0.9.4
export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize
aclocal
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install
ln -s /usr/lib/php/20020429/eaccelerator.so /usr/lib/php4/eaccelerator.so
patch -p0  < ~/misc/eaccelerator-etc-php.ini.diff 
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
service httpd restart

eaccelerator-etc-php.ini.diff

*** /etc/php.ini.org-2006-03-03 2006-03-04 13:44:06.000000000 +0900
--- /etc/php.ini        2006-03-04 13:46:33.000000000 +0900
***************
*** 926,928 ****
--- 926,945 ----
 ; Local Variables:
 ; tab-width: 4
 ; End:
+ 
+ 
+ ; eaccelerator
+ zend_extension="/usr/lib/php4/eaccelerator.so"
+ eaccelerator.shm_size="16"
+ eaccelerator.cache_dir="/tmp/eaccelerator"
+ eaccelerator.enable="1"
+ eaccelerator.optimizer="1"
+ eaccelerator.check_mtime="1"
+ eaccelerator.debug="0"
+ eaccelerator.filter=""
+ eaccelerator.shm_max="0"
+ eaccelerator.shm_ttl="0"
+ eaccelerator.shm_prune_period="0"
+ eaccelerator.shm_only="0"
+ eaccelerator.compress="1"
+ eaccelerator.compress_level="9"
[edit]

AutoLinkをやめる

PukiWiki.ini.phpで

$autolink = 0;
[edit]

うーん

これで多少早くなりましたが、同じページを3回くらい読み込んでたりするので、これはなんでだろう、と思いますね。また、ヒマがある時にしらべてみようかと。

投稿者志田 | パーマリンク

| append.gif

tag: PukiWiki


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-10-22 (月) 16:42:01 (4375d)

アークウェブのサービスやソリューションはこちら