PHPで動作させたスクリプトが徐々に重くなっていった

PHPで動作させたスクリプトが徐々に重くなっていった。

本番環境から切り出した5000件あまりのデータを処理してたら途中からどんどん重くなっていってた。コレはまずいなーとか思ってメモリ使用量を調べてみると増えていってる。

8GBを積んだFreeBSDなマシンだったんだけど、memory_get_usage()で調べたところ300MBを超えるあたりから急激に重くなっていった。

8GBのメモリに対しての300MBであればまだまだ高速に動きそうなもんなんだけど、その辺の追求はPHP&OSに起因する問題っぽいのであきらめる。

ちなみにテストコードを書いてみてもやっぱり300MBあたりで遅くなった。

以下テストコード

<?php

main();

function main(){
$test = new test();
for($i=0; $i<1000000; $i++){
$hoge = array('test'=>'tete', 'hoge'=>$i);
$test->test($hoge);
var_dump($i.':'.(memory_get_usage()/1024/1024));
}
}

class test{
private $hoge = array();
public function test($str){
$this->hoge[] = $str;
}
}


そのときのtopの様子。気づいたらutimeが19になっとるじゃん。いつ再起動したんだっけ。

last pid: 62467;  load averages:  0.45,  0.38,  0.47   up 19+03:19:24  11:35:32
123 processes: 2 running, 119 sleeping, 1 stopped, 1 zombie
CPU: 23.7% user,  0.0% nice,  6.3% system,  0.0% interrupt, 70.0% idle
Mem: 1292M Active, 1310M Inact, 869M Wired, 806M Buf, 4322M Free
Swap: 4096M Total, 4096M Free

PID USERNAME       THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
62447 yousan           1 113    0   664M   514M CPU3    3   0:16 76.95% php

コメントを残す