Bug 24795 - Стремительное увеличение открытых файлов
Summary: Стремительное увеличение открытых файлов
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: libvhttpd (show other bugs)
Version: unstable
Hardware: all Linux
: P3 critical
Assignee: Mikhail Efremov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-12-20 18:56 MSK by Diana Sazanova
Modified: 2010-12-22 14:30 MSK (History)
7 users (show)

See Also:


Attachments
вывод команды strace ahttpd (1.48 MB, application/octet-stream)
2010-12-20 18:56 MSK, Diana Sazanova
no flags Details
вывод lsof | grep ahttpd (9.84 KB, application/octet-stream)
2010-12-20 18:58 MSK, Diana Sazanova
no flags Details
исправление (1.21 KB, patch)
2010-12-21 21:15 MSK, Vladislav Zavjalov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Diana Sazanova 2010-12-20 18:56:52 MSK
Created attachment 4721 [details]
вывод команды strace ahttpd

Версии alterator
alterator-sslkey-0.2.2-alt1
alterator-notes-1.1-alt9
alterator-net-wifi-0.12-alt1
alterator-wizardface-2.0-alt2
alterator-updates-0.2-alt1
alterator-net-functions-1.1-alt1
alterator-bacula-0.7-alt11
alterator-hw-functions-0.7-alt3
rpm-macros-alterator-4.19-alt1
alterator-l10n-2.9-alt18
branding-altlinux-backup-server-alterator-6.0.0-alt3
alterator-lookout-2.3-alt1
alterator-root-1.1-alt2
alterator-sh-functions-0.13-alt2
alterator-fbi-5.26-alt4
alterator-openldap-functions-0.2-alt2
alterator-datetime-2.2-alt3
alterator-grub-0.5-alt4
alterator-browser-qt-2.15.1-alt1
alterator-services-1.9-alt1
alterator-kdc-0.2-alt7
alterator-auth-0.21-alt1
alterator-net-iptables-4.17-alt1
alterator-distro-backup-server-0.5-alt1
alterator-4.19-alt1
alterator-logs-0.8-alt3
alterator-control-2.2-alt1
alterator-net-eth-4.11-alt2

Открытые файлы увеличиваютя при работе с ahttpd. Из них большинство открывается socket.
/var/run/alteratord/.socket
Когда достигается предел примерно 1200 файлов, подключиться к веб-интерфейсу невозможно, либо выходит ошибка "Too many open files"
Comment 1 Diana Sazanova 2010-12-20 18:58:06 MSK
Created attachment 4722 [details]
вывод lsof | grep ahttpd
Comment 2 Michael Shigorin 2010-12-21 15:04:45 MSK
Слав, не знаешь, отчего там такое может вылазить?
Comment 3 Vladislav Zavjalov 2010-12-21 15:20:52 MSK
Кто-то что-то не закрывает?

Вообще, я бы сперва sem@ спросил, он в vhttp/ahttpd должен лучше понимать... Ну и сам покопаться могу, наверное.
Comment 4 Diana Sazanova 2010-12-21 15:30:05 MSK
(В ответ на комментарий №3)
> Кто-то что-то не закрывает?

Я так поняла тут создаются при обращении к вебке unix_domain_socket. В них процессы обмениваются, записываются ли как в файл данные, и эти сокеты не закрываются по какой-то причине, множатся до тех пор пока ahttpd не упадет
Comment 5 Mikhail Efremov 2010-12-21 16:10:50 MSK
(В ответ на комментарий №3)
> Кто-то что-то не закрывает?
> 
> Вообще, я бы сперва sem@ спросил, он в vhttp/ahttpd должен лучше понимать... Ну
> и сам покопаться могу, наверное.

Я гляну, но вряд ли раньше чем через неделю-две. Но если у тебя есть время/желание разобраться, то вряд ли кто-то будет против ;).
Только надо точно знать как это воспроизвести, потому что я такой проблемы что-то не помню.
Comment 6 Vladislav Zavjalov 2010-12-21 16:32:02 MSK
Да я вот код разглядывал, но даже пока не очень разобрался, кто что запускает и открывает. Я еще погляжу, но не думаю, что моего времени/желания надолго хватат...

Насчет воспроизвести - у меня с этим все хорошо, при каждом обращении к бакенду один открытый сокет, действительно, добавляется...
Comment 7 Vladislav Zavjalov 2010-12-21 21:15:24 MSK
Created attachment 4723 [details]
исправление
Comment 8 Vladislav Zavjalov 2010-12-21 21:20:40 MSK
Добавил патч, исправляющий ошибку.

Проблема оказалась в ahttpd не как в сервере, а как в клиенте alteratord :)

Соединение открыли и не закрыли в vhttpd/lib/http_client.c:request_server().
Кто будет собирать исправление?
Comment 9 Vladislav Zavjalov 2010-12-21 21:28:13 MSK
Еще, насчет патча. Я не уверен, что красиво закрывать канал именно в request_server(). Создается он все-таки выше, в request_inet_server/request_unix_server.
Впрочем, request_server() никуда не экспортируется и мое решение мне кажется довольно понятным...
Comment 10 Michael Shigorin 2010-12-21 21:45:07 MSK
Comment on attachment 4723 [details]
исправление

Спасибо!

Если никто, ну я -- зарядил test-only task #35906.
Comment 11 Mikhail Efremov 2010-12-21 21:53:13 MSK
(В ответ на комментарий №9)
> Еще, насчет патча. Я не уверен, что красиво закрывать канал именно в
> request_server(). Создается он все-таки выше, в
> request_inet_server/request_unix_server.
> Впрочем, request_server() никуда не экспортируется и мое решение мне кажется
> довольно понятным...

И все-таки я бы действительно лучше делал destroy_channel() в
request_*_server(). Не люблю, когда выделение и освобождение ресурсов
происходит на разном уровне. К тому же, сдается мне, что будь там сразу
временная переменная channel_t, то этой ошибки вообще могло не быть, сразу было
бы видно, что ресурс надо освободить.
Comment 12 Diana Sazanova 2010-12-22 10:06:34 MSK
Спасибо!
Протестировала. Работает. Наверное, надо отправить в сизиф.
Comment 13 Repository Robot 2010-12-22 12:09:08 MSK
vhttpd-0.7.1-alt1 -> sisyphus:

* Tue Dec 21 2010 Michael Shigorin <mike@altlinux> 0.7.1-alt1
- applied connection close patch by slazav@ (closes: #24795)
- tiny spec cleanup
Comment 14 Michael Shigorin 2010-12-22 13:10:53 MSK
М-да, с сонных глаз промахнулся и на второй круг запустил не task #35880, а этот самый task #35906.

2 sem: извиняюсь, вовсе не собирался обгонять-подрезать :(
Comment 15 Mikhail Efremov 2010-12-22 14:30:26 MSK
(В ответ на комментарий №14)
> 2 sem: извиняюсь, вовсе не собирался обгонять-подрезать :(

Да не, нормально :). Главное патч от slazav багу фиксит, косметикой можно заняться неспеша потом, когда время будет.