大きな配列の変換処理にunsetが無い

関連

修正

メッセージ

BugTrack/732メモリ制限周りの問題を見たのですが、データの配列を全コピーしている所で逐一unsetが必要かと思われます。

簡単なメモリ測定関数を作って遊んでいたところ、(解凍後の)実データの5倍近くメモリ喰ってたもので作成。パッチでメモリ使用量ピークは半減、負荷が微増…

数kBくらいのページでも頻繁に更新すればバックアップは1メガいきますし、 大容量投稿で案外簡単に攻撃できそう、と思ったら実は難しい?

投稿時やバックアップ書込時の記事サイズ判定を導入した方が良いかもしれません。 *1

検証…3.4MBのソース(1MB*2の投稿三回分として)をgz圧縮してget_backupに読ませてみました。 メモリ測定はforeachループ脱出直後に設置、スキン中で出力。

Memory Usage 22114 kbytes, in get_backup. // パッチ前
Memory Usage 12124 kbytes, in get_backup_unset. // 測定直前にunset
Memory Usage 12528 kbytes, in get_backup_patch. // あててみる

配列が10Mのメモリを占有…恐怖。



余談: get_backupの最適化に挑戦



*1 あとPukiWiki2ではバックアップは結合無しかサイズで小分けに1票。それだけでだいぶ違うのでは
*2 だいたいこれぐらいが投稿の限界かと思われます
*3 PHP初級者なんで叩いたってくださいな。
*4 「ハードウェア換えろ」という意見も目立ちましたが・・(^^;
*5 文字列処理にして、無駄なメモリを喰うpreg_matchをpreg_splitに置き換える

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-03-08 (月) 12:14:38
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u10. HTML convert time: 0.250 sec.

OSDN