«前の日記(2011-08-28) 最新 次の日記(2011-09-03)» 編集

ぱぱネット(仮)


2011-08-30 ワンセグ野郎Linuxその7 [長年日記]

_ [ワンセグ野郎][Linux] またバージョンアップ

Windows+ActivePerlで、CGIがタイムアウトになってしまう らしいので、少し原因を調査して直してみた。

ダウンロード:webapi2_20110830.tar.gz

ついでに改行コードもWindows(CR+LF)にして、 シェルヘッダもC:/Perl/bin/perlに変更しておいた。

_ [ワンセグ野郎][開発] WindowsのCGIが死ぬほど遅い

さすがに全く動かさないのもアレなので、 WindowsにApache2とActivePerlをインストールして、 sqlite0.plとsqlite2.plは検証してみた。 そしてWindowsのCGIが死ぬほど遅いことに気づいた。 sqlite0.plは、たった400件で30秒以上かかる。テストマシンはSempron1.6GHzだけど...遅すぎる。Linuxサーバだと0.9秒とかそんなもんなのに。

sqlite0.plのEPGデータをとってきて所定のハッシュに登録する ループがある。擬似コードで書くと、

while ($rcols = $sth->fetch()) {
(カラムをリストに取り出す)
(言語やタグの変換を行う)
(検索条件で間引きをする)
(ハッシュに入れる)
}

こんな感じだが、SQLite3からデータを取り出す部分のsth->fetch()は一瞬で終わってしまい、(言語やタグの変換を行う)の部分がめちゃくちゃ時間を消費している。つまり SQLite3は白だ。

_ [ワンセグ野郎][開発] さらに調べると....

SQLの時刻文字列をPerlのDateTimeオブジェクトにするメソッドで、軽く気軽にカジュアルに、こう書いていた。

sub searchutil::sqlite3rev {
    my ($str) = @_;
    my $dt = DateTime->now( time_zone=>'local' );
    if ($str =~ m!([\d]+)-([\d]+)-([\d]+)\s([\d]+):([\d]+):([\d]+)!) {
        $dt->set(year=>$1, month=>$2, day=>$3, hour=>$4, minute=>$5, second=>$6);
    }
    return $dt;
}

........別におかしくないよなあ?と思ったら

DateTime->nowで0.3秒くらいかかる!(T_T)

なんぞこれ。ActivePerlのバグじゃないのか。それともWindowsは現在時刻とってくるのにこんなウェイトが必要だというのか!!! 結局最初に1つだけ作成して、clone()で複製を作るようにしました。

人生という冒険は続く(劇違)


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2011年
8月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(+2560143)