header image

携帯対応

QRコード

RING

人気ブログランキング

新着記事

9月 5th, 2008 Trac none Comments

Tracは標準では全てのリクエストがcgi経由なので、よほどのマシンでないかぎり動作は非常にもっさりした感じになる。

通常のcgi経由で、100回リクエストを発行した場合(abコマンド)

Concurrency Level:      1
Time taken for tests:   39.932895 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      350700 bytes
HTML transferred:       309000 bytes
Requests per second:    2.50 [#/sec] (mean)
Time per request:       399.329 [ms] (mean)
Time per request:       399.329 [ms] (mean, across all concurrent requests)
Transfer rate:          8.56 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       12   12   0.2     12      13
Processing:   381  386   3.1    386     394
Waiting:      348  353   2.7    353     362
Total:        393  398   3.1    398     406

Percentage of the requests served within a certain time (ms)
  50%    398
  66%    400
  75%    400
  80%    401
  90%    403
  95%    404
  98%    406
  99%    406
 100%    406 (longest request)

平均して秒間2.5件程度はさばける感じだ。

さてチューニングだが、通常2点の対応をする。

  • Tracアプリを、mod_python経由で動作させる
  • cssやjs等の非アプリファイルを、python経由ではなく直接参照させる

順に手順を書く。

Tracアプリを、mod_python経由で動作させる

まずは、mod_pythonを導入する。CentOSなら

yum install mod_python

次に、apacheの設定ファイルを変更する。
cgi経由で利用する場合は、以下のような設定になっていると思われる。
単に特定のURLの場合、Tracの環境変数を設定するのと認証の設定をしているだけ。

ScriptAlias /trac/testpj /usr/share/trac/cgi-bin/trac.cgi
<location "/trac/testpj">
   SetEnv TRAC_ENV "/var/lib/trac/testpj"
</location>
<location "/trac/testpj/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/www/etc/passwd.dat
Require valid-user
</location>

こいつをmod_python対応にすると、こうなる。TRAC_ENVの環境変数を外して、PYTHON_EGG_CACHE以下の5行を自分の環境に合わせて変更する。

ScriptAlias /trac/testpj /usr/share/trac/cgi-bin/trac.cgi
<location "/trac/testpj">
##SetEnv TRAC_ENV "/var/lib/trac/testpj"
SetEnv PYTHON_EGG_CACHE "/tmp/"
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/lib/trac/
PythonOption TracUriRoot /trac/
</location>
<location "/trac/testpj/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/www/etc/passwd.dat
Require valid-user
</location>

以上が終わったら、apache再起動を実施だ。

cssやjs等の非アプリファイルを、python経由ではなく直接参照させる

上述の通り、cssやjsもcgi経由で読み込まれているので、こいつを直接参照するように変えた方が良い。

Tracでは通常、画像やjs等の部品が/usr/share/trac/htdocs/に配置されており、こいつを直接参照するようにするには以下の手順になる。

cd /var/www/html/
ln -s /usr/share/trac/htdocs/ trac_common

次にtrac.iniを開く。中にhtdocs_locationという設定項目があるので、

default_charset = iso-8859-15
default_handler = WikiModule
htdocs_location = /trac_common
ignore_auth_case = false
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search

のように設定する。

最後にまた性能を見てみる。

Concurrency Level:      1
Time taken for tests:   4.18489 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      344700 bytes
HTML transferred:       303000 bytes
Requests per second:    24.88 [#/sec] (mean)
Time per request:       40.185 [ms] (mean)
Time per request:       40.185 [ms] (mean, across all concurrent requests)
Transfer rate:          83.61 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       12   12   0.2     12      13
Processing:    19   27  50.2     19     377
Waiting:       18   26  50.2     19     376
Total:         31   39  50.3     31     390

Percentage of the requests served within a certain time (ms)
  50%     31
  66%     32
  75%     32
  80%     32
  90%     35
  95%     49
  98%    388
  99%    390
 100%    390 (longest request)

ということで、10倍程度の性能向上が出来ていることが分かる。
こりゃ絶対やらないといかんでしょ。

※abコマンドでは画像やcssは読み込まないので、単純にTracのページの性能になる。

参考文献

入門Trac with Subversion―Linux/Windows対応

著者/訳者:高山 恭介

出版社:秀和システム( 2008-05 )

定価:¥ 2,310

Amazon価格:¥ 2,310

単行本 ( 327 ページ )

ISBN-10 : 4798019615

ISBN-13 : 9784798019611


“Tracを高速化する2つの方法”へのコメントはありません。

コメントはありません。是非コメントしてください。

コメントする

XHTML: 以下のタグが利用可能です: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback

 


ads

読まなきゃモグリ