Как ускорить индексацию OpenGrok
Недавно мой начальник попросил меня изучить возможности OpenGrok в компании, в которой я работаю. Сначала я начал с нескольких проектов на своем виртуальном сервере lubuntu, все работало нормально, но довольно медленно. Я обвинил свой ноутбук с посредственными параметрами для этого.
Теперь у меня виртуальные большие пропорции, и я также использую индексирование для большего объема данных (репозиторий SVN - 100 различных проектов, некоторые из них с несколькими ветвями, тегами и стволом, всего около 100 000 файлов, всего несколько ГБ в размер). Все файлы проверяются непосредственно в SRC_ROOT.
Я надеялся на достаточно быструю индексацию, но она работает уже более пяти дней. Я вижу несколько потоков, работающих через htop, но загрузка ЦП составляет 0,5-2,5%, использование памяти - 0,9%. Так что я думаю, это не проблема вычислительной мощности. И если нет ужасно медленных жестких дисков, я не знаю, в чем проблема.
Более того, процесс индексации замедляется. В начале это было примерно 1 сек / файл, сейчас это около 5 сек / файл. К сожалению, я не включил параметр прогресса, поэтому я не знаю, как долго он еще будет работать.
Есть идеи, как сделать индексацию быстрее? Как эффективнее использовать ресурсы? Текущая скорость просто непригодна...
1 ответ
Я думаю, что простой способ улучшить производительность - запустить индекс opengrok с настройкой JAVA_OPTS и использованием 64-битной Java. Кроме того, использование derby для хранения сгенерированных данных индекса также повышает производительность. Подробнее о том, как использовать и настроить opengrok
Я думаю, что проблема в SVN, попробуйте отладить и улучшить скорость доступа SVN с вашей виртуальной машины или вообще отключить (временно) svn, чтобы получить быстрый индекс (и вы можете постепенно добавлять историю в индекс позже - для каждого проекта, даже если это будет потратьте несколько дней, посмотрите варианты запуска индексатора для каждого проекта) Или, если вы можете зеркально отразить репозиторий SVN и делать локальные вызовы SVN, что должно дать вам толчок. Итак, чтобы заключить, {OpenGrok может обнаружить svn, пропустить создание истории (включить ее на лету) и просто проиндексировать извлечение, а затем добавить локальную историю, чтобы избежать длительного ожидания создания истории на лету. Тем не менее, git и hg, похоже, хорошо работают с {OpenGrok с точки зрения индекса истории.
Я сам сталкивался с этим и обнаружил, что индексатор тратит большую часть (>90%) своего времени на запросы к системам управления версиями.
Тем не менее, некоторые из проектов, которые я использую, используют Perforce и SVN, поэтому я не хочу полностью их отключать, поэтому я дважды индексировал - во-первых, со всеми параметрами, которые включают управление исходным кодом, и затем снова со всем включенным.
Таким образом, это все еще занимает много времени (в моем случае несколько дней), но, по крайней мере, у меня есть полезный индекс, работающий за несколько часов, а затем он может потратить дни на обработку всей истории.
Последующие индексы должны быть быстрее, поскольку я ожидал, что кэш истории обновляется только для файлов, которые новее, чем кешированная история.
(Тем не менее, было бы неплохо, если бы я мог обновить кэш истории извне, чтобы все было готово к работе, прежде чем я вообще запустил индексатор, и настроил индексатор, чтобы вообще не искать информацию об истории, а вместо этого просто индексировать то, что кэшировано)