Plack::Middleware::Profiler::KYTProfでプロファイリング

Devel::KYTProfでプロファイリングするのも、ミドルウェアになっていると使いやすいかもしれないということで作ってみました。
https://github.com/dann/p5-plack-middleware-profiler-kytprof

What is KYTProf?

onishiさんのDevel::KYTProfは、ネットワークI/O系やDBアクセスなどの、いわゆる重い処理に対してモンキーパッチをあてて、性能を測るということをするモジュールです。I/O系にフォーカスしているところが用途が明確でいいですね。Perl界隈でよく使われるモジュールに対してモンキーパッチをあてているので、useするだけで空気を読んで性能を測ってくれます。LLらしい面白いアプローチのモジュールです。

Plack::Middleware::Profiler::KYTProfの使いどころ

Ganglia, CloudForecast, Zabbixなどのリソースモニタリングツールを使うことで、I/O系の問題があることはすぐにわかります。しかし、I/Oの問題であることがわかっても、アプリケーションのどの箇所でおきているかを特定するのは、アプリの作りにも依存するところで、コードの理解無くして特定することは難しいこともあります。

そういった場合に、このミドルゥエアを使うことになります。使うことで、コードの変更すること無く、SQL、テンプレート、エンドポイントへの通信などを特定することが可能になります。

基本的な性能問題の8-9割は、I/O絡みで発生することが殆どなので、その点で実用的といえるかもしれません。

使い方

基本的な使い方は、以下の通りです。ウェブアプリ用のミドルということで、Template Engineもプロファイリング対象に加えています。

builder {                                                                                                                              
    enable "Plack::Middleware::Profiler::KYTProf";                                                                                     
    $app; 
}; 


負荷テスト環境や独自のアプリでも使えるようにするために、サンプリングしたいケースや、何をプロファイリング対象にしたいかなどを切り替えられるようにもしてあります。examplesにサンプルをいれてあるので、使ってみてください。

Enjoy!

#NYTProfのようなマイクロチューニングをするためのモジュールは、使う人が*モジュールの作者など)かなり限定的になるかなとは思うんですが、こういったI/O系は性能のオーダーはまるで違うので、使いどころは結構ありそうです。