如何提升Trac性能

3 投票
4 回答
3019 浏览
提问于 2025-04-11 09:33

我注意到我使用的Trac实例运行得很慢,而且有很大的延迟。现在项目刚开始,所以Trac里没有太多内容(除了插件和加载到SVN中的代码)。

设置信息:这是在一个由WebFaction托管的SELinux系统上运行的。它在Apache后面,并且连接是通过SSL进行的。目前我使用的是.htpasswd文件来控制访问。

有没有推荐的方法来提高Trac的性能?

4 个回答

2

我注意到,如果

select disctinct name from wiki

这个查询执行超过5秒钟(比如因为这个表里有一百万行数据——这是真的,我们有个脚本填充了这些数据),那么浏览维基页面就会变得非常慢,耗时会超过2*t*n,其中t是上面提到的查询执行时间(当然是大于5秒),n是你正在查看的页面上有多少个tracwiki链接。

这是因为trac对这个查询有一个(硬编码的)5秒缓存过期时间。trac用这个来决定链接的颜色。我们把这个值改成了30秒(因为我们需要那么多页面,所以每30秒就得等6-7秒)。

这可能不是导致你问题的原因,但也有可能。祝你好运,希望能加快你的Trac实例的速度。

3

我们在使用FastCGI时效果最好。另一个关键因素是只在身份验证时使用https,而其他所有流量都用http。我真的很惊讶,这样做差别竟然这么大。

5

在不知道你具体情况的前提下,很难给出准确的建议。不过,有一个简单的方法可以提高效率,那就是确保 Trac 运行在类似 mod_python 的环境中。这样可以让 Python 的运行环境一直保持在内存中。否则,每次有 HTTP 请求时,Python 都需要重新运行,导入所有模块,然后再处理请求。使用 mod_python(或者你喜欢的 FastCGI)可以省去这些加载时间,直接进入处理请求的环节。

另外,随着你的 Trac 数据库不断增长,使用的人也越来越多,你可能会发现默认的 SQLite 数据库不够用了。到那时,你应该考虑把数据库迁移到 PostgreSQL 或 MySQL,因为它们能更快地处理多个同时的请求。

撰写回答