2014-10-16 6 views
1

Я использую erlang и chicagoboss с 5-6 месяцев. Я заметил, что, когда я не запускаю ./rebar compile в течение длительного времени, сервер занимает слишком много нагрузки. требуется не менее 20 -25 seconds для перезагрузки любой из веб-страниц по адресу localhost.Очистить кэш Chicagoboss

Мои вопросы:

  • Что происходит, когда я бегу ./rebar compile?
  • Почему это занимает небольшое время после того, как я выполнить эту команду? (Насколько я знаю, это компилирует что-то.)
  • Есть ли что-нибудь, который я могу сделать, чтобы минимизировать время загрузки в chicagoboss.
  • Мы используем memcache и Cowboy. Это как-то связано с memcache?

ответ

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.
  • Вы можете использовать перезагрузку горячего кода при производстве. После компиляции invoke ./init.sh reload, но он не работает с memcache! Драйвер memcache не является надлежащим OTP-приложением и после перезагрузки Hot-кода он не обновляется. После повторного перезагрузки второго горячего кода с использованием старого кода очищается и соединение с memcache теряется. Поэтому, если вы используете memcache, не используйте перезагрузку горячего кода.