squid под высокой нагрузкой. [частично решено]
Добрый день.
Имеется не очень мощный сервер, на котором стоит net-proxy/squid-3.0.18-r1
. В середине дня Average HTTP requests per minute since start: 2700…3000
, а Number of clients accessing cache: 150…190
Соответственно, было замечено, что прокси не справляется с нагрузкой. Стал копаться. Первое, на что идут постоянные жалобы от сквида — это WARNING! Your cache is running out of filedescriptors
. Глянул:
File descriptor usage for squid: Maximum number of file descriptors: 1024 Largest file desc currently in use: 825 Number of file desc currently in use: 814 Files queued for open: 0 Available number of file descriptors: 210 Reserved number of file descriptors: 100 Store Disk files open: 1
и в самом деле такое есть. Иногда они заканчиваются, тогда прокси падает до рестарта. Сперва, на время разборок, увеличил всем в системе лимиты: в /etc/security/limits.conf
добавил строку
* - nofile 65535
, а в /etc/sysctl.conf
—
fs.file-max = 65535
. Позже, разумеется, эти значения будут меняться. Далее, я узнал, что
max_filedescriptorsNot yet ported from 2.7
В вики сквида написано, что
Squid 2.7+ provide a squid.conf option max_filedescriptors
Squid 3.x provide a ./configure option --with-filedescriptors=N
Получается, что решение проблемы сводится к изменению параметра при компиляции. Как средствами gentoo это изменение применить? Созданием отдельного ebuild и для него — отдельно поменять исходники? Или можно как-то в ebuild'е (отдельном, опять же) этот параметр напрямую задать и не волноваться?
Вторая проблема в том, что как мне кажется, к сквиду делается больше лишних запросов, чем реально требуется. Настроена NTLM-авторизация:
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 300 auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param basic children 100 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours
При этом в лог сквида сыпятся сообщения типа:
1253080586.956 1 172.16.91.107 TCP_DENIED/407 2651 GET http://nbimg.dt00.net/pnews/woman.ru/450553_m.jpg - NONE/- text/html 1253080587.121 142 172.16.91.107 TCP_HIT/200 3730 GET http://nbimg.dt00.net/pnews/woman.ru/450553_m.jpg USERNAME NONE/- image/jpeg
, т.е. сперва запрещается доступ, а потом разрешается. Интересно, это такая особенность работы NTLM или результат неверных настроек? Если второе, то как это побороть?
- Для комментирования войдите или зарегистрируйтесь
EXTRA_ECONF='foo-bla' emerge
EXTRA_ECONF='foo-bla' emerge squid попробуйте
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Попробовал
Попробовал
EXTRA_ECONF='--with-filedescriptors=4096' emerge -av squid
, не помогло. Как было максимум 1024, так и осталось. Перезапускал сквид, естественно.Пинайте багзиллу на предмет
Пинайте багзиллу на предмет добавления педали для этой опции конфигуре, благо есть стандартные (de facto) способы передачи юзерских значений в ебилды.
как временный хак можно юзать локальный оверлей.
П.С как пример: popa3d, mod_suphp , etc
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
squid-3.1.0.13_beta-r1.ebuild
Аналогично и в squid-3.0.19.ebuild
В ебилде
В ебилде
этого реально мало ? Ну не верю я :(
Но если так хочется :
Сильно не пинать, сделано "на коленке " за 10 минут
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga написал(а): В ебилде
Мой личный опыт показывает, что это значение задано/выбрано не просто так, и просто его увеличением дело не обойдётся, придётся крутить умолчания ядерных ограничений. Они же документированы (по крайней мере на этом уровне)... "несколько" хуже желаемого.
:wq
--
Live free or die
slepnoga написал(а):В ебилде
Этого не мало. Но! Почему сквид на запрос
показывает вот так? Вот что меня удивляет. Скомпилировано, даже в оригинале, с 8192 разрешёнными, а сквид только 1024 может открыть. В limits.conf, как уже выше говорилось, разрешается открывать кучу файлов. Что же не так?
Стал копаться
Стал копаться дальше.
Выяснилось опытным путём, что квота на файловые дескрипторы исчерпывалась из-за большого количества используемых ntlm-аутентификаторов. Внимательные наблюдения за
mgr:ntlmauthenticator
показали, что реально задействовано куда меньше их, чем указано в конфиге. Почему ж тогда их количество увеличивалось? Да потому что сквид в противном случае сильно ругался на их недостачу, а потом отваливался. Вот, сейчас, когда на сервере одновременно работает 110 клиентов и скорость запросов составляет 40 запр/сек, я для эксперимента уменьшил следующие значения:Соответственно, эффект от этого не замедлил сказаться и виден постом выше. Жалобы на количество ФД пропали, но появилась опасность того, что снова будет эта непонятка с ntlm. Вот, какая нынче статистика даётся:
Вот эти вот хелперы с флагом R с 1 по 16 висят так довольно долго, т.о. реально работают только с 17 по 25 хелперы, которые тоже то блокируются, то разблокируются. И я думаю, что когда заблокируются эти оставшиеся, тут то сквид и зажалуется. С чем такое связано может быть? Есть подозрение, что с одним из таймаутов в секции TIMEOUTS
Рытьё интернетов показало,
Рытьё интернетов показало, что эта бага с зависающими ntlm-аутентификаторами присуща squid-3.xx. Когда это понял, то решил в качестве последнего шага попробовать обновиться до 3.0.19 и оказалось, что там его исправили. Во всяком случае, зависаний ни в пятницу, ни в субботу замечено не было.
router ~ # less
router ~ # less /etc/conf.d/squid
/* вжжжик - ААААА!!! */
# Max. number of filedescriptors to use. You can increase this on a busy
# cache to a maximum of (currently) 8192 filedescriptors. Default is 1024.
SQUID_MAXFD=1024
/* вжжжик - ААААА!!! */
Вот здесь еще подкрутить надо...
Я когда-то на эти грабли наступал. В ебилде действительно 8192, но надо прописывать и тут =)
Но в моем случае надо было не сквиду дескрипторы прибавлять, а прибить злобного трояна на юзерской машине, которому хозяин сказал делать DDoS какого-то там сайта по порту 80. DoS почти получился, но не того сервера, а моего прокси. Рекомендую поставить sqstat, если еще не стоит, и посмотреть в реальном времени, что с запросами творится (squid в access.log пишет только завершенные запросы!) Ну и в cache.log тоже бывают жалобы на неправильные запросы от такого-то ip...
+
соберите сквид с поддержкой epoll погоняйте с ним...
ядро тоже должно уметь работать с epoll
there is only war...