Вечно заканчивающаяся ОЗУ - SQUID

Автор mistentiq, 04 декабря 2018, 16:17:31

« назад - далее »

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

mistentiq

Доброго дня.
Имеется - Debian 9, Squid Cache: Version 3.5.23 + lightsquid + ntlm, и всё это барахло вращается на Hyper-V (пакет интеграции установлен).
В течении дня полностью забиваются 4 Гб оперативной памяти, каждые 12 часов приходится очищать (* 8,20 * * * /usr/sbin/squid squid -k rotate), а данный процесс занимает некоторое количество времени в которое интернет не работает (предприятие должно работать 24/7).

###################################################
#                 Аутентификация                  #
###################################################
auth_param ntlm program /usr/bin/ntlm_auth
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 80 startup=18 idle=9
auth_param ntlm keep_alive on
external_acl_type nt_group %LOGIN /usr/lib/squid/ext_wbinfo_group_acl
authenticate_ttl 20 minutes

# Авторизация требуется ОБЯЗАТЕЛЬНО, без нее никого не пускать
acl nt_group proxy_auth REQUIRED


                   Кэш
###################################################
# Директория с кэшем
cache_dir ufs /var/cache/squid 10249 16 256
# Параметры кэширования
refresh_pattern -i \.(ico|jpg|jpeg|png|bmp|tif|tiff|svg|png|gif|psd|eps)$ 4320 98% 5200
refresh_pattern -i \.(htm|html|js|css|txt)$ 4320 98% 5200
refresh_pattern -i \.(avi|ogg|mpg|mp4|mpeg|vob|mov|wmv|mp3|mid|rm|wma|asf|wav|swf|flv|x-flv)$ 4320 98% 5200
refresh_pattern -i \.(doc|docx|xls|xlsx|pdf)$ 4320 98% 5200
refresh_pattern -i \.(zip|7z|gz|bz|bz2|rar|tar|gzip)$ 4320 98% 5200
refresh_pattern -i \.(deb|rpm|exe|msi|bin)$ 4800 98% 10080
#refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern .       0   20% 4320

# Сколько выделить памяти
cache_mem 192 MB
cache_swap_low 70
cache_swap_high 75
maximum_object_size 71680 KB
maximum_object_size_in_memory 256 KB
minimum_object_size 4 KB


Кэш отключать полностью пробовал, не помогает. Высокоактивное гугление так-же не принесло плодов.

Все необходимые конфиги, скриншоты и пр. с удовольствием скину по необходимости.

endru

А где доказательства, что проблемы с ОЗУ вызваны именно squid?
Цитата: mistentiq от 04 декабря 2018, 16:17:31каждые 12 часов приходится очищать (* 8,20 * * * /usr/sbin/squid squid -k rotate)
Что очищать? что именно делает эта команда?

mistentiq

#2
Выполняет ротацию логов на сколько мне известно, а попутно очищает ОЗУ.
#endru Вы не в курсе, или пытаетесь натолкнуть меня на какую-то мысль?

А так, если остановить процесс squid то память освобождается и перестаёт забиваться.

endru

Цитата: mistentiq от 05 декабря 2018, 08:18:45А так, если остановить процесс squid то память освобождается и перестаёт забиваться.
Каким образом это все мониторилось? И где эта информация? Мы должны сами догадаться сколько памяти у вас жрет squid, а сколько остальные процессы?

Цитата: mistentiq от 04 декабря 2018, 16:17:31cache_mem 192 MB
Цитата: mistentiq от 04 декабря 2018, 16:17:31auth_param ntlm children 80
Кто это вообще настраивал? Перед тем как менять значения по умолчанию, нужно хотя бы читать что это такое, и на что влияет.

mistentiq

#4
Цитата: endru от 05 декабря 2018, 10:50:32Кто это вообще настраивал?
Так исторически сложилось, ещё до моего прихода. В данный момент кэширование выключено и на эти настройки можно не обращать внимания.
Не имею возможности впихнуть скрин с забитой на 100% памятью (ибо всё упадёт к чертям, а так нельзя) но вот что есть на данный момент:
Открыть содержимое (спойлер)
[attach=1,msg110047]
[свернуть]
сейчас забито 470Мб, к вечеру дойдёт до 3.5 Гб и в 20:00 будет выполнена ротация логов.
Но примера ради запущу её (ротацию) сейчас и после выполнения можно будет увидеть что потребление памяти уменьшилось.
Открыть содержимое (спойлер)
[attach=2,msg110047] 
[свернуть]


Какими ещё способами я могу получить необходимые Вам данные?

endru

Цитата: mistentiq от 05 декабря 2018, 11:29:29Какими ещё способами я могу получить необходимые Вам данные?
Ротация логов, как и любой другой способ остановки squid, закрывает все соединения (явно не гуглил) и естественно свободной памяти станет больше! Только это полностью бесполезное занятие.

Полный конфиг - данные в момент проблемы. Поменял конфиг - что поменял, какой результат получил.
Ставь заббикс на машину, и пусть графики рисует, интересуют следующие графики: "CPU utilization", "Memory Usage", "Network Traffic" по всем интерфейсам. И все эти данные за 24 часа приводишь в виде картинок.

mistentiq

#6
Конфиг:
Открыть содержимое (спойлер)
###################################################
#               Разрешённые порты                 #
###################################################
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

###################################################
#               Общие резрешения                  #
###################################################
# Разрешаем indexp
acl indexp dstdomain indexp.ru
http_access allow indexp
always_direct allow indexp

# Разрешаем доступ к мелкомягким
acl Microsoft dstdomain .microsoft.com
http_access allow Microsoft
always_direct allow Microsoft
acl Live dstdomain .live.com
http_access allow Live
always_direct allow Live

# Разрешить к локальным поддоменам без авторизации
acl RuPostDomains dstdomain .rupost.ru
http_access allow RuPostDomains
always_direct allow RuPostDomains

# Разрешить к ресурсам в локальной сети без авторизации
acl LocalResources dst 10.130.4.0/22
# help меня держат тут насильно и заставляют работать за еду
http_access allow LocalResources
always_direct allow LocalResources

# Разрешить к АИС СМ без авторизации
acl AISSM dst 10.130.4.39
http_access allow AISSM
always_direct allow AISSM

# Разрешить портал КСУ
acl pfc dst pfc.newcontact.su
http_access allow pfc
always_direct allow pfc

# Разрешить подключения на порт 8080 для поддоменов russianpost.ru
acl RussianPost dst 10.0.0.0/8 
acl RussianPost_Port port 8080
http_access allow RussianPost RussianPost_Port
always_direct allow RussianPost RussianPost_Port

# Разрешаем локалхост
http_access allow localhost

# Only allow cachemgr access from localhost
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager

###################################################
#                  Избранные IP                   #
###################################################
acl allowed_ip src "/etc/squid/allowed_ip.txt"
http_access allow allowed_ip

###################################################
#                 Аутентификация                  #
###################################################
auth_param ntlm program /usr/bin/ntlm_auth
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 50 startup=18 idle=8
auth_param ntlm keep_alive on
external_acl_type nt_group %LOGIN /usr/lib/squid/ext_wbinfo_group_acl
authenticate_ttl 20 minutes

# Авторизация требуется ОБЯЗАТЕЛЬНО, без нее никого не пускать
acl nt_group proxy_auth REQUIRED

###################################################
#                      Списки                     #
###################################################
acl blacklist dstdomain -i "/etc/squid/black_list/Blacklist.acl" # сюда стоит переодически добавлять нехорошие URL$
acl hardban dstdom_regex -i "/etc/squid/black_list/Hardban.acl" # Для Операторов
acl social dstdomain -i "/etc/squid/black_list/Social.acl" # Соцсети
acl job dstdomain -i "/etc/squid/black_list/Job.acl" # Сайты с работой

# Запрет на скачивание файлов с определённым разрешением
acl blockfiles urlpath_regex -i "/etc/squid/black_list/Blockfiles.acl"
acl blockmedia urlpath_regex -i "/etc/squid/black_list/Blockmediafiles.acl"

###################################################
#                  Группы доступа                 #
###################################################
acl Unlimited external nt_group R78-ASC-Proxy-IT #Группа без ограничений и логов
acl Full external nt_group R78-ASC-Proxy-Techniki #Чёрный список + логи
acl Lead external nt_group R78-ASC-Proxy-Lead #Чёрный список + логи
acl LeadVIP external nt_group R78-ACS-Proxy-Lead-VIP #Правила по спец запросу
acl Users external nt_group R78-ASC-Proxy-AUP #Чёрный список + логи + ограничение трафика 5Гб(если я допру как при$
acl Low external nt_group R78-ASC-Proxy-Operators #Операторы
acl Kadry external nt_group R78-ASC-Proxy-OK #Для отдела кадров, можно на HH.ru Job.ru...
###################################################
#                  Права для групп                #
###################################################
# Для Группы Low - Операторы
http_access deny Low blacklist
http_access deny Low blockfiles
http_access deny Low blockmedia
http_access deny Low hardban
#http_access deny Low adult
http_access deny Low social
http_access deny Low job
http_access allow Low
# Для группы АУП
http_access deny Users blacklist
http_access deny Users blockfiles
http_access deny Users blockmedia
http_access deny Users social
#http_access deny Users adult
http_access deny Users job
http_access allow Users
# Для группы Руководителей
http_access deny Lead blacklist
http_access deny Lead blockfiles
http_access deny Lead blockmedia
#http_access deny Lead adult
http_access deny Lead social
http_access deny Lead job
http_access allow Lead
# Для группы Техников
http_access allow Full
# Без ограничений
http_access allow Unlimited
# Для группы Отдела Кадров
http_access deny Kadry blacklist
http_access deny Kadry blockfiles
http_access deny Kadry blockmedia
http_access deny Kadry social
#http_access deny Kadry adult
http_access allow Kadry
# ВИПЫ
http_access allow LeadVIP

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

###################################################
#             Ограничитель скорости               #
###################################################

delay_pools 3
delay_class 1 1
delay_class 2 1
delay_class 3 1

delay_parameters 1 -1/-1 -1/-1
delay_parameters 2 3125000/3125000
delay_parameters 3 1875000/1875000

delay_access 1 allow Unlimited
delay_access 1 allow Full
delay_access 1 allow Lead
delay_access 1 allow LeadVIP
delay_access 1 allow Kadry
delay_access 2 allow Users
delay_access 3 allow Low

###################################################
#                   Кэш и Ко                      #
###################################################
# Директория с кэшем
cache_dir ufs /var/cache/squid 10249 16 256
# Параметры кэширования
#refresh_pattern -i \.(ico|jpg|jpeg|png|bmp|tif|tiff|svg|png|gif|psd|eps)$ 4320 98% 5200
#refresh_pattern -i \.(htm|html|js|css|txt)$ 4320 98% 5200
#refresh_pattern -i \.(avi|ogg|mpg|mp4|mpeg|vob|mov|wmv|mp3|mid|rm|wma|asf|wav|swf|flv|x-flv)$ 4320 98% 5200
#refresh_pattern -i \.(doc|docx|xls|xlsx|pdf)$ 4320 98% 5200
#refresh_pattern -i \.(zip|7z|gz|bz|bz2|rar|tar|gzip)$ 4320 98% 5200
#refresh_pattern -i \.(deb|rpm|exe|msi|bin)$ 4800 98% 10080
#refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
#refresh_pattern .       0   20% 4320

# Сколько выделить памяти
#cache_mem 192 MB
#cache_swap_low 70
#cache_swap_high 75
#maximum_object_size 71680 KB
#maximum_object_size_in_memory 256 KB
#minimum_object_size 4 KB

cache deny all
coredump_dir /var/log/squid
logfile_rotate 0

###################################################
#            Дополнительная информация            #
###################################################
# Имя прокси
visible_hostname PROXYX.main.ru
# Адрес администратора прокси
cache_mgr
cachemgr_passwd root all
# Повторить неудавшееся соединение
connect_retries 1
# как долго ожидать TCP соединения с запрошенным сервером
connect_timeout 20 second
# Предпочитать IP4 адреса
dns_v4_first on
dns_nameservers 10.46.0.142 10.46.0.141 10.130.4.141 10.7.21.11 10.7.21.12
[свернуть]
Сделал меньше дочерних процессов хэлпера (было 80 стало 50), стало легче, так-же убрал кэширование абы не грешить на него больше.
Ради эксперимента вчера пробовал на сутки отключать лайтсквид и апач - чтобы не мешались.
Так-же ради сбора статистики заббиксом, отключил в кроне ротацию логов на 8 утра, как забьётся посильнее скину лог заббикса и скрин htop ещё одни на всякий...

mistentiq

Собственно скрины с заббикса:
Открыть содержимое (спойлер)
[attach=1]  [attach=2]  [attach=3]
[свернуть]

endru

Судя по графикам процессора - на лицо проблема с виртуализацией, уж очень много времени съедает ядро. Нужно разбираться, погугли, возможно есть пакеты которые необходимо поставить, для нормальной работы debian в hyper-v.

Трафика у тебя вообще нет (по моим меркам) можно сделать меньше количество дочерних процессов squid, и включить параметры кэширования, только cache_mem не указывать в конфиге, пусть берет значение по умолчанию.

Утечку памяти вижу, тут нужно смотреть логи. По графикам смотри где резко начинает потребляться память - ищи ошибки в логах squid примерно в это время. Если ничего нет - включай дебаг режим.

Проверяй другую виртуализацию, а чтобы не останавливать работу, можно использовать VRRP.
Открыть содержимое (спойлер)
Настраиваешь другому серверу с squid виртуальный адрес первого сервера, далее можно для теста отключить сетевой интерфейс первого сервера, весь трафик перехватит второй, если что-то будет работать не так - включил сетевой интерфейс на первом сервере - трафик перейдет на него. Время срабатывания таких переключений около 1 секунды.
[свернуть]

mistentiq

#9
Докопались до истины.
Память пожирает NTLM_auth хэлпер. Количество хэлперов уменьшил до 30.
Открыть содержимое (спойлер)
[attach=1,msg110139]  [attach=2,msg110139]
[свернуть]
Как сделать так чтобы он перестал столько жрать? Может неверно в конфигах что-то настроено?
auth_param ntlm keep_alive on <- может отключить?

З.Ы. Керберос аутентификацию сделать не могу, нет доступа к контроллеру для получения сертификатов.

endru

Цитата: mistentiq от 10 декабря 2018, 13:07:56auth_param ntlm keep_alive on <- может отключить?
Не нужно отключать.
Цитата: mistentiq от 10 декабря 2018, 13:07:56Как сделать так чтобы он перестал столько жрать?
Для начала нужно смотреть, каким образом настраивал авторизацию.

mistentiq

Конфиги:
Самба
Открыть содержимое (спойлер)
[global]
    workgroup = MAIN
    server string = R78PROXYX
    security = ads
    load printers = no
    show add printer wizard = no
    printcap name = /dev/null
    disable spoolss = yes
    log file = /var/log/samba/log.%m
    max log size = 1000
    realm = MYDOMAIN.COM
    password server = *
    local master = no
    os level = 0
    domain master = no
    preferred master = no
    domain logons = no
    dns proxy = no
    winbind refresh tickets = true
    # Добавил строки ниже. Без них не получалось найти соответствие между пользователем и его группой
    # default domain = yes' в логах Squid будет указан только пользователь без домена
#    winbind separator = »
    winbind separator = +
    winbind use default domain = yes
    winbind uid = 10000-40000
    winbind gid = 10000-40000
    winbind enum users = yes
    winbind enum groups = yes
[свернуть]

krb5
Открыть содержимое (спойлер)

[libdefaults]
      default_realm = MYDOMAIN.COM
#      default_keytab_name = /etc/squid/PROXY.keytab
#      kdc_timesync = 1
#      ccache_type = 4
      forwardable = true
      proxiable = true
      v4_instance_resolve = false
      v4_name_convert = {
      host = {
               rcmd = host
               ftp = ftp
             }
              plain = {
                        something = something-else
                      }
             }
      fcc-mit-ticketflags = true
   [realms]
      MAIN.RUSSIANPOST.RU = {
               kdc = r78eskrc01.mydomain.com
               kdc = R00eskdcpdc02.mydomain.com
               admin_server = R78eskdcpdc02
               default_domain = MYDOMAIN.COM
              }
   [domain_realm]
       .main.russianpost.ru = MYDOMAIN.COM
       main.russianpost.ru = MYDOMAIN.COM
   [login]
       krb4_convert = false
       krb4_get_tickets = false
[свернуть]
Можно сказать что по мануалу от сюда делал: https://wiki.rtzra.ru/software/squid/squid-active-directory - но подшаманивал под себя и с конфигами предыдущего сквида.
Что ещё потребуется для диагностики?

endru

Цитата: mistentiq от 11 декабря 2018, 09:13:50Можно сказать что по мануалу от сюда делал: https://wiki.rtzra.ru/software/squid/squid-active-directory
Инструкция устарела лет на 5. Попробуй настроить по этой ссылке.

mistentiq

Цитата: endru от 11 декабря 2018, 11:50:19Попробуй настроить по этой ссылке.
Не очень то сильно и поменялись конфиги за 5 лет, пару дополнений внёс из предложенной Вами статьи но особых результатов нет.
Настроил крон на ротацию логов 2 раза в сутки, пока живём так...

endru

Цитата: mistentiq от 24 декабря 2018, 08:52:21Не очень то сильно и поменялись конфиги за 5 лет
ну как сказать не сильно, есть строки в конфигах которые не работают в новой версии. конечный результат какой получился по самбе? Все рекомендации из ссылки выполнены? Все проверки пройдены?
Цитата: mistentiq от 24 декабря 2018, 08:52:21Настроил крон на ротацию логов 2 раза в сутки, пока живём так...
это бессмысленная трата ресурсов дисковой подсистемы. обычный перезапуск тоже поможет! прочитай про параметр shutdown_lifetime в squid, он влияет на скорость перезапуска.
Цитата: endru от 11 декабря 2018, 05:55:12Цитата: mistentiq от 10 Декабрь 2018, 17:07:56
auth_param ntlm keep_alive on <- может отключить?
Уже можно попробовать отключить.

Цитата: endru от 07 декабря 2018, 05:26:07Утечку памяти вижу, тут нужно смотреть логи. По графикам смотри где резко начинает потребляться память - ищи ошибки в логах squid примерно в это время. Если ничего нет - включай дебаг режим.
Не вижу логов до сих пор.