可以使用太多git分支减慢我的Rails安装速度吗?

时间:2013-08-07 00:01:16

标签: ruby-on-rails git github

最近出现了一个非常糟糕的问题。我的Rails(3.2.12)开始非常缓慢地提供资产。未经修改的资产需要一整秒才能返回304。总页面加载时间约为20秒:

"GET / HTTP/1.1" 304 - 13.5556
"GET /application.css HTTP/1.1" 304 - 0.8758
"GET /bootstrap.css HTTP/1.1" 304 - 1.5164
"GET /printing.css HTTP/1.1" 304 - 0.8421
"GET /application.js HTTP/1.1" 200 1335651 

从历史上看,应用程序从未如此缓慢。

后续重新加载同一资产仍需要半秒钟

"GET /pages/logo-white-topbar.png HTTP/1.1" 200 785 1.0668
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.6074
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.5951
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.6449
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.6031

关于这个问题的一些奇怪的事情:

  • 我的同事都没有遇到过这个问题。我们有几个开发人员在这个代码库上工作,没有人遇到这个问题。 (所以这不是代码中的问题)
  • 我们的Rails App代码库包含引擎的来源。其他应用程序共享该引擎。当其他应用程序指向引擎的源时,它们并不慢。

所以我尝试了所有事情,从最容易开始,越来越难:

  • 打开/关闭资产管道,资产调试等......
  • git bisect回到六月
  • 从Gemfile中取出所有可能的东西
  • 从Ruby 1.9.2升级到1.9.3
  • 重建所有宝石
  • 重建Ruby 1.9.3
  • 卸载并重新安装rvm
  • 使用优化重建Ruby 1.9.3

没有任何效果。一切都很慢。

最后,我吹走了我的项目目录并重新克隆了应用程序。我跑了它,并在合理的时间内提供了资产。

"GET /pages/logo-white-topbar.png HTTP/1.1" 200 2267 0.2029
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.1827
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.1822

我的意思是,我们并没有点燃这个世界,但这是一个显着的进步。页面加载从20秒到4秒。

我的旧目录和新的克隆目录唯一不同的是我在旧目录中有69个git分支。显然,我应该清理它们。大多数都是完全合并的,但有些只是长期运行的功能分支。

我的问题是:这是一个合法的问题吗?有70个分支机构真的压缩了资产管道的表现吗?这是为什么?我的.git难以置信吗?我显然不太了解git来处理这个问题。

这是OSX 10.8.4上的git 1.8.1.2

感谢。

更新:Rein建议git是一只红鲱鱼,让我窥探其他匪徒。结果我的日志目录已经膨胀到巨大的大小。我吹走了它,但没有任何区别。外部资产(例如来自mixpanel)在24ms内提供服务是荒谬的,但我的本地机器需要1000ms才能在一个小的js文件上提供304.

更新2: .git/objects/pack在慢速仓库中是104MB,即使在运行git gc之后该目录也有大量松散文件。新克隆的仓库有20MB { {1}}文件夹,没有松散的物体。

1 个答案:

答案 0 :(得分:4)

这几乎可以肯定是红鲱鱼。

git分支实际上只不过是.git/refs/heads中的一个41字节文件,我没有看到任何可能的方式,仅仅存在该文件会导致此问题。

资产管道根本不知道您的项目是否使用git,因此它不会在幕后进行任何git操作。

尝试复制原始git repo并删除所有分支以查看它是否实际改变了性能。