🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: fj.net.www.servers
7 messages
7 total messages Started by Takahide Nojima Fri, 11 Jun 2004 03:25
[Q] PHPのページのプロファイリング方法
#77
Author: Takahide Nojima
Date: Fri, 11 Jun 2004 03:25
23 lines
2069 bytes
nojimaです。

  PHPで出来た特定のページが、特定の状況の時に実行速度が遅く、
どうにもプロファイリングをして改善を試みようと考えたとします。

 apache+phpそのものに改造を行うことなくプログラムの実行についての
プロファイリングを試みようと思った場合、どのような手法が考えられます
でしょうか?

 自分なりの考察:

・ 問題のページのプログラムの各関数の前後に時間記録のサブルーチン呼び出しを
  直接埋め込み、実際に実行してログ集めまくって考える?でも面倒だなぁ...

 (おまけに1秒よりも短かい時間分解能で計測する方法を考えんといかんなぁ...)

・Zend IDEとか買って考える?

・やっぱりDBG(http://dd.cron.ru/dbg)とか使う?

P.S. 
 ...「インタラクティブデバッガもプロファイラもない環境で仕事受けんなよっ」
 と愚痴ってみる...
Re: [Q] PHPのページのプロファイリング方法
#78
Author: Yasushi Shinjo
Date: Fri, 11 Jun 2004 07:14
21 lines
2017 bytes
$B?7>k!wC^GHBg3X>pJs$G$9!#$3$s$K$A$O!#(B

In article <m3hdti93or.fsf@nightmare.hm.taito.co.jp>
	Takahide Nojima <nojima@taito.co.jp> writes:
>   PHP$B$G=PMh$?FCDj$N%Z!<%8$,!"FCDj$N>u67$N;~$K<B9TB.EY$,CY$/!"(B
> $B$I$&$K$b%W%m%U%!%$%j%s%0$r$7$F2~A1$r;n$_$h$&$H9M$($?$H$7$^$9!#(B

PukiWiki $B$,!"%Z!<%8$N2<$NJ}$K<B9T;~4V$rI=<($7$^$9$h$M!#(B
$B$3$s$J46$8!#(B
    HTML convert time to 0.433 sec. 
$B$"$l$O!"$I$&$d$C$F=P$7$F$$$k$s$G$7$g$&$M!#(B

>  ...$B!V%$%s%?%i%/%F%#%V%G%P%C%,$b%W%m%U%!%$%i$b$J$$4D6-$G;E;v<u$1$s$J$h$C!W(B
>  $B$H6rCT$C$F$_$k(B...

(CLI$B$G$J$/$F(B) CGI $B$G(B PHP $B$rF0$+$7$J$,$i!"%7%'%k$+$i$d$k$N$G(B
$B$O!"%$%s%?%i%/%F%#%V$H8@$($^$;$s$+$M!#(BPerl $B$H$+(B Ruby $B$@$H$@(B
$B$$$?$$$=$l$G:n$C$A$c$&$s$8$c$J$$$G$9$+!#(B

$B!@!@!!?7>k!!Lw!!!J$7$s$8$g$&!!$d$9$7!K!!!@!@(B
$B!@!@!!C^GHBg3X!!EE;R!&>pJs!!!!!!!!!!!!!!!@!@(B
Re: [Q] PHPのページのプロファイリング方法
#79
Author: Shinichiro HIDA
Date: Fri, 11 Jun 2004 17:24
41 lines
2702 bytes
飛田です。

;; ちょうど Pukiwiki をいじっていたので。^^;;

>>>>> In <YAS.04Jun11161409@kirk.is.tsukuba.ac.jp> 
>>>>>	yas@is.tsukuba.ac.jp (Yasushi Shinjo) wrote:
> 新城@筑波大学情報です。こんにちは。

> In article <m3hdti93or.fsf@nightmare.hm.taito.co.jp>
> 	Takahide Nojima <nojima@taito.co.jp> writes:
> >   PHPで出来た特定のページが、特定の状況の時に実行速度が遅く、
> > どうにもプロファイリングをして改善を試みようと考えたとします。

> PukiWiki が、ページの下の方に実行時間を表示しますよね。
> こんな感じ。
>     HTML convert time to 0.433 sec. 
> あれは、どうやって出しているんでしょうね。

表示部分は、次のようになってます。

;; skin/pukiwiki.skin.ja.php より ;;
;  [...]
;  <?php echo S_COPYRIGHT ?>
;   <br />
;   Powered by PHP <?php echo PHP_VERSION ?>
;   <br /><br />
;   HTML convert time to <?php echo $taketime ?> sec.
;  </div>

で、$taketime は、さらに 

;; html.php より ;;
;  [...]
;  $longtaketime = getmicrotime() - MUTIME;
;  $taketime = sprintf('%01.03f',$longtaketime);

となっています。

--
 Shinichiro HIDA
 stained@po10.lcv.ne.jp 
Re: [Q] PHP のページのプロファイリング方法
#73
Author: OTA Takashi
Date: Fri, 11 Jun 2004 18:00
74 lines
4003 bytes
おおたです。PukiWiki で,特定時間帯にアクセスが集中する
(具体的には,学生が授業中にみんな見る)ホストの管理を
していたりします.

stainedさんが2004年06月12日(土) 02時24分26秒に、
fj.net.www.servers,fj.comp.programmingに投稿した
<87zn7ahut1.wl%stained@po10.lcv.ne.jp>の記事から

> > PukiWiki が、ページの下の方に実行時間を表示しますよね。
> > こんな感じ。
> >     HTML convert time to 0.433 sec. 
> > あれは、どうやって出しているんでしょうね。
> 
> 表示部分は、次のようになってます。
> 
> ;; skin/pukiwiki.skin.ja.php より ;;
> ;  [...]
> ;  <?php echo S_COPYRIGHT ?>
> ;   <br />
> ;   Powered by PHP <?php echo PHP_VERSION ?>
> ;   <br /><br />
> ;   HTML convert time to <?php echo $taketime ?> sec.
> ;  </div>
> 
> で、$taketime は、さらに 
> 
> ;; html.php より ;;
> ;  [...]
> ;  $longtaketime = getmicrotime() - MUTIME;
> ;  $taketime = sprintf('%01.03f',$longtaketime);
> 
> となっています。

 おお,ありがとうございます.私もちょうどそれを調べていたけど
気が付きませんでした.

nojimaさんが2004年06月11日(金) 12時25分08秒に、
fj.net.www.servers,fj.comp.programmingに投稿した
<m3hdti93or.fsf@nightmare.hm.taito.co.jp>の記事から

>   PHPで出来た特定のページが、特定の状況の時に実行速度が遅く、
> どうにもプロファイリングをして改善を試みようと考えたとします。
> 
>  apache+phpそのものに改造を行うことなくプログラムの実行についての
> プロファイリングを試みようと思った場合、どのような手法が考えられます
> でしょうか?

 PHPの処理だけではなくて,データの転送に時間がかかる場合も
よくあるので,私は Apache の KeepAlive を on にした上で

MaxKeepAliveRequests 20

としてます(PukiWikiが吐く絵の数がだいたいこれぐらい).他にも Apache の 
LoadModule で要らないモジュールをがしがし落とすのは,組み込みでなく
DSO(Dynamically Shared Object かな) でも,多少なりとも効果があるかと
思います.

Apacheのチューニングについては@ITの連載

Apacheによるサーバ構築
http://www.atmarkit.co.jp/flinux/index/indexfiles/index-linux.html#apache13

の,特に

Apacheパフォーマンス・チューニングのポイント
http://www.atmarkit.co.jp/flinux/rensai/apache15/apache15a.html
Apacheパフォーマンス・チューニングの実践
http://www.atmarkit.co.jp/flinux/rensai/apache16/apache16a.html

のあたりが参考になりました.ちょっと本題とは離れるかもしれませんが,
参考までに.

----------- ニュースはみんなのために /|\ メールは個人のために -----------
太田 尚志 - OTA Takashi - http://web.sfc.keio.ac.jp/~t00156to/ ICQ#:39782589
Re: [Q] PHPのページのプロファイリング方法
#74
Author: Takahide Nojima
Date: Mon, 14 Jun 2004 00:28
28 lines
2388 bytes
nojimaです。

yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:

> PukiWiki が、ページの下の方に実行時間を表示しますよね。
> こんな感じ。
>     HTML convert time to 0.433 sec. 
> あれは、どうやって出しているんでしょうね。

ということは、特定のページの出力が極端に遅いとかの場合、このPukiWikiの
時間を算出している関数を、その特定のページのそこいらじゅうに埋め込み、
時間を計測せねばならんのでしょうか?

#うわぁぁ面倒くさーっ

> >  ...「インタラクティブデバッガもプロファイラもない環境で仕事受けんなよっ」
> >  と愚痴ってみる...
> 
> (CLIでなくて) CGI で PHP を動かしながら、シェルからやるので
> は、インタラクティブと言えませんかね。Perl とか Ruby だとだ
> いたいそれで作っちゃうんじゃないですか。

Rubyは知りませんが、Perlなら-dでインタラクティブデバッガーが動いてくれる
ので良いのです。

 しかし、PHPだと単体でデバッガをもたないのですが、皆さんどうしてるのでしょう?

#スナップショット検証(いわゆるprintfデバッグとか無しね)は除きます。
Re: [Q] PHP のページのプロファイリング方法
#75
Author: Takahide Nojima
Date: Mon, 14 Jun 2004 00:33
37 lines
2846 bytes
nojimaです。

OTA Takashi <t00156to+news@sfc.keio.ac.jp> writes:

> nojimaさんが2004年06月11日(金) 12時25分08秒に、
> fj.net.www.servers,fj.comp.programmingに投稿した
> <m3hdti93or.fsf@nightmare.hm.taito.co.jp>の記事から
> 
> >   PHPで出来た特定のページが、特定の状況の時に実行速度が遅く、
> > どうにもプロファイリングをして改善を試みようと考えたとします。
> > 
> >  apache+phpそのものに改造を行うことなくプログラムの実行についての
> > プロファイリングを試みようと思った場合、どのような手法が考えられます
> > でしょうか?
> 
>  PHPの処理だけではなくて,データの転送に時間がかかる場合も
> よくあるので,私は Apache の KeepAlive を on にした上で
> 
> MaxKeepAliveRequests 20
> 
> としてます(PukiWikiが吐く絵の数がだいたいこれぐらい).他にも Apache の 
> LoadModule で要らないモジュールをがしがし落とすのは,組み込みでなく
> DSO(Dynamically Shared Object かな) でも,多少なりとも効果があるかと
> 思います.
> 
> Apacheのチューニングについては@ITの連載

情報ありがとうございます。

 しかし、nojimaの用途では、そこまでは必要ありません。PHPの特定のページ
の実行時間がapacheのCustomLogの%T出力程度であからさまに遅いことが
わかっているからです。

 というわけで、PHPの特定のページのスクリプトの中のどの部分が遅いのかを検証
する必要がある場合、皆さんどうしてるのでしょうか?

#必殺、やっぱりあてずっぽう?(笑)
Re: [Q] PHPのページのプロファイリング方法
#76
Author: Takahide Nojima
Date: Mon, 14 Jun 2004 00:38
18 lines
1829 bytes
nojimaです。

#補足

Takahide Nojima <nojima@taito.co.jp> writes:

> > (CLIでなくて) CGI で PHP を動かしながら、シェルからやるので
> > は、インタラクティブと言えませんかね。Perl とか Ruby だとだ
> > いたいそれで作っちゃうんじゃないですか。
> 
> Rubyは知りませんが、Perlなら-dでインタラクティブデバッガーが動いてくれる
> ので良いのです。

あと、Perlの場合、プロファイルしたければ、

 Devel::DProf

モジュールがあるので、これまた問題ありません。
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads