処理時間を短縮したい

182 views
Skip to first unread message

Takashi Kikuchi

unread,
Jul 14, 2014, 9:17:14 PM7/14/14
to thinr...@googlegroups.com
便利に使用させて頂いております。
有難うございます。

現在、出力をしている帳票の中で、
270ページ、3700行、行あたりの出力項目20個の場合、2.5分強かかっております。

  Rendered foo/bar.pdf.thinreports (149995.2ms)
Completed 200 OK in 150104ms (Views: 146519.5ms | ActiveRecord: 3504.9ms)

rack-contrib、ruby-profによるプロファイリングも取得してみましたが意味のあるデータには見えず困っております。(qcachegrind出力の部分スクリーンショット : http://goo.gl/6BzAb6 )

これだけの情報ではなんとも言えないと思いますが、何か解決の糸口があれば教えていただけると有難いです。
よろしくお願い致します。

Maeda Minoru

unread,
Jul 14, 2014, 9:46:53 PM7/14/14
to thinr...@googlegroups.com
Takashi Kikuchi さん
こんにちは。

ボトルネックは何なのかを切り分けれればと思うんですが
RubyのVersionやPCのスペックとか、もう少し情報が欲しいですね。
そしたら何か分かるかもです!

2014年7月15日火曜日 10時17分14秒 UTC+9 Takashi Kikuchi:

Takashi Kikuchi

unread,
Jul 14, 2014, 10:24:44 PM7/14/14
to thinr...@googlegroups.com

Maeda Minoruさん
ありがとうございます。

サーバのスペックは、さくらのVPS メモリ8G 仮想6コア。
ruby 1.9.3p547 を使用しています。

Topの結果は下の感じで、LAは高くても0.9程度です。

29323 rails    20   0 1147m 353m 3860 S 100.0  4.5   3:50.50 ruby
19991 root      20   0 1206m 8508 3044 S  0.7  0.1   7:57.13 PassengerHelper
 
8618 mysql     20   0  692m  30m 4656 S  0.3  0.4   1:33.68 mysqld
   
1 root      20   0 19232 1516 1224 S  0.0  0.0   0:00.71 init


Railsは現在、productionで動作させておりますのでlog出力等のオーバーヘッドは最小限になっていると思います。

よろしくお願い致します。

2014年7月15日火曜日 10時46分53秒 UTC+9 Maeda Minoru:

Maeda Minoru

unread,
Jul 15, 2014, 8:58:39 PM7/15/14
to thinr...@googlegroups.com
Takashi Kikuchi さん
どうもです。

動作環境に問題はなさそうですね。
気になるところとしては、PDF生成処理で以下のようなPDFに値や画像を埋め込む以外の処理はありませんか?
  • DBからレコード抽出している
  • PDFに埋め込む動的な画像(グラフやバーコード等)の生成
上記のような処理があるかを確認してみて、
ボトルネックがThinReportsを含めて、どこにあるのか探す手がかりにしてみると良いんじゃないかな?と思います。

2014年7月15日火曜日 11時24分44秒 UTC+9 Takashi Kikuchi:

Katsuya Hidaka

unread,
Jul 16, 2014, 4:57:51 AM7/16/14
to thinr...@googlegroups.com
横から失礼します。

その処理の中で、動的に画像を生成してイメージブロックに埋め込むような処理があったりしませんか?
例えば、Gnuplot や Gruff によるグラフや barby 等によるバーコードなどです。

2014年7月15日火曜日 11時24分44秒 UTC+9 Takashi Kikuchi:

Maeda Minoruさん
ありがとうございます。

Takashi Kikuchi

unread,
Jul 16, 2014, 10:32:13 AM7/16/14
to thinr...@googlegroups.com
Maeda Minoruさん、Katsuya Hidakaさん、有難うございます。

動的な画像生成はしていないです。
DBから値を取得し、比較的単純にセットしていっているだけとなります。

ActiveRecord: 3504.9ms ということなので、DB側は(早くはないですが)さほど遅い感じもしません。
logを眺めていてもDBからのデータ取得完了後に長い空白の時間があってPDF出力されるかたちとなります。

DBからの取得ではなく、ダミーの埋め込みでどの程度の速度か試してみようと思います。

みなさんの環境では、270ページ、3700行、行あたりの出力項目20個くらいの出力はストレス無くできていますでしょうか?

2014年7月16日水曜日 17時57分51秒 UTC+9 Katsuya Hidaka:

Katsuya Hidaka

unread,
Jul 16, 2014, 10:12:16 PM7/16/14
to thinr...@googlegroups.com
みなさんの環境では、270ページ、3700行、行あたりの出力項目20個くらいの出力はストレス無くできていますでしょうか

取り急ぎ、実際にサンプルコードで試してみました。 

結果は、上記の result.txt にある通り平均約 89 秒で、出力結果は総レコード 3700行、総頁 285ページ、
一行のテキストボックス 20 個です。実行環境は Mac OSX 10.9/メモリ4GB/Core i5 1.7GHz、 ruby 1.9.3 です。

Takashi Kikuchi

unread,
Jul 17, 2014, 4:59:49 AM7/17/14
to thinr...@googlegroups.com
Katsuya Hidakaさん

わざわざ確認有難うございます。

Rubyから直接の出力で1分30秒程度ということは、環境は違いますがRailsやDBのオーバーヘッドを考えると2分というのもおかしな数字ではないですね....
他のライブラリでも検証してみたいと思います。

有難うございました。

2014年7月17日木曜日 11時12分16秒 UTC+9 Katsuya Hidaka:
Reply all
Reply to author
Forward
0 new messages