# [Solved] Жуткие тормоза (подвисания) subversion

## dragon1020

Дано:

Свежеустановленный Gentoo, ext3, subversion 1.4.5, затем 1.4.6, затем 1.4.6-r1.

Отклик от сервера резвый, пакеты не пропадают, fs так же работает нормально. Однако после авторизации, в случае успеха (при неудаче такого нет) иногда сервер откликается лишь спустя несколько минут (!), что, разумеется, очень не радует девелоперов. Причем это касается любой команды. Например "svn ls svn://domain.name". Ресолвится доменное имя моментально, с этим проблем нет. В логах пусто. Загрузка сервера практически нулевая.

Что пробовал (без результата):

- компилировать без поддержки perl и python;

- компилировать с поддержкой BDB (и создавать в BDB репозитарий);

- компилировать с nowebdav (на всякий случай :)).

Сейчас subversion скомпилирован с USE="berkdb nls perl python svnserve vim-syntax -apache2 -bash-completion -debug -doc -emacs -extras -java -nowebdav -ruby"

Может кто сталкивался? Есть какие-нибудь идеи?

PS. У друга на openSuSE 10.3 с svn 1.4.6, кстати, такого нет.Last edited by dragon1020 on Thu Mar 13, 2008 2:45 pm; edited 1 time in total

----------

## Laitr Keiows

Запустить apache под strace?..

----------

## dragon1020

 *Laitr Keiows wrote:*   

> Запустить apache под strace?..

 

А апач тут при чем?.. Или имелся в виду subversion?

----------

## Laitr Keiows

 *dragon1020 wrote:*   

> А апач тут при чем?.. Или имелся в виду subversion?

 

Да, svnserve

----------

## dragon1020

Попробовал, поковырял полученный лог, ничего умного не нашел (к тому же svnserve порождает новые процессы при новом коннекте, которые не отслеживаются strace'ом). Однако выяснил, что на моей домашней машине такого не происходит. Правда платформы разные - дома amd64, на сервере x86.

Думал, может с RDNS какие-то тормоза на сервере - нет.

Больше пока идей нет.

Забыл сказать - загрузка проца и кол-во памяти на машине в момент подвисания в норме. И еще - первый коннект проходит удачно (вроде всегда, по крайней мере после рестарта svnserve).

Laitr Keiows, спасибо за идею с strace.

----------

## calculator

Если не ошибаюсь порожденные процессы опцией -f видно. Посмотри доку по strace.

----------

## dragon1020

calculator, спасибо, не знал, что так возможно.

Однако для меня ситуация яснее не стала.

Вот как проходит нормальная сессия:

```
[pid 24693] open("/var/svn/conf/svnserve.conf", O_RDONLY|O_LARGEFILE) = 3

[pid 24693] read(3, "### This file controls the confi"..., 16384) = 1089

[pid 24693] read(3, "", 15295)          = 0

[pid 24693] read(3, "", 16384)          = 0

[pid 24693] close(3)                    = 0

[pid 24693] open("/var/svn/conf/passwd", O_RDONLY|O_LARGEFILE) = 3

[pid 24693] read(3, "### This file is an example pass"..., 16384) = 1677

[pid 24693] read(3, "", 14707)          = 0

[pid 24693] read(3, "", 16384)          = 0

[pid 24693] close(3)                    = 0

[pid 24693] write(4, "( success ( ( CRAM-MD5 ) 36:f9bc"..., 69) = 69

[pid 24693] read(4, "( CRAM-MD5 ( ) ) ", 4096) = 17

[pid 24693] open("/dev/random", O_RDONLY) = 3

[pid 24693] read(3, ";n\351\267\326\365o]", 8) = 8

[pid 24693] close(3)                    = 0

и т.д.
```

Когда возникают тормоза, все останавливается на:

```
pid 24693] write(4, "( success ( ( CRAM-MD5 ) 36:f9bc"..., 69) = 69

[pid 24693] read(4, "( CRAM-MD5 ( ) ) ", 4096) = 17

[pid 24693] open("/dev/random", O_RDONLY) = 3

[pid 24693] read(3,
```

и, после нескольких минут, все продолжается.

Почему так происходит - для меня загадка (не программер).

----------

## calculator

 *Quote:*   

> В     ядре Linux реализован генератор случайных чисел, который теоретически мо-
> 
>       жет генерировать истинно случайные числа. Генератор случайных чисел собира-
> 
> ет в пул энтропии шумы внешней среды, которые поступают из драйверов устройств.
> ...

 

Пул энтропии пустой  :Wink:  Не очень хорошо, но если можно как-то /dev/urandom использовать - думаю поможет. +можно погуглить.

----------

## dragon1020

calculator, спасибо, попробую копать в этом направлении. :)

Ты абсолютно прав:

# dd if=/dev/random of=/dev/null bs=1024 count=1

0+1 records in

0+1 records out

8 bytes (8 B) copied, 164.63 s, 0.0 kB/s

urandom работает нормально. Возможно просто сделаю симлинк на urandom, подумаю еще как бы нормально сделать.

Еще раз спасибо огромное.

----------

## calculator

Вот чего чего а симлинк делать не советую - гуглить вот советую  :Smile: 

----------

## dragon1020

calculator, почему? Работает прекрасно. Симлинк создается через udev, так что при ребуте все ок.

А погуглю обязательно, как только времени чуть больше появится. Пока то, что находил, мне не нравилось (лезть в исходники - не для меня, как я уже говорил, не программер). К тому же я думаю так - раз были подвисания subversion, значит может еще найтись какая-то тулза, которая так же будет подвисать при обращении к /dev/random.

----------

## calculator

Да костыль имхо это... теоретический  :Wink:  Но как его _правильно_ бороть если с /dev/random так быстро данные разбираются - непонятно.

----------

## dragon1020

calculator, может из-за ssh? Канал-то криптуется... Но, имхо, главное - все работает. :) Причем работает и моя машина (сначала на ней опробовал), и сервер.

----------

## Laitr Keiows

 *dragon1020 wrote:*   

> лезть в исходники - не для меня

 

А стоило бы... Правильное решение следующее:

```
USE="urandom" emerge -1 dev-libs/apr
```

----------

