1

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

我的问题是:

  • 当我跑步时会发生什么 ./rebar compile
  • 为什么运行此命令后需要很短的时间?(据我所知,这会编译一些东西。)
  • 有什么办法可以最大限度地减少芝加哥博斯的加载时间。
  • 我们正在使用memcacheCowboy。它与memcache有什么关系?
4

1 回答 1

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!memcache 驱动程序不是正确的 OTP 应用程序,并且在热代码重新加载后,它不会得到更新。在使用旧代码的第二次热代码重新加载进程被清除后,与 memcache 的连接丢失。因此,如果您使用的是 memcache,请不要使用热代码重新加载。
于 2014-10-16T11:50:32.533 回答