CGIプログラムの処理時間が分かる方法はありますか?

[上に] [前に] [次に]
miyu 1999/06/07(月) 17:57:34
質問が多くてすみません.

よく「軽い/重いプログラム」と言いますが,
CGI(perlにしろCにしろ)の処理時間や負荷を
具体的に数値で見られる方法はありますか?
特にshellが使えないときの方法が知りたいです.

miyu 1999/06/07(月) 18:01:54
追加しますと,そのプログラム全体だけでなく,
ブロックごと,サブルーチンごとなどの
処理時間も知りたいのですが.

B-Cus 1999/06/07(月) 18:17:50
どの関数が何回呼ばれて、どれだけ時間がかかったか、平均時間は
どれだけか…などを調べるプログラムを、一般に「プロファイラ」と言います。

で、
 http://www.ring.gr.jp/cgi-bin/search?key=DProf&site=astem&lines=100&scheme=http
のDProfというのがプロファイラのようです。使った事はありません。
できれば使用感をレポートしてね。

B-Cus 1999/06/07(月) 18:26:35
補足。
DProfはCGI専用というわけではありません。Perl専用プロファイラです。
Cなら prof とか gprof を使ってください。

プロファイラはバイナリとソースの両方に関係するプログラムなので、
全ての言語に使える汎用プロファイラはおそらく存在しないでしょう。

> 特にshellが使えないときの方法が知りたいです.
できればソフトウェアの開発は、シェルが使える環境でやりましょうね。

奈良っち 1999/06/08(火) 00:51:32
あのー 済みません。 便乗質問なんですけども
shellで実行速度を調べる方法は具体的に
どのようにすれば良いのでしょうか?

B-Cus 1999/06/08(火) 01:05:11
time ./hoge …じゃなくてプロファイラの使い方?

奈良っち 1999/06/08(火) 01:08:34
あのー 済みません。 便乗質問なんですけども
shellで実行速度を調べる方法は具体的に
どのようにすれば良いのでしょうか?

奈良っち 1999/06/08(火) 01:14:33
あの・・ すいません。 2重投稿してしまいました。 

恐るべし、リロード。。 っていうか、僕のミスです。


time ./hoge  で、shell で調べる事が出来るっていう事ですねー?
早速やってみますー。

プロファイらのページは今、読んでます〜 英語っすねっ!

miyu 1999/06/08(火) 20:46:45
[[解決]]
>のDProfというのがプロファイラのようです。使った事はありません。
>できれば使用感をレポートしてね。

ありがとうございました.さっそくgetしてみたところ,マニュアルが分かりづらく
いまいち使い方が分からないのですが,これから奮闘してみます.

>> 特にshellが使えないときの方法が知りたいです.
>できればソフトウェアの開発は、シェルが使える環境でやりましょうね。
さすがに,プログラム開発はShell上でやっていますが,設置するサーバが
別のところにあって,いざ設置しようとしたら,エラーがでたり処理に
時間がかかったりということがよくあるので,www上からでも確認できないかと思った次第です.

B-Cus 1999/06/09(水) 01:41:25
DProfを使ってみました。FreeBSDだから、
 pkg_add p5-Devel-DProf-*
でインストール完了。test.plを調べたいなら
 perl -d:DProf test.pl
そしたらカレントディレクトリに tmon.out というファイルが
できるたので、
 dprofpp
を実行。すると
 Garbled profile is missing some exit time stamps:
 main::finish_work
 Try rerunning dprofpp with -F.
と言われた。exit で終ってるのが原因か。で、言われた通り
 dprofpp -F
を実行。以下の出力を得る。
 Total Elapsed Time = 3.63281 Seconds
 User+System Time = 1.42968 Seconds
 Exclusive Times
 %Time Seconds     #Calls sec/call Name
  36.0   0.516        851   0.0006 main::browser_analyze
  21.3   0.305         10   0.0305 main::put_data
  20.7   0.297        851   0.0003 main::platform_analyze
  18.6   0.266          1   0.2656 main::read_data
  12.5   0.180          1   0.1797 main::pre_read_data
  1.12   0.016         98   0.0002 main::urlencode
  0.56   0.008          1   0.0078 main::put_header
  0.00   0.000          1   0.0000 main::put_description
  0.00   0.000          1   0.0000 main::finish_work 
見にくいと思うが、それぞれ
 「全体に占める時間の割合、実時間、何回呼ばれたか、1回あたりの平均実行時間、関数名」
である。

browser_analyzeが851回呼ばれて全体の処理のうち36%を占めている。
しかし1回あたりの平均実行時間は 0.0006秒。これ以上処理を
効率よくするのは難しいかも。一方、put_dataは1回あたり平均
0.0305秒かかっている。これを2倍の速さにできれば全体で0.15秒
速くなる…てな感じで、どこを改善すべき/どこを改善すると効果が
高いかを考えるわけですな。

man Devel::DProfも見ましょうね
# Winなら perldoc Devel::DProf かな?

[上に] [前に] [次に]