トップ(最新) | <前 | 次>

nDiki : SpeedyCGI

SpeedyCGI

root権限、Apache 管理者権限がなくてもインストールが可能な、Perl スクリプト常駐プログラム。 Perl CGI プログラムの高速化に利用できるが、CGI プログラムに限らず通常のスクリプトの高速化にも使うことができる。

nDiki (DiKicker) も SpeedyCGI を使用している。

WikiEngine での利用

WiKickerSpeedyCGIによる Perl スクリプト常駐が可能である。

スポンサード リンク

Related term

2003年10月19日 (日)

[ WiKicker ] SpeedyCGI 対応 このエントリーを含むはてなブックマーク

苦戦。 メモ。

  • use CGI::Carp qw(fatalsToBrowser) は エラーを捕捉しにくくする
  • __DATA__ 以下を *DATA で取得できるのは1回のみ

スポンサード リンク


[ 10月19日全て ]

2003年11月9日 (日)

[ WiKicker ] SpeedyCGI 対応するも…… このエントリーを含むはてなブックマーク

WiKicker の高速化のために SpeedyCGI 対応作業。

  • Singleton パターンの除去
  • リクエスト処理後にデータベースunlock処理を必ず実施するようにする
  • DATAハンドルの読み込みを最初にキャッシュ

等を行う。 手元では動くようになった。

で今度は www.naney.org 上でテストしてみたのだが、無念 SpeedyCGI 自体がうまく動かない (FreeBSD 4.4-RELEASE + perl 5.005_03)。 CGI で呼び出すと

 failed to open log file
 fopen: Permission denied

エラー。make test でもこけているテストがあったし(t/sh_bang、t/timeout)このサーバじゃ動かんのかな?

@ と思ったら動いた

CGI スクリプトの先頭に

 #!/home/.../bin/speedy -w -- -M30 -t300 -r30 -p/home/.../bin/speedy_backend

のように記述していたのだが path部分が長かったため sh-bang の限界を越えてしまっていたようだ。-p オプションで指定している speedy_backend のパスの方はデフォルトが Makefile.PL 実行時に適切に設定されているはずだから、実際には省略可。

ということで、

 #!/home/.../bin/speedy -w -- -M30 -t300 -r30

としてみたら動いた。 よっしゃ。 これでリクエスト毎のプログラムのローディングの必要がなくなるので、レスポンスの遅さが改善されるはず。 パラメータは

  • -M30 (MaxBackends: これ以上だとサーバによろしくない?)
  • -t300 (Timeout: デフォルトの 3600=1時間だと長いかな。不要なプロセスは早めに止めておきたい)
  • -r30 (MaxRuns: まだバグメモリリーク等があるかもしれないので30回呼ばれたらバックエンドを re-exec するように)

としておく。様子をみて微調整。 これからは、WiKicker を更新したら Wiki CGI スクリプトを touch する事を忘れないようにしなくては(SpeedyCGI にバックエンドを再起動させなおさせるため)。


[ 11月9日全て ]

2003年11月10日 (月)

[ WiKicker ] SpeedyCGI 化の様子 このエントリーを含むはてなブックマーク

今のところ問題なく動いている様子。 レスポンスも良くなった感じ。 通常時で4つ程度、繁忙時で25程度 CGI プログラムspeedy_backend で常駐しているようだ。


[ 11月10日全て ]

2003年11月27日 (木)

SpeedyCGI環境変数 このエントリーを含むはてなブックマーク

アクセスログSSI が使用しているモジュールで REQUEST_URIHTTP_REFERER、 HTTP_USER_AGENT 環境変数がうまく取れていなない事があるのを発見。

ログをみると取れている時と、取れていない時がある。 何だろう。 でよくよく調べてみたら、SSI では問題なくて同じモジュールを Wiki で使っている時に失敗している模様。

よくわからないが、SpeedyCGI 関連の問題かもと思い main スクリプト上での呼び出し位置を修正したら直った。 呼び出し順に依存するのかなぁ。

あっ、そういえばモジュールのバグ混入(同環境変数を取得後のエスケープ処理で誤って空にしてしまうバグ)とその修正を今し方したのだが、SpeedyCGI がそのバグのある時点のモジュールをロードして動き続けていただけかも。 で、main スクリプトを修正したら SpeedyCGI がそれを検知して Wiki を re-execute したため今度は修正後のモジュールがロードされたため正しい挙動になったと(main スクリプトの修正内容は関係なく、touch された事自体が問題を解決した)。

多分。


[ 11月27日全て ]

2003年12月16日 (火)

[ www.naney.org ] CGI プログラムによるサーバ過負荷 このエントリーを含むはてなブックマーク

ホスティングサービス会社からメール。 12月16日0:00-0:20にかけて、naney.org に設置しているCGI プログラムが原因でサーバが過負荷になり動作不安定な状態になったため、実行権限を落としたとのこと。

あちゃ。

メールでは naney.org に設定している hns のうち一方(この日記でない方)が原因との報告だったが、アクセスログをみるとそちへの最終アクセスは 12/15 18:25:19 でどうも違う感じ。 逆にこちらの hns の方に、61.116.156.147 から 23:42:32 - 00:17:37 の間に少なくとも523回のアクセスがあり、どうやらこちらが過負荷の原因になってしまったようだ。

ここ最近1日に1度から数度、普通のISP経由で連続アクセスがある。 UAはIEをなのっているが、ロボットのようでもある。 なかなか弾きにくい相手である。

できれば連続アクセスだけ拒否するようにしたいのだが、そう簡単でもない。

hnsSpeedyCGI では動くようなコードでもなさそうだし。

とりあえず index.cgi を書き換えて サーバの load average が高くなっている状態では 503 Unavailable を即座に返すように修正。

 BEGIN {
   my $average = `uptime`;
   $average =~ /(\d+(?:\.\d+)?),?\s+(\d+(?:\.\d+)?),?\s+(\d+(?:\.\d+)?)/;
   if ($1 > 50) {
     print "Status: 503 Unavailable\r\n\r\n";
     print "Server is busy, please retry later.";
     exit 0;
   }
 }

を追加。load average が 50 (値は調整)を越えたら 503 になるようにしておいた。

ということで、この日記が 503 だったらきっとサーバがイッパイイッパイということです。


[ 12月16日全て ]

2003年12月31日 (水)

私的10大ニュース2003 このエントリーを含むはてなブックマーク

今年の大事件、マイブームなど。

@ [web] WiKicker 公開

オリジナル WikiEngine 「WiKicker」を公開し、 www.naney.org での運用を開始。 機能追加、負荷軽減など定期的にメンテナンスを継続中。 今年も1年 Wiki の年だった。

12月からは WiKicker ベースの日記システムDiKicker」の開発も開始。

@ [comp] cool programs

@ [net] ADSLトラブル

モデム

春の数ヶ月間悩まされ続けた。 一度常時接続に慣れてしまうと、もう戻れない。 結局モデムの故障。 その間「@FreeD」も契約してみたが、ADSL復旧に合わせて解約。

P-in Free 1P

@ [comp] 適応型ソフトウェア開発

仕事でのソフトウェアプロジェクトでの適用を開始しはじめてみた。

@ [comp] ThinkPad X31 2672-PHJ

ThinkPad

3年ぶりのメインノート PC の買い換えPentium M 1.6GHz + 1GBメモリ。 また3年は頑張ってもらわないと。

@ [camera] TC-1GR1s修理

TC-1 GR1s

愛用のTC-1が故障したため修理修理費16,300円也

GR1s修理

新規に購入したのは、Ai Nikkor 45mm F2.8P(10月12日)、 F3接眼補助レンズドンケ F-2 ぐらい。 あまり散財しなかった。

接眼補助レンズ ドンケ F-2 Ai Nikkor 45mm F2.8P

今年は撮影枚数が伸びず。

近所のミニラボが閉店したのも痛い。

@ [misc] レザークラフト

昨年買ったままだったレザークラフトセットを使ってレザークラフトを始めた。 パスケース、LEDフラッシュライトケース x 2、ツールナイフケース x 2、露出計ケース などを製作。 最近は何も作ってないな。 また何か作りたい。

LEATHERMAN MICRA 革ケース ツインメイトカバー SureFire エクゼクティブ・エリート E1e + KL1 レザーケース マグライト ソリテールケース Leatherman juice S2 レザーケース Arc-LS 用レザーケース

@ [misc] LEDフラッシュライト

LEDフラッシュライトに興味を持つ。 SureFire E1e + KL1ARC-AAAArc LSL-P などを購入。

SureFire E1E-HA Arc-AAA Arc LSL-P


[ 12月31日全て ]

2004年1月3日 (土)

設定処理まわりの改良 このエントリーを含むはてなブックマーク

一度読み込んだ Properties ファイルを pool しておき、再読み込み時に変更されていなければ再利用するように修正。SpeedyCGI を使っている場合に有効...のはずだがあまり速度的には変わってないかも。


[ 1月3日全て ]

2004年1月19日 (月)

[ WiKicker ] ピーク時の様子 このエントリーを含むはてなブックマーク

先日実装したRecentLogページで、ピーク時*1のアクセスについてチェックしてみた。 特定のページだけに集中している訳ではなくて、その時間においても思ったより他のページにもアクセスがあるな。 1分あたりのリクエスト処理数は最大で約38(直前300リクエスト処理時間での平均)ぐらいだった。 同時アクセス数が増えると1リクエストにかかる処理時間も増えるし、これぐらいが今のサーバ/コードでは限界ということかな(SpeedyCGI で MaxBackends を 30 に設定しているため、これ以上は同時に処理しない)。

*1ドラマの終了時間


[ 1月19日全て ]

2004年1月20日 (火)

[ 日記 ] SpeedyCGI による、同時処理数制御 このエントリーを含むはてなブックマーク

SpeedyCGI はもともとPerlスクリプト起動時の遅さ(インタプリタ起動 + プログラムのコンパイル)を回避するために、一度起動させたPerlプログラムを使いまわすもの。 Apache管理権限のない一般ユーザでもインストールして利用できるしプログラムに問題があった時の対応も簡単なので、重宝している。

もちろん mod_perl でのコーディングと同様、グローバル変数の扱いなど気をつけなければならない点はある。 hns も残念ながらそれらを意識しては書かれていないのでSpeedyCGI下では、うまく動かない。

このSpeedyCGIだが同時に生成できるバックエンドプロセスの数(-M オプション)と、各バックエンドプロセス(使いまわされるPerlプログラム)の実行回数(-r オプション)を指定できる。 例えば -M15 ならバックエンドの数を最大15になる。 16個目のアクセスがあるとバックエンドのどれかが空くまで待たされる事になる。 また -r の方は実行しているうちにどんどんメモリ使用量が増えてしまうような行儀の悪いプログラムの時などに使用するもので、例えば -r30 としておくとそのバックエンドは30回呼び出されると終了させられる(そして新しいバックエンドがまた作られる)。

で話は長くなったが例えば '-M15 -r1 -t1' というオプションにすれば、何度も実行できないようなコードのCGI プログラムでも、同時処理数制御用として SpeedyCGI が使えるというわけ(-t はバックエンドのタイムアウト指定)。

この日記もロボットの絨毯爆撃などがあるとサーバに高負荷をかけてしまう事があるので、SpeedyCGI で同時処理数を抑えるようにしてみた。 さて効果はあるかな?


[ 1月20日全て ]

2004年1月21日 (水)

[ Perl ] Devel::Size このエントリーを含むはてなブックマーク

WiKickerメモリ使用量が多くなってきた(10MBを越えることも)。 高速化を第一にそこら中で計算結果をキープするようになっているのだが、その辺整理しる必要があるな。

SpeedyCGIを使って複数回のアクセスで使用され続けるため、メモリリークが起きていないかも要確認。


[ 1月21日全て ]

スポンサード リンク

Related web page

daily dayflower - speedycgi with Perl 5.8.6 のメモリリークをなおした
いや直して RT に投げたのはだいぶ昔なんですが,以前の日記で でも CGI::<strong>SpeedyCGI</strong> は Perl 5.8.6 以降ではメモリリークする(RT#13521)罠。がーん。 daily dayflower - mod_<strong>speedycgi</strong>2 on Apache 2.2 と書いてほおりっぱなしだったんでネガティブイメージが定着するとまずいかなと思い,一応アピール。上記のRT#13521にパッチを投げてあります。その他いろいろ RT に投げてるんで,手前みそながら CGI:
http://d.hatena.ne.jp/dayflower/20070216/1171620558
daily dayflower - SpeedyCGI のプロセスの癖
以前作ったモジュール(daily dayflower - <strong>SpeedyCGI</strong> と module reload)でたまにモジュールファイルの変更を検知できないことがあったんですが,理由がわかりました。 <strong>SpeedyCGI</strong> の挙動をおさらいすると, frontend が backend を探す。いればよし backend がいない場合 backend(0) を生成 backend(0) がスクリプトをコンパイル backend(0) が fork して backend(1) を生成 frontend が backend(1) と通信 backend(1) が実行フ
http://d.hatena.ne.jp/dayflower/20061227/1167212645
daily dayflower - mod_speedycgi2 on Apache 2.2
<strong>SpeedyCGI</strong> を使ってみようと思って cpan install CGI::<strong>SpeedyCGI</strong> したら,怒られました。のであれこれ調べてなんとか動くパッチを作ってみました。 原因は Apache 2.2 (APR-1.2) になって, APR_BRIGADE_FOREACH() というマクロが deprecated になった(参考) apr_filename_of_pathname という関数が apr_filepath_name_get になった(CHANGES-APR-1.2) という非互換性があるためでした。 でも CGI::<strong>SpeedyCGI</strong> は Perl 5.8.6 以降で
http://d.hatena.ne.jp/dayflower/20061205/1165309213

■よく検索されるキーワード

perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.254763s / load averages: 0.38, 0.24, 0.26
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)