Как вычислить ulimit -n (дескрипторы файлов) для выделенного сервера Squid

У меня есть рабочий сервер 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 МБ), который является единственной страницей, которая загружается через это, поэтому я пропустил файловые дескрипторы чтения / записи на диск.

3
задан 9 May 2016 в 20:53
2 ответа

В худшем случае сценарий случая каждый запрос к серверу squid требует трех файловых дескрипторов;

  1. Дескриптор для соединения на стороне клиента
  2. Другой для соединения на стороне сервера, если он не кэширован.
  3. Третий дескриптор для файла для чтения ударил или кэшировал промах.

Затем возникают накладные расходы, включая файлы журналов, любое межпроцессное взаимодействие, например, помощники и соединения в режиме ожидания. Итак, для грубой оценки вам понадобится три файловых дескриптора для каждого входящего TCP-соединения, а затем учесть любые накладные расходы.

3
ответ дан 3 December 2019 в 05:40

В поисках дополнительной информации "передовой опыт" 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, который все это регистрирует, и вы можете создавать довольно удобные графики без сервера мониторинга или чего-то еще. Если кому-то это интересно, дайте мне знать, и я выскажу суть.

2
ответ дан 3 December 2019 в 05:40

Теги

Похожие вопросы