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
В ебилде
В ебилде
этого реально мало ? Ну не верю я :(
Но если так хочется :
--- /usr/portage/net-proxy/squid/squid-3.0.18-r1.ebuild 2009-08-31 03:12:30.000000000 +0300 +++ squid-3.0.18-r10.ebuild 2009-09-17 00:14:43.866830803 +0300 @@ -69,6 +69,9 @@ } src_configure() { + + : ${SQUID_FILEDESCPTOR:=8192} + local basic_modules="getpwnam,NCSA,MSNT" use samba && basic_modules="SMB,multi-domain-NTLM,${basic_modules}" use ldap && basic_modules="LDAP,${basic_modules}" @@ -129,7 +132,7 @@ --enable-referer-log \ --enable-arp-acl \ --with-large-files \ - --with-filedescriptors=8192 \ + --with-filedescriptors=${SQUID_FILEDESCPTOR} \ $(use_enable caps) \ $(use_enable snmp) \ $(use_enable ssl) \Сильно не пинать, сделано "на коленке " за 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 написал(а):В ебилде
Этого не мало. Но! Почему сквид на запрос
# squidclient -h 172.16.90.7 mgr:info | grep -i file File descriptor usage for squid: Maximum number of file descriptors: 1024 Largest file desc currently in use: 257 Number of file desc currently in use: 218 Files queued for open: 0 Available number of file descriptors: 806 Reserved number of file descriptors: 100 Store Disk files open: 37показывает вот так? Вот что меня удивляет. Скомпилировано, даже в оригинале, с 8192 разрешёнными, а сквид только 1024 может открыть. В limits.conf, как уже выше говорилось, разрешается открывать кучу файлов. Что же не так?
Стал копаться
Стал копаться дальше.
Выяснилось опытным путём, что квота на файловые дескрипторы исчерпывалась из-за большого количества используемых ntlm-аутентификаторов. Внимательные наблюдения за
mgr:ntlmauthenticatorпоказали, что реально задействовано куда меньше их, чем указано в конфиге. Почему ж тогда их количество увеличивалось? Да потому что сквид в противном случае сильно ругался на их недостачу, а потом отваливался. Вот, сейчас, когда на сервере одновременно работает 110 клиентов и скорость запросов составляет 40 запр/сек, я для эксперимента уменьшил следующие значения:Соответственно, эффект от этого не замедлил сказаться и виден постом выше. Жалобы на количество ФД пропали, но появилась опасность того, что снова будет эта непонятка с ntlm. Вот, какая нынче статистика даётся:
NTLM Authenticator Statistics: program: /usr/bin/ntlm_auth number active: 25 of 25 (0 shutting down) requests sent: 35711 replies received: 35711 queue length: 0 avg service time: 0 msec # FD PID # Requests # Deferred Requests Flags Time Offset Request 1 8 3149 2390 0 R 0.007 0 (none) 2 9 3150 832 0 R 0.000 0 (none) 3 10 3151 493 0 R 0.000 0 (none) 4 11 3152 2802 0 R 0.001 0 (none) 5 12 3153 1247 0 R 0.004 0 (none) 6 13 3154 951 0 R 0.001 0 (none) 7 14 3155 377 0 R 0.000 0 (none) 8 15 3156 172 0 R 0.002 0 (none) 9 16 3157 170 0 R 0.004 0 (none) 10 17 3158 54 0 R 0.002 0 (none) 11 18 3159 2243 0 R 0.001 0 (none) 12 19 3160 3684 0 R 0.062 0 (none) 13 20 3161 494 0 R 0.000 0 (none) 14 21 3162 9007 0 R 0.001 0 (none) 15 22 3163 2935 0 R 0.000 0 (none) 16 23 3165 336 0 R 0.007 0 (none) 17 24 3166 4235 0 0.007 0 (none) 18 25 3167 1478 0 R 0.002 0 (none) 19 26 3168 916 0 0.008 0 (none) 20 27 3169 460 0 0.007 0 (none) 21 28 3170 227 0 0.006 0 (none) 22 29 3171 78 0 0.017 0 (none) 23 30 3172 42 0 0.013 0 (none) 24 31 3173 32 0 0.009 0 (none) 25 32 3174 56 0 0.025 0 (none) Flags key: B = BUSY C = CLOSING R = RESERVED or DEFERRED S = SHUTDOWN PENDING P = PLACEHOLDERВот эти вот хелперы с флагом 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...