Непредсказуемая утечка дескриптора файла

Итак, я расследую, что, кажется, утечка FD.

Это Linux-приложение CppCms, написанное на C ++ 11, я тестирую его с помощью инструментов, которые отправляют примерно 250 запросов / секунд.

Тесты в течение 30 минут, а иногда я получаю lighttpd (server.c.1446) [note] sockets disabled, out-of-fds ошибка.

Я начал исследовать ФД с помощью watch "sudo ls /proc/<lighttpd>/fd/ | wc -l; echo /;sudo ls /proc/<myApp>/fd/ | wc -l;echo /; sysctl fs.file-nr"

Результаты, кажется, говорят, что все хорошо, пока это не так. FD стабильны (50 — 100) и случайным образом доходят до максимального числа lighttpd.
Если моя заявка была задействована, я думаю, что это произошло раньше (не после 200000 успешных запросов)

Я использовал valgrind, чтобы попытаться увидеть что-нибудь, и я нашел это:

==5647== Open AF_UNIX socket 6: <unknown>
==5647==    at 0x8E379EA: socketpair (syscall-template.S:84)
==5647==    by 0x97F8001: booster::aio::socket_pair(booster::aio::stream_socket&, booster::aio::stream_socket&) (stream_socket.cpp:570)
==5647==    by 0x7312766: cppcms::service::setup_exit_handling() (service.cpp:378)
==5647==    by 0x73135C7: cppcms::service::run() (service.cpp:572)
==5647==    by 0x43F56E: MainMngr::runServer() (mainmngr.cpp:46)
==5647==    by 0x443A95: main (main.cpp:22)
==5647==
==5647== Open AF_UNIX socket 5: <unknown>
==5647==    at 0x8E379EA: socketpair (syscall-template.S:84)
==5647==    by 0x97F8001: booster::aio::socket_pair(booster::aio::stream_socket&, booster::aio::stream_socket&) (stream_socket.cpp:570)
==5647==    by 0x7312766: cppcms::service::setup_exit_handling() (service.cpp:378)
==5647==    by 0x73135C7: cppcms::service::run() (service.cpp:572)
==5647==    by 0x43F56E: MainMngr::runServer() (mainmngr.cpp:46)
==5647==    by 0x443A95: main (main.cpp:22)

Я не могу сказать, является ли это настоящей утечкой файлового дескриптора, но это так.

У моего кода есть проблема?
Есть ли у CppCms проблемы?
Вы когда-нибудь сталкивались с такой проблемой?
Есть ли у вас какие-либо советы, чтобы определить, кто увеличивает дескриптор дескриптора файла со 100 до 8000?

0

Решение

Сожалею. В lighttpd 1.4.43 есть регрессия с mod_cgi и CGI СООБЩЕНИЕ Запросы. Описание проблемы и патча доступно в https://redmine.lighttpd.net/issues/2771

1

Другие решения

Других решений пока нет …