自5-6个月以来,我一直在使用erlang
和chicagoboss
。我观察到,当我长时间不运行./rebar compile
时,服务器负载过多。至少需要20 -25 seconds
重新加载localhost
上的任何网页。
我的问题是:
./rebar compile
时会发生什么?memcache
和Cowboy
。这与它有什么关系吗?
内存缓存?答案 0 :(得分:2)
我假设您正在使用./init-dev.sh
。这个脚本提供了自动重新加载,这在开发过程中非常好,但速度很慢。它会检查所有.beam
个文件,如果稍后修改了相应的.erl
文件,则表示必须重新编译。每次请求都会重新编译。它实际上并不创建新的.beam
文件代替以前的文件。它会“动态”编译它们并加载,所以即使在第一次修改后没有更改任何内容,该文件仍然需要重新编译。
如果对大量文件进行了一些修改,则此操作可能会对您的系统产生很大影响。它可能与memcache或Cowboy没有任何关系。只需定期编译文件。
一些技巧:
./rebar compile
可能很慢,因为它遍历所有依赖项,请尝试./rebar compile skip_deps=true
。这要快得多!./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,请不要使用热代码重新加载。