「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
インストール $ sudo apt-get install libapache2-mod-perl2 で、mod_perl2はインストール完了。 設定 apache2.confとかがincludeしてくれる位置に、適当な設定ファイルを作っておくといい。 mods-enabledの中にperl.confとして作っておくと他のmodと似たような配置になって分かりやすい・・・かも。 その他配置場所の候補としてはconf.dやバーチャルホストの設定ファイルの中など。 今回はmods-enabledの中にperl.confとして作成してみました。 # プリロードモジュールの設定 PerlModule Apache::DBI CGI DBD::mysql # Registryモードでmod_perl2を動かす設定 SetHandler perl-script PerlHandler ModPerl::
http://memo.hirosiki.jp/article/33577109.html 「mod_perlで動いてる」なんて書いてたが、まっとうに動いてなかったよ岬くん。 if ( ( -r $rdffile ) && ( ( ( -M $rdffile ) * 24 * 60 ) < 15 ) ) { RedirectTo( $rdffile ); } -M演算子は、指定したファイルがperlプロセスが起動した時点から見てどのくらい前に修正されたかを返すので、mod_perlで使うとほぼ無意味な動作をする。 したがって、ここは(スクリプトがキレイでスマートかどうかはぼくが書くものなのでともかくとして) my( $m ) = ( stat( $rdffile ) )[9]; $m = time() - $m; if ( ( -r $rdffile ) && ( ( $m / 60 )
mod_perlでどのくらいメモリー使われてるかとか調べたかったのでApache2::Statusを使ってみた。 Shibuya.pmのLTにも含めようと思ったけど5分に押し込めるのは無理なのでここで公開。 テスト対象としてCGI::Applicationで package HelloWorld; use strict; use warnings; use base 'CGI::Application'; sub setup { my $self = shift; $self->start_mode('index'); $self->run_modes( ['index']); } sub index { "HelloWorld"; } 1; runスクリプトとして #!/usr/bin/perl use strict; use warnings; use lib './lib'; use
mod_perlを5年以上触ってて初めてこんな現象に出会いました。ほんとひどい罠です。 現象 妙なタイミングで500エラーとなる Apacheを再起動すると直る index.plをtouchすると500エラーとなる perl -cw でチェックしても、warningも何も出ない コード 今回問題となったindex.plはこんな感じです。どこがまずいかわかりますか? use strict; use warnings; use Apache2::RequestUtil (); use ModPerl::Util; sub main(){ my $r = Apache2::RequestUtil->request(); $r->content_type('text/plain'); print_hello($r); ModPerl::Util::exit(); } sub print_hello
mod_perl は Perl CGI の実行速度を向上させるためのモジュールです。 通常 Perl CGI は、クライアントから CGI が要求される度に Apache から読み込まれてコンパイル・実行されますが、mod_perl を使用すると一度読み込まれるとその内容をメモリ上に保持しておきます。 従って、次に同じ CGI が呼び出された際には再読み込みすることなく実行されることになり、非常に高速になります。 インストール mod_perl-1.29, Apache-1.3.37 の例です。 まず、The Apache/Perl Integration Projectからアーカイブを入手し、展開します。 mod_perl は DSO 対応は EXPERIMENTAL な状態なので static に組み込む必要があります。 従って、Apache も最初からビルドし直す必要があ
大量にアクセスがあってMaxClientを大きく設定したい場合、Apacheの1プロセスあたりのメモリを少なくするのが重要。当然アプリ側で大きなライブラリを読み込まずに画像の変換はGearmandにタスクとして投げたりとかの工夫するのも有効だが、fork元になるApacheの親プロセスと子プロセス間でできる限りCopy on Writeな共有メモリを増やすのも有効。 その辺の詳しい仕組み等の話はnaoyaさんがd:id:naoya:20080212:1202830671でしてるのでそこを参考に。linuxカーネルまわりの仕組みって楽しいよね。会社の案件ではFreeBSDサーバーも結構あるんだけどFreeBSDではどうなるのかは知らない。 で、社内にXenなテストサーバーがあるのでまっさらな環境で色々実験してみた。・・・過程を全部書こうとしたら長くなったので省略。地味にpsしたり/proc/
と思ったら知ってることはすべて(しかもそれ以上)mod_perl のドキュメント(⇒mod_perl: Input and Output Filters)に網羅されていました。orz。 Perl に疎くてもフィルタモジュールを書く人なら目を通しておいて損はないです。つかこのレベルのドキュメントが httpd のドキュメントにも欲しかった。 ちなみにさらりと読んで「mod_perl だとレスポンスコンテンツ等にストリーム指向アクセスできるんか」とぬか喜びしたら行ストリーミングをしてくれるわけではなくて,ちょっとがっかり。どういうことかというと,Stream oriented Output Filters のくだりにも書いてありますが,read() や handler の呼び出しが行の途中でぶったぎられている可能性があるということです。だから自分でバッファリングしなきゃいけない。 例題として
Perlを高速に動かすためにはApache HTTPDにmod_perlを組み込むが、mod_perlを読み込んだApacheはメモリを大量に消費する。このため、本格的なサービスを行う場合にはバックエンドでmod_perl用の専用サーバを動作させるが、そこまで用意しなくてもmod_perlだけは分離したいという要求は多い。ここでは、1つのサーバ内でApacheを複数動作させ、mod_perlを分離する方法を以下に解説する。 設計 通常 (mod_perlなし) のApache (a) は *:80 で待ち受け。 Apache + mod_perl のApache (b) は 127.0.0.1:8000 で待ち受け。 共通する設定は別ファイルに書いておいて、それぞれの設定ファイルから Include する。 アクセスは一度 (a) で受け取って、特定のパスに対しては (b) に逆プロ
10分で、といいながらたぶん mod_perl と Apache2 をビルドするのに 10 分以上かかるという罠。まあいいや。以下のやり方で Linux、MacOSX どちらでもちゃんと動くと思われます。 まず、mod_perl 2.0 のインストール。DSO でもいいけど、ここでは Apache にスタティックに組み込みます。 インストールディレクトリは /usr/local/httpd_mp2 に。 MPM は prefork。perl を thread 有効でビルドしてるなら mpm=worker でもいいと思います。 $ wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz $ wget http://www.apache.org/dist/httpd/httpd-2.0.55.tar.gz $ tar zxvf
まえがき デスクトップCGIフレームワークを用いたアプリケーションにおいては、同一のCGIを繰り返して起動したり、CGIからCGIを呼び出すようなスクリプトを書くことが多く、連続的、連鎖的にCGIが起動されます。その度に新たなプロセスを生成していては、パフォーマンス的には不利です。このような場合には、PerlのCGIにおいてはmod_perlを使うとよいはずです。今回は、WindowsのApacheでmod_perlを使う方法を取り上げます。 mod_perl導入前後で、第7回連載記事のスクリプトの動作が体感的に変化することを確かめてください。 ご質問などがあれば、jscripter9@gmail.com宛てにメールをいただいても結構です。ご質問に基づいて得られた内容につきましては、必要に応じて本連載で使わせていただく予定です。対象読者 Windows上のApache+Perl+MySQL
Cookbook長いので分割。 デプロイについてのレシピ。Webサーバーエンジンとアプリケーションの効率化も含む。 http://search.cpan.org/~jrockway/Catalyst-Manual-5.700701/lib/Catalyst/Manual/Cookbook.pod#Deployment mod_perl Deployment mod_perlは多くのアプリケーションに対しての最適解だけど利点と欠点を述べる。他の方法としてはFastCGIがある。 Pros Speed mod_perlはとても高速で、それぞれのApacheプロセスのメモリにアプリケーションをロードすることによって恩恵を受けられる。 Shared memory for multiple apps 同じサーバーで複数のCatalystアプリケーションをする必要がある場合、mo_perlは共通のモジ
mod_fastcgiとmod_fcgidは差がなくて、mod_perl/mod_speedycgiが一歩前に出てるという感じですね。worker動作(スレッドモデル)となると、対応しているのは mod_perl2 vs mod_fcgid だけ。mod_perl2 はいかんせん導入が面倒くさいので、手軽さでは mod_fcgid の方がよいのかもしれません。 本格的にパフォーマンスを求めたり、高負荷時のメモリ消費量の少なさを考えると mod_perl2 on worker MPM に優る選択肢はないのですが個人では必要ないでしょう。*2 ただ、どれも Apache にモジュールを組み込まないとならないので、お手軽に高速化したい場合はSpeedyCGI(ソースコード)をオススメします。パフォーマンスも(個人で使うには)十分ですし、Apacheからは完全にcgiとして見えるので(プロセスが完
■use lib は使えないので startup.pl にモジュールのディレクトリを絶対パスで記述しておくこと ■perl -w use strictでエラーが出ないスクリプトを書く事。 ■正規表現の'o'はダメ ■必ずPackageで修飾すること。 mainパッケージは使えない ■exit()がきかないらしい。。。がテストしたところ exit は有効みたい。(mod_perl2) ■カレントディレクトリがApacheディレクトリになる ■openしたら、スクリプト終了前までに必ずcloseする ■__END__ or __DATA__トークンは使えない ■ 変数の初期化を綺麗に行う必要がある my $scalar = ''; my @ary = (); my %hash=(); http://www.accessup.org/pj/6_B4C9CDFDBFCDA4B5A4F3/4/#20
mod_perl とは? Apache モジュール内にラップされた完全な Perl インタプリタ のことです。通常 Perl で書かれたスクリプトを実行するには毎回 perl インタプリタを呼び出しコンパイル・実行されます。ところが mod_perl の場合は一度呼び出された後はコンパイルされた状態のまま apache 内で次のリクエストを待ち続けます。つまり perl スクリプトが apache の機能として実行されます。 一説には普通の perl スクリプト(cgi)と比較すると200倍速いとされています。他のメジャー言語である php などと比較しても速い実行結果があるようです。実際にphpやjavaとでベンチマークをとりテストした方もいるようです。 JavaはPerlよりも比較にならないほど速い? 巷では「perl は遅いから...」とよく言われてますが遅いという理由だけで C言語
iandeth. Perl, Flash ActionScript, MySQL, Movable Type, システム開発 - そんなテーマのサイトdeth. gtop.plx #!/usr/bin/perl use strict; use warnings; use GTop; my $gtop = GTop->new; my $before = $gtop->proc_mem($$)->size; eval $ARGV[0]; die $@ if $@; my $after = $gtop->proc_mem($$)->size; my $diff = GTop::size_string($after - $before); print "$diff : $ARGV[0]\n"; 例) CGIモジュールのメモリ増加量は... $ ./gtop.plx 'use CGI' 704k :
mod_perl 環境下でやっちゃダメなものをいくつか。 exit システム関数 正確には CORE::exit ですけど、実行すると現在の Apache プロセス(nobody)が落っこちます。 当然 root の Apache は子プロセスを立ち上げなおすんで 余分なシステム負荷が掛かりますし、mod_perl のメリットである キャッシュ効果が得られない=普通のCGI実行より鈍足になるという、 なかなか致命的な結果になってしまいます(^^; これを避けるために、mod_perl 環境下では exit() 関数 が 定義されてるので、必要な場合には必ず丸括弧をつけませう。 ○ exit( 0 ); × exit 0; 同じことが、die システム関数 にも言えます。こっちは素直に 「use Carp」して「croak 関数」で代替したほうが安全だと思う。 #eval の中で CORE:
この文書は Perl.com: Buildling a Large-scale E-commerce Site with Apache and mod_perl を翻訳したものです。2001年に書かれた文書であり、Apache/mod_perl/CPAN モジュールなど現在の状況にはそぐわない部分もある可能性があります。 大規模なeコマースサイトを Apache と mod_perl で構築する よくある神話 Perl はセーブする アプリケーションサーバの撰択 ケーススタディ: eToys.com Apache::PerlRun による救済 新たなアーキテクチャの計画 2000年のクリスマスを切り抜ける アーキテクチャ プロキシサーバ アプリケーションサーバ 検索サーバ ロードバランスとフェイルオーバー コード構造 キャッシング セッショントラッキング セキュリティ 例外(Excepti
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く