огромный svn checkout заставил apache (dav_svn) потреблять всю память на сервере - какие-нибудь советы? - PullRequest
4 голосов
/ 14 марта 2009

Есть ли какие-либо настройки в apache2 / dav_svn / ssl / subversion на сервере, которые позволили бы улучшить производительность всей системы (или, по крайней мере, не потреблять всю память) при больших проверках?

Меня особенно интересуют предложения по снижению потребления памяти.

Причина этого вопроса:

На прошлой неделе у нас возникла проблема с нашим сервером SVN - он перестал отвечать на все запросы, и администратор сообщил нам, что apache забрал всю память. Мы обращаемся к нашим репозиториям Subversion через ssl, используя mod_dav на apache.

Причиной нехватки памяти стал один из моих коллег, делавший большую проверку размером ~ 2,5 ГБ, которая могла содержать некоторые файлы размером более 500 МБ. Я слышал, что он пытался несколько раз, так что, возможно, несколько процессов остались на сервере.

Администратор сервера сказал, что вы не должны хранить такие большие файлы в Subversion, но я не согласен с этим - если они необходимы для проекта, я бы всегда хотел, чтобы они были в хранилище.

Ответы [ 2 ]

2 голосов
/ 17 марта 2009

Это хорошо известная проблема с SVN / Apache / SSL

Есть несколько обходных путей, но, похоже, на данный момент нет 100% исправления. Прочитайте эту проблему для получения дополнительной информации.

Некоторые предлагаемые обходные пути:

  • Использовать VisualSVN Server 1.6.3 (win32, без SSL и с SSL)
  • не использовать SSL
  • использовать SSLSessionCache shm: key директива
  • использовать совпадающие svnclient и сервер
  • [..]
0 голосов
/ 14 марта 2009

«Выполнять лучше» и «потреблять меньше памяти» во многих случаях несовместимы.

Обычно производительность достигается, когда используется больше памяти (например, кеширование). Поэтому, хотя я понимаю, что ваш вопрос заключается в том, как сохранить низкое потребление памяти, имейте в виду, что в результате SVN будет работать медленнее.

Администратор сервера был прав насчет хранения огромных (они бинарных?) Файлов в SVN. SVN в основном для исходного кода - небольшие текстовые файлы. Если вам нужно где-то поддерживать версию связанных данных, входных данных, тестовых данных, ресурсов, сторонних зависимостей и т. Д. Я предлагаю вам создать бинарный репозиторий в некотором общем месте и использовать структуру каталогов +, возможно, символические ссылки, чтобы отразить, существует в вашем SVN репо.

Есть реальные преимущества в том, чтобы ваш SVN был как можно более худым (но не худым!). Из-за своей конструкции SVN очень медленно выполняет проверку (это очень тяжелая операция по сравнению, например, с ветвлением, которое очень дешево). Более быстрые проверки и обвинения и т. Д. Приводят к более быстрым циклам разработки. Поэтому я считаю целесообразным поддерживать не-кодовый репозиторий «вручную» на некотором резервном сетевом ресурсе вместо того, чтобы хранить все в SVN.

Помните также, что вы не можете поместить все , что вы хотите, в SVN. Вы не ставите платформу SDK там, верно? Таким образом, использование внешнего репозитория может предложить вам более полное решение, позволяя поместить туда еще больше .

На несвязанном замечании: возможно, самое дешевое решение - просто добавить больше оперативной памяти. Я на самом деле экспериментировал с решениями SVN для репозиториев на базе RAM-диска, и они быстро работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...