如何提升Trac性能
我注意到我使用的Trac实例运行得很慢,而且有很大的延迟。现在项目刚开始,所以Trac里没有太多内容(除了插件和加载到SVN中的代码)。
设置信息:这是在一个由WebFaction托管的SELinux系统上运行的。它在Apache后面,并且连接是通过SSL进行的。目前我使用的是.htpasswd文件来控制访问。
有没有推荐的方法来提高Trac的性能?
4 个回答
我注意到,如果
select disctinct name from wiki
这个查询执行超过5秒钟(比如因为这个表里有一百万行数据——这是真的,我们有个脚本填充了这些数据),那么浏览维基页面就会变得非常慢,耗时会超过2*t*n
,其中t
是上面提到的查询执行时间(当然是大于5秒),n
是你正在查看的页面上有多少个tracwiki链接。
这是因为trac对这个查询有一个(硬编码的)5秒缓存过期时间。trac用这个来决定链接的颜色。我们把这个值改成了30秒(因为我们需要那么多页面,所以每30秒就得等6-7秒)。
这可能不是导致你问题的原因,但也有可能。祝你好运,希望能加快你的Trac实例的速度。
我们在使用FastCGI时效果最好。另一个关键因素是只在身份验证时使用https
,而其他所有流量都用http
。我真的很惊讶,这样做差别竟然这么大。
在不知道你具体情况的前提下,很难给出准确的建议。不过,有一个简单的方法可以提高效率,那就是确保 Trac 运行在类似 mod_python
的环境中。这样可以让 Python 的运行环境一直保持在内存中。否则,每次有 HTTP 请求时,Python 都需要重新运行,导入所有模块,然后再处理请求。使用 mod_python
(或者你喜欢的 FastCGI)可以省去这些加载时间,直接进入处理请求的环节。
另外,随着你的 Trac 数据库不断增长,使用的人也越来越多,你可能会发现默认的 SQLite 数据库不够用了。到那时,你应该考虑把数据库迁移到 PostgreSQL 或 MySQL,因为它们能更快地处理多个同时的请求。