У меня есть рабочий сервер Squid, на котором были проблемы с обслуживанием контента и сообщением о том, что на нем закончились файловые дескрипторы. Мне удалось увеличить его с 1024 (по умолчанию) до 4096, и это, похоже, устранило мои ошибки в журнале. Я все еще видел код ответа 0 и 0 байтов, полученных для некоторых вызовов, которые не были кэшированы, и это наводит меня на мысль, что в пиковом объеме (загрузочный шторм) мой счетчик файловых дескрипторов все еще слишком мал.
Я уже читал несколько сообщений, и настройку можно установить примерно на 24 КБ, 40к, а то и 70к. Поскольку это выделенный ящик squid, меня не беспокоят другие процессы / пользователи, конкурирующие за файловые дескрипторы в масштабах всей системы, но я действительно хотел бы знать, как лучше всего сделать приблизительный расчет того, сколько файловых дескрипторов я должен настроить. для ulimit -n.
В моей конфигурации у меня есть максимум 3000 клиентских TCP-подключений, максимум 3000 серверных TCP-подключений и несколько файлов журналов, которые настроены по умолчанию в конфигурации squid (cache .log, squid.log). Это так просто, как сказать, что я должен установить свой ulimit -n на 3000 + 3000 + 2 + (некоторая сумма накладных расходов)? Из-за отсутствия документации по этому вопросу я, вероятно, установлю 24k, чтобы никогда не приходилось с этим иметь дело, но я предпочитаю следовать формуле передового опыта - как и в случае с apache2, вы можете рассчитать объем памяти, необходимый для того, сколько запросов вы хотите обрабатывать одновременно.
Изменить: Забыл упомянуть, что я не записываю эти кешированные файлы в диск, они остаются в памяти. Это веб-сайт с несколькими сотнями файлов (всего <5 МБ), который является единственной страницей, которая загружается через это, поэтому я пропустил файловые дескрипторы чтения / записи на диск.
В худшем случае сценарий случая каждый запрос к серверу squid требует трех файловых дескрипторов;
Затем возникают накладные расходы, включая файлы журналов, любое межпроцессное взаимодействие, например, помощники и соединения в режиме ожидания. Итак, для грубой оценки вам понадобится три файловых дескриптора для каждого входящего TCP-соединения, а затем учесть любые накладные расходы.
В поисках дополнительной информации "передовой опыт" Nasoo не знал, как рассчитать количество открытых файлов, которые следует настроить. Я обнаружил, что существуют сложности с тем, как браузеры обрабатывают параллельную загрузку файлов, поэтому 3000 клиентов фактически используют примерно 25-30 сокетов каждый для загрузки полной веб-страницы и динамического контента. Отчасти это зависит от того, как браузеры загружаются параллельно, а также от того, как API-интерфейсы javascript обрабатывают загрузку динамического содержимого.
Поэтому, хотя я не могу точно определить правильное число без тонны дополнительного тестирования, я также наткнулся на руководство, в котором говорится эти 256 дескрипторов файлов можно настроить для каждых 4 МБ ОЗУ. Так что этого должно быть более чем достаточно, и даже половина из 8 ГБ оперативной памяти, которые у меня есть для этого компьютера, будут излишними.
http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH- Edition-v1.3 / chap6sec72.html
РЕДАКТИРОВАТЬ: Я также начал вести журнал использования файлового дескриптора в файл RRD один раз в минуту через cronjob. Это довольно простой сценарий bash, который все это регистрирует, и вы можете создавать довольно удобные графики без сервера мониторинга или чего-то еще. Если кому-то это интересно, дайте мне знать, и я выскажу суть.