Автор Тема: слишком много открытых файлов  (Прочитано 3469 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
слишком много открытых файлов
« : 24 Апреля 2013, 11:40:48 »
При открытии очередного файла происходит ошибка.
Как с этим бороться?
 

cinyflo

  • Гость
Re: слишком много открытых файлов
« Ответ #1 : 24 Апреля 2013, 12:44:13 »
Отключите интернет.
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #2 : 24 Апреля 2013, 13:03:17 »
Да это все та же страшненная программа. Сама она открывает файлы функцией open().
Закрывает функцией close(). Одновременно открыто не более 128 файлов. Так же по ее запросам открывает файлы mysql. Должно быть около 800 файлов. Сокеты вроде тоже считаются. Программа их открывает функцией connect(). Их должно быть обновременно открытых не более 128, но они как-то неторопливо закрываются, поэтому может быть и больше.
Ошибка произошла в четвертом часу ночи, поэтому уже невозможно установить что там было с системой. Но проц точно не мог быть загружен бальше 10%, оперативки должно было оставаться свободной не менее 1 Gb, а свопа точно нет.

Сообщение объединено: 24 Апреля 2013, 13:06:44
Отключение интернета конечно поможет - программа не сможет брать оттуда данные и перестанет открывать фыйлы, пока интернет опять не включат. Но зачем нужна программа которая не работает, а ждет?
« Последнее редактирование: 24 Апреля 2013, 13:06:44 от mihail_1 »
 

Оффлайн qupl

Re: слишком много открытых файлов
« Ответ #3 : 24 Апреля 2013, 13:07:25 »
Проверьте open_files_limit= в конфигах mysql.

Сообщение объединено: 24 Апреля 2013, 13:08:58
И что в ОС : ulimit -n
« Последнее редактирование: 24 Апреля 2013, 13:08:58 от qupl »
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #4 : 24 Апреля 2013, 13:20:48 »
mysql не жадный 64210.
а вот ulimit всего 1024
 

Оффлайн qupl

Re: слишком много открытых файлов
« Ответ #5 : 24 Апреля 2013, 13:25:50 »
См.  /etc/security/limits.conf

Сообщение объединено: 24 Апреля 2013, 13:26:41
Тыц, как пример с mysql.

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #6 : 24 Апреля 2013, 13:36:56 »
А каков верхний предел ограничения в /etc/security/limits.conf?
 

Оффлайн qupl

Re: слишком много открытых файлов
« Ответ #7 : 24 Апреля 2013, 13:43:01 »
Почему курить маны должен другой? :)

Цитировать
All items support the values -1, unlimited or infinity indicating no
       limit, except for priority and nice.

Вобщем в пределах разумного надо остановиться :).

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #8 : 25 Апреля 2013, 15:11:39 »
Увеличение ограничения количества открытых файлов помогло.
Основное количество (около 1000) в списке открытых программой занимают примерно такие строки
Цитировать
test   3456 user 1516u  sock                0,4         24990084 can't identify protocol
test   3456 user 1517u  sock                0,4         25065435 can't identify protocol
Их количество постепенно увеличивается. Это процесс бесконечный или в какой-то момент скорость их исчезновения достигнет скорости появления?

 

Оффлайн qupl

Re: слишком много открытых файлов
« Ответ #9 : 25 Апреля 2013, 15:20:37 »
mihail_1, если программа Ваша, то почему Вы не можете проконтролировать какие файлы и когда открываются?

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #10 : 25 Апреля 2013, 15:34:41 »
Потому что это не файлы, а сокеты. И когда программа их закрывает, система их не уничтожает сразу, а хранит для полезного использования. Удается ли ей это или они просто зря занимают ресурсы мне неизвестно. Но то что их количество уже почти в десять раз превышает количество активных сокетов, явно говорит о том что многие из них храняться зря. Но какая логика их хранения/уничтожения прописана в системе и можно ли/стоит ли на эту логику как-то влиять мне неизвестно. И главное как много их может быть?
 

Оффлайн kobzar

Re: слишком много открытых файлов
« Ответ #11 : 25 Апреля 2013, 15:50:31 »
Логика прописана в вашем коде...
Система только делает то что вы ей говорите.

з.ы. - Сограждане 0 предлагаю удалить топик, в виду того что у человека проблеа с кодом которая никак не относиться к дебиану.
Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #12 : 25 Апреля 2013, 16:05:02 »
kobzar, Ваши сообщения показывают, что власти у Вас куда больше, чем знаний.
Debian не занимается непосредственно открытием/закрытием сокетов, эти действия выполняет ядро.
А проблема большого количества существует далеко не только у моей программы.
Web сервер может перестать отвечать на запросы, из-за большого количества таких сокетов. Уменьшение времени их жизни приводит к снижению производительности (создавать новый дольше чем взять старый). Хорошего решения проьлемы в этом случае вроде бы нет.
Но в моем случае соединения исходящие и известно что после некоторого момента, вероятность повторных соединений с конкретным ip незначительна. Но я не знаю может ли это помочь не таскать это хвост сокетов которые уже не будут использованы.
 

Оффлайн qupl

Re: слишком много открытых файлов
« Ответ #13 : 26 Апреля 2013, 06:46:55 »
* удалил сообщения не относящиеся к вопросу

mihail_1, в любом случае открытие/закрытие как файлов так и сокетов контролирует Ваша программа,  смотрите код в первую очередь.

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: слишком много открытых файлов
« Ответ #14 : 26 Апреля 2013, 11:04:48 »
Хотя вся программа длинная и сложная, кусок работающий с сокетами простой и короткий:
Открываю
Отправляю запрос
Цикл пока не получен конец данных или не истекло время
Закрываю
Но программа его только закрывает, а не уничтожает. И он еще некоторое время продолжает оставаться в запасе (для входящих соединений это точно так, про исходящие незнаю, но вероятно также). Это время можно уменьшать, но нежелательно. А вот есть ли другой способ ускорения закрытия таких сокетов я не нашел. К счастью в моем случае рост числа таких сокет прекратился примерно на 1500, что в принципе не смертельно (хотя без увеличения лимита было не обойтись)
 

Теги:
     

    Все слишком крупное

    Автор AlekseyDebian

    Ответов: 2
    Просмотров: 918
    Последний ответ 16 Июля 2018, 08:30:17
    от Walter_322
    [Решено]Слишком длинное имя файла,не копирует некоторые файлы веб страниц из Win

    Автор Pacman

    Ответов: 1
    Просмотров: 2859
    Последний ответ 27 Апреля 2016, 07:37:46
    от endru
    Не устанавливается Novo Builder из-за слишком новой библиотеки

    Автор Сёмин

    Ответов: 9
    Просмотров: 2306
    Последний ответ 26 Декабря 2016, 11:58:19
    от AndGaz