BLOGTIMES
::
Home > TracLightningのチューニング
2009/10/17
[ by hsur at 19:32]

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.org 2009-10-17 20:02:42.000000000 +0900
+++ 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.org      2009-10-17 20:02:42.000000000 +0900
+++ 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

#!C:\TracLight/python/python.exe
# -*- 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:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/3258
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン

Web Services by Yahoo! JAPANPowered by NP_SpamBayesJP
★下記に2つの英単語をスペースで区切って入力してください
::
Home > TracLightningのチューニング