- blogs:
- cles::blog
TracLightningのチューニング
TracLightningを活用してプロジェクトを運営しているのですが、最近はすっかり空気のような存在なってしまっていて、みんな頻繁にアクセスするようになってきたせいか、デフォルトの設定のままだと運用がかなり辛くなってきました。
単に遅いだけならばちょっと待てば済む話なのですが、ページを開く際に「ページの読み込み中にサーバへの接続がリセットされました」というブラウザのエラーが出て、画面が開けなくなる現象が発生しており、これがチケットの更新時に発生すると、せっかく書いたチケットの内容がそのまま吹っ飛んでしまうので、とにかくこれが不評でした。
ということで、今回はTracLightningのチューニングに挑戦です。
† TRAC_DB_POOL_SIZEを変更する
Trac(0.11.5) って重すぎやしませんか - 肉とご飯と甘いもの @ sotarok
SQLiteのロック問題はデーモンモードに限らず環境によっては発生するようです。
TRAC_DB_POOL_SIZEのデフォルトが10なので、とりあえず100位にすると解決します。
環境変数で設定するか、 /trac/db/pool.py にある値を直接書き換えでOKです。
ググっていろいろ調べて見ると、やはりTracが重くて困るという人は結構いるみたいで、「Trac(0.11.5) って重すぎやしませんか - 肉とご飯と甘いもの @ sotarok」のコメント欄で、TRAC_DB_POOL_SIZEを調整すると良いという話が書いてあったので、簡単そうなこのパラメータの調整から手をつけてみます。
TracLightningのpool.pyを下記のように変更し、TRAC_DB_POOL_SIZEを100にします。
C:\TracLight\python\Lib\site-packages\Trac-0.11.4.ja1-py2.5.egg\trac\db\pool.py
+++ pool.py 2009-10-17 20:02:33.000000000 +0900
@@ -160,7 +160,8 @@
self._available.release()
-_pool_size = int(os.environ.get('TRAC_DB_POOL_SIZE', 10))
+#_pool_size = int(os.environ.get('TRAC_DB_POOL_SIZE', 10))
+_pool_size = int(os.environ.get('TRAC_DB_POOL_SIZE', 100))
_backend = ConnectionPoolBackend(_pool_size)
† mod_python -> mod_wsgi への切り換え
TRAC_DB_POOL_SIZEの変更だけではあまり変化があったような感じがなかったので、上記のエントリの本文中で触れられていたmod_wsgiへの切り替えも試してみました。これは主にapacheの設定を変更しないといけないので、なかなか大がかりな変更になります。具体的な設定方法については、「ソフト/Bug Tracking/trac/Windows - discypus」がとても参考になりました。
まず、mod_wsgiを使うために、mod_wsgi.soをC:\TracLight\CollabNetSVN\httpd\modulesにインストールします。手っ取り早く apche 2.2 + python 2.5 + win32環境 のビルド済みバイナリが欲しかったので、ググって探してみたところ、「Index of /mod_wsgi/revision_1018_2.3/mod_wsgi_py25_apache22」にビルド済みのバイナリが見つかったので、今回はこれを使わせていただきました。
次に、httpd.confでmod_pythonを殺して、mod_wsgiを有効にします。
具体的には下記のような書き換えを行いました。
C:\TracLight\CollabNetSVN\httpd\conf\httpd.conf
+++ httpd.conf 2009-10-17 20:02:33.000000000 +0900
@@ -507,7 +507,8 @@
LoadFile "../../python/python25.dll"
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dav_svn_module modules/mod_dav_svn.so
-LoadModule python_module modules/mod_python.so
+#LoadModule python_module modules/mod_python.so
+LoadModule wsgi_module modules/mod_wsgi.so
#LoadModule fcgid_module modules/mod_fcgid.so
@@ -545,14 +546,20 @@
# PythonDebug On
#DefaultInitEnv TRAC_ENV_PARENT_DIR "C:\TracLight\projects\trac"
-ScriptAlias /trac "C:\TracLight\CollabNetSVN\httpd\cgi-bin\trac.cgi"
+#ScriptAlias /trac "C:\TracLight\CollabNetSVN\httpd\cgi-bin\trac.cgi"
+WSGIScriptAlias /trac "C:/TracLight/CollabNetSVN/httpd/cgi-bin/trac.wsgi"
-<Location "/trac">
- SetHandler mod_python
- PythonHandler trac.web.modpython_frontend
- PythonOption TracEnvParentDir "C:\TracLight\projects\trac"
- PythonOption TracUriRoot /trac
- PythonOption PYTHON_EGG_CACHE "C:\TracLight\projects\.egg-cache"
+#<Location "/trac">
+# SetHandler mod_python
+# PythonHandler trac.web.modpython_frontend
+# PythonOption TracEnvParentDir "C:\TracLight\projects\trac"
+# PythonOption TracUriRoot /trac
+# PythonOption PYTHON_EGG_CACHE "C:\TracLight\projects\.egg-cache"
+#</Location>
+<Location /trac>
+ WSGIApplicationGroup %{GLOBAL}
+ Order deny,allow
+ Allow from all
</Location>
<Location "/svn/">
早速Apacheを再起動してmod_wsgiを有効にしたいところですが、その前にmod_wsgiから呼び出されるtrac.wsgiファイルを作成しておきます。
C:\TracLight\CollabNetSVN\httpd\cgi-bin\trac.wsgi
# -*- coding: utf-8 -*-
#
import sys
sys.stdout = sys.stderr
import os
os.environ['TRAC_ENV_PARENT_DIR'] = 'C:/TracLight/projects/trac'
os.environ['PYTHON_EGG_CACHE'] = 'C:/TracLight/projects/.egg-cache'
import trac.web.main
application = trac.web.main.dispatch_request
これで準備が整ったので、Apacheを再起動するとmod_wsgi経由でTracが使えるようになります。
しばらく使ってみましたが、偶にレスポンスが悪い事はあるものの、それ以降「ページの読み込み中にサーバへの接続がリセットされました」というエラーには遭遇していません。動作もだいぶ軽くなったように思います。ひとまず最悪の問題が解決できたので、これで快適にTracを使っていけそうです。
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/3258
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
sp-20100318224351644595554@cles.net
- "TracLightning" +"???????≪????"
- infoseek - 10/03/16 13:35:53
- TRAC_DB_POOL_SIZE
- Google - 10/03/10 17:00:24
- Thunderbird 接続がリセットされました
- Yahoo! - 10/03/09 09:36:51
- traclight チューニング
- Google - 10/03/05 10:02:12
- tracLightning プロジェクト 削除
- bing - 10/03/03 13:07:01
- TracLightning
- bing - 10/03/02 18:23:19
- Traclightning バックアップ リストア
- Google - 10/03/01 23:20:51
- trac lightning 高速化
- Google - 10/02/25 10:46:13
- trac lightning 高速化
- Google - 10/02/25 10:00:44
- TracLightning プロジェクト 削除
- Yahoo! - 10/02/24 23:39:20
- google 接続 リセット
- Yahoo! - 10/02/22 01:49:21
- trac チューニング
- Yahoo! - 10/02/20 01:12:41
- TracLightning バックアップ リストア
- Google - 10/02/19 18:03:53
- traclightning ユーザー設定
- bing - 10/02/19 16:53:39
- traclightning プロジェクト デフォルト設定
- bing - 10/02/19 15:29:51
- おめでとうございます (4)
- 知恵の輪 サターン編 (3)
- SourceForge.JPのSubversion... (3)
- サーバセットアップ (3)
- Thanks ! 10000 Hit ! (3)
- 和食 小錦 (3)
- 散髪しました (3)
- .inはインドのccTLDなのか (3)
- やっと髪をきりました (3)
- 大雪でした (3)
2 . やっぱりあった!パクれる読書感想文! [7548x]
3 . Echofon for Firefox [6333x]
4 . 急性胃腸炎 [5695x]
5 . OpenIDで自分のサイトのURLを使う [5692x]
- CD-ROM起動で、HDDを完全消去
- NP_Moblog v1.16
- pinzoro 01/15
- hsur 12/29
- and more...
- 耳がおかしいと思ったら突発..
- baca 01/13
- hsur 01/13
- and more...
★はてな認証APIをつかってログインすることができます。




