Очистить кеш Chicagoboss

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

Мои вопросы:

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

1 ответ

Решение

Я полагаю, вы используете ./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, не используйте горячую перезагрузку кода.
Другие вопросы по тегам