鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

QudoワーカーのCPU使用率がハンパナイので調査

Twienをリリースしたのは良いけれど、まともに運用できていません。

QudoワーカーをQudo::Parallel::Managerを使用して処理しています。 Qudo's document Wiki- workerの簡単管理

しかし、workerのCPU使用率が半端なくて、2coreのさくらVPSで load averageも5とか平気で超えてしまう。 だから、サーバもダウンしまくって、どうしようもない状態となっています。

f:id:kechiya:20140116202615p:plain

でも、なんでそんなにCPU使っているのかサッパリ分からないのでどうやって調査しようか 悩んでいた。

perlのプロファイラを使おう

インストールは簡単cpanm一発です。

cpanm Devel::NYTProf

環境変数の設定

今回は、forkするものを測定するのでtokuhiromさんの Devel::NYTProf で Starlet/Starman (Plack) でうごくウェブアプリケーションのプロファイリングをおこなう方法まとめ を参考にしました。

ランチャーの修正

#!/bin/bash

export NYTPROF=sigexit=int
perl -d:NYTProf twien_worker.pl

CPU利用率があがった状態にてCTRL+Cで停止。 nytprofhtmlでプロセスIDの入ったファイルを指定した

nytprofhtml -f nytprof.out.4844

f:id:kechiya:20140116213625p:plain

HTML::ExtractContent::extractで固まっているように見受けられる。ふむふむ。

結局、HTML::ExtractContent::extractに渡す文字列がmp3とか、jpgとかの拡張子のときに、固まっていると分かった。 むむむぅ。さて、対策をどうするか・・・