清除Chicagoboss缓存

时间:2014-10-16 07:09:02

标签: erlang chicagoboss

自5-6个月以来,我一直在使用erlangchicagoboss。我观察到,当我长时间不运行./rebar compile时,服务器负载过多。至少需要20 -25 seconds重新加载localhost上的任何网页。

我的问题是:

  • 当我运行./rebar compile时会发生什么?
  • 为什么运行此命令后需要很短的时间?(据我所知) 这编译了一些东西。)
  • 我能做些什么来减少加载时间 chicagoboss。
  • 我们正在使用memcacheCowboy。这与它有什么关系吗? 内存缓存?

1 个答案:

答案 0 :(得分:2)

我假设您正在使用./init-dev.sh。这个脚本提供了自动重新加载,这在开发过程中非常好,但速度很慢。它会检查所有.beam个文件,如果稍后修改了相应的.erl文件,则表示必须重新编译。每次请求都会重新编译。它实际上并不创建新的.beam文件代替以前的文件。它会“动态”编译它们并加载,所以即使在第一次修改后没有更改任何内容,该文件仍然需要重新编译。

如果对大量文件进行了一些修改,则此操作可能会对您的系统产生很大影响。它可能与memcache或Cowboy没有任何关系。只需定期编译文件。

一些技巧:

  • ./rebar compile可能很慢,因为它遍历所有依赖项,请尝试./rebar compile skip_deps=true。这要快得多!
  • 如果您 修改了CB文件并想要编译它们,您仍然无需等待,请尝试./rebar compile apps=your_app_name,boss。您必须编译使用该依赖项的所有应用程序,因此如果您修改了boss_db,则必须调用:./rebar compile apps=your_app_name,boss,boss_db
  • 您可以在生产中使用热代码重新加载。编译后调用./init.sh reload,但不能用于memcache !内存缓存驱动程序不是正确的OTP应用程序,并且在热代码重新加载后,它不会更新。在第二个热代码之后,使用旧代码重新加载进程被清除,并且与memcache的连接丢失。因此,如果您使用的是memcache,请不要使用热代码重新加载。