カテゴリ | |
---|---|
サマリ | Fatal Error: Maximum execution time (スケーラビリティ問題) |
バージョン | 1.4.2 |
投稿者 | khirano |
状態 | 完了 |
投稿日 | 2004-07-25 (SUN) 08:35:13 |
PHP4.1.2
以下のエラーについて教えてください。
書き込みをしようとすると、次のエラーがでます。 しかし、後で再ブラウズすると書き込んだものが表示されます。つまり、書き込まれています。
*Fatal error*: Maximum execution time of 30 seconds exceeded in */var/www/html-transwift.net/pukiwiki/func.php* on line *48
こんにちは、r1_4_2 の func.php の annotate の 48行目 (上記)を見る限り、これは is_page 関数の $is_page という配列をサーチしているうちに時間制限が来たというエラーみたいですね。この関数は、表示するページやMenuBarなどに含まれているページの数だけ呼ばれ、この配列はその度に項目を増やす可能性があるため、参照しているページが多ければ多いほどサーチの負担が大きくなります。そのような負担を減らすのが一つの手です。もう一つは、関数 is_page を書き換えることです。まだリリースされていませんが、実はis_page配列自体が不要であることがわかったため、CVS版では関数自体がシンプルな形に修正されています。以下を参考にして下さい。
r1_4_2 の func.php を手で 1.62 から 1.63 のように書きかえ、こうして作った新しい func.php と現在使用している func.php を置き換えても大丈夫でしょうか。
func.php の書きかえ、置き換え、やってみました。大成功。ありがとうございました。
うまく行って良かった :) 他には、rerated_link などのオプションを残らずoffにして、全体の負担を極力減らすくらいかな、と思っていました。
もう1つ、ここに追加で質問させてください。
Wikiメニューの「一覧」をクリックすると、次のエラーがでます。Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html-transwift.net/pukiwiki/file.php on line 239
実は私のpukiwikiサイトにはページが5000以上あります。これが原因なのでしょうか。
恥ずかしいのですが、私のpukiwikiサイトにこんなページがあります。
そしてこのようなページを作るために、このようなプラグインを書いていただき、実行しました。
類似の問題ですね。ところで、今現在で5373ページもあるというのは、すごいですね :D
サラっとしか拝見していませんが、テキスト処理の道具としてWikiを使う、というのも意欲的ですね :)
基本的にはスケーラビリティの問題であると思います。ところで該当のエラーの箇所をご覧下さい(上記URL)。落ちている所はstaticな配列をサーチしている部分で、前回のものととても良く似ています。
PukiWiki側にも改良の余地がありそうではあるのですが、この関数については、$show_passage の設定をオフにすることで、そもそも回避できるはずです。この他にも、$list_index などの重たくなりそうな設定も一度オフにしてお試し下さい。
$show_passage, $list_index をオフにしました。[一覧]クリックで表示できました。ありがとうございました。
こちらの問題も、同様に $pg_passage 配列自体が不要(冗長なキャッシング)でした。(dev:開発日記/2004-08-01)