[FUG-BR] Utilização de SWAP no FreeBSD 64bits proxy squid

Saul Figueiredo saulfelipecf em gmail.com
Quinta Fevereiro 2 10:55:56 BRST 2012


Em 2 de fevereiro de 2012 10:31, Marcelo Gondim
<gondim em bsdinfo.com.br> escreveu:
> Em 02/02/2012 10:04, Saul Figueiredo escreveu:
>> Olá a todos,
>>
>> Essa é minha primeira participação na lista, espero poder contribuir
>> muito com essa comunidade, mais com soluções do que com problemas
>> espero.
>>
>> Tenho alguns servidores proxy onde trabalho, todos FreeBSD. Observei
>> que todas as maquinas estavam rodando o FreeBSD 8.2 i386 (versão
>> 32bits) e que uma delas, uma maquina Dell, tinha um processador que da
>> suporte a sistemas 64bits.
>>
>> Eu estava tendo alguns problemas de memoria com a máquina,  cerca de 6
>> mil usuários utilizam aquela maquina como proxy (a carga é balanceada
>> entre os 3), e as vezes o squid simplesmente reiniciava do nada.
>> Pesquisei um pouco e vi que meu problema era memoria: Eu utilizo um
>> CacheMem 3072 MB e a maquina reconhecia 3254 MB de RAM, O sistema
>
> Saul o uso do CacheMem não é como você está colocando, existe uma
> formula para isso. As pessoas costumam confundir isso e aí socam valores
> altos no CacheMem.
> Inclusive está relacionado com o cache_dirs. Abaixo a recomendação do
> próprio pessoal do Squid:
>
>
>    How much memory do I need in my Squid server?
>
> As a rule of thumb on Squid uses approximately 10 MB of RAM per GB of
> the total of all cache_dirs (more on 64 bit servers such as Alpha), plus
> your cache_mem setting and about an additional 10-20MB. It is
> recommended to have at least twice this amount of physical RAM available
> on your Squid server. For a more detailed discussion on Squid's memory
> usage see the sections above.
>
> The recommended extra RAM besides what is used by Squid is used by the
> operating system to improve disk I/O performance and by other
> applications or services running on the server. This will be true even
> of a server which runs Squid as the only tcp service, since there is a
> minimum level of memory needed for process management, logging, and
> other OS level routines.
>
> If you have a low memory server, and a large disk, then you will not
> necessarily be able to use all the disk space, since as the cache fills
> the memory available will be insufficient, forcing Squid to swap out
> memory and affecting performance. A very large cache_dir total and
> insufficient physical RAM + Swap could cause Squid to stop functioning
> completely. The solution for larger caches is to get more physical RAM;
> allocating more to Squid via cache_mem will not help.
>
> Ex: vamos dizer que você tenha no cache_dirs definido 100G de espaço.
> Logo em sistemas 32bits squid usa uns 10Mb por giga em 64bits uns 16Mb
> por giga. Vamos dizer que no seu cache_mem esteja com 256M logo a
> fórmula seria algo assim:
>
> - 100Gb de espaço no cache_dirs
> - 10Mb por cada giga dos 100Gb do cache_dirs em sistemas 32bits, em
> 64bits eu colocaria 16Mb por cada giga.
> - 256Mb de cache_mem
> - 20Mb adicional sugerido para o cálculo.
>
> Conta:
>
> 100 * 10 = 1000Mb + 256M + 20M = 1276Mb  onde vc deveria ter de ram pelo
> menos o dobro desse valor, ou seja, você teria que ter na máquina 2552Mb.
>
> Repare que se você aumenta um valor o outro também é ajustado e eles são
> interligados.
>
>
>
>> rodava apertado com pouco menos de 200MB de RAM e quando a carga do
>> servdor subia, derrubava o squid e o inicializava novamente.
>>
>> Percebi que era ora de atualizar a memoria deste servidor. Enquanto as
>> memorias eram emcomendadas na dell (+4GB) , peguei este servidor e
>> instalei um FreeBSD 8.2 só que 64 Bits, ao fim da instalação, a
>> maquina reconheceu os 4GB de RAM.
>>
>> Vejam a configuração atual:
>>
>> proxy4# muse -m
>> kvm_open: kvm_nlist: No such file or directory
>> kvm_open: kvm_nlist: No such file or directory
>> Active:     2840.688 MB
>> Inactive:    341.574 MB
>> Wired:       542.820 MB
>> Reserved:      5.324 MB
>> Cache:       111.945 MB
>> Kernel:        0.133 MB
>> Interrupt:     0.008 MB
>> Buffer:      417.938 MB
>>
>> Total:      3939.402 MB
>> Free:        101.762 MB
>>
>> Swap:      8192MB
>>
>> -------------------------------------------------
>>
>> proxy4# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
>> hw.machine: amd64
>> hw.model: Intel(R) Xeon(R) CPU            5130  @ 2.00GHz
>> hw.ncpu: 4
>> hw.machine_arch: amd64
>>
>> --------------------------------------------------
>>
>> proxy4# uname -a
>> FreeBSD proxy4 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51
>> UTC 2011     root em mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
>> amd64
>>
>> ---------------------------------------------------
>>
>> Agora continuo usando 3072 MB de CacheMem para o squid, e sobra um
>> pouco mais de memoria para o sisetma em sí utilizar.
>>
>> Porem venho notado algumas coisas, que achei bem estranho:
>>
>> 1 - Quando faço alguma alteração no squid, e dou um squid -k
>> reconfigure demora cerca de 3 a 4 minutos para o squid compilar e
>> voltar a navegar, o que não acontecia quando eu tinha a versão 32
>> bits;
>>
>> 2 - A Utilização da SWAP passa a ser frequente agora. Antes no FreeBSD
>> 32bits, mesmo com falta de memoria, ele não usava sequer 100MB de
>> swap, já hoje, ele utiliza mais de 50% da partição de swap e olha que
>> eu tenho 8192MB de Swap.
>> Vejam no link da imagem a baixo o como fica o meu HTOP:
>> http://illuminaticorp.org/Util_swap.jpg
>>
>> Isso é normal ?
>>
>>
>>
>> --
>>
>> "Deve-se aprender sempre, até mesmo com um inimigo."
>> (Isaac Newton)
>>
>> Atenciosamente,
>> Saul Figueiredo
>> Analista FreeBSD/Linux
>> Linux Professional Institute Certification Level 1
>> Linux Professional Institute Certification Level 2
>> -------------------------
>> Histórico: http://www.fug.com.br/historico/html/freebsd/
>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>>
>
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



Marcelo,
Obrigado pela resposta.
Eu não conhecia muito bem a formula obrigado por envia-la.

antes , quando eu montei esse servidor pela primeira vez, eu colocava
um cache_mem de 255 MB com um cache dir de 19GB.

e ai, quando colocava a maquina em produção, quando atingia um certo
numero de conexões 7000 conexões, o squid restartava sozinho. Daí fui
alterando para cima o valor até parar, até 2048 MB, que foi quando
parou, aí então achei que quanto mais, melhor.

E essa demora para voltar do squid -k reconfigure? antes de formatar
era tão rapido...

Segue o meu squid.conf, substituí meu dominio pela palavra dominio.

-----V

http_port 3128

visible_hostname proxy4.servidor.dominio

cache_mem 3072 MB
cache_dir ufs /sarg/cache/ 19000 16 256
coredump_dir /sarg

access_log /sarg/logs/access.log
cache_log /sarg/logs/cache.log
cache_store_log none
logfile_rotate 15
cache_mgr postmaster em dominio.com.br
error_directory /usr/local/etc/squid/errors/pt-br


#Faz o balanceamento nos 2 webshields
cache_peer 200.216.236.2 parent 8080 0 no-digest no-query round-robin weight=1
cache_peer 200.216.236.36 parent 8080 0 no-digest no-query round-robin weight=1

#Faz o balanceamento de autenticacao nos 2 ADs
auth_param ntlm program /usr/local/libexec/squid/ntlm_smb_lm_auth -b
dominio/servidor02 dominio/servidor01
auth_param ntlm children 100
auth_param ntlm keep_alive off
authenticate_ip_ttl 3600 seconds

#auth_param basic program /usr/local/libexec/squid/ntlm_smb_lm_auth
dominio\\servidor02
auth_param basic program /usr/local/libexec/squid/ntlm_smb_lm_auth -b
dominio/servidor02 dominio/servidor01
auth_param basic children 2

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

#Regras padroes de seguranca
acl all src
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563  2096
acl Safe_ports port 80 81 82 84 21 443 563 4443 70 210 1025-65535 280
488 591 777 2096
acl portas port 7777 8080 8888 8000 1041 4500 8686 1521 1630 2631 5297 10038
acl CONNECT method CONNECT
acl senha proxy_auth REQUIRED

acl rede_servidor src 10.0.0.0/8
acl experti src 192.168.5.0/27
acl gmail url_regex -i "/usr/local/etc/squid/regras/gmail.txt"
acl usuarios_negados proxy_auth -i
"/usr/local/etc/squid/regras/usuarios_negados.txt"
acl ips_dst_liberados dst "/usr/local/etc/squid/regras/ips_dst_liberados.txt"
acl dominio src "/usr/local/etc/squid/regras/listaip.txt"
acl ips_sem_auth src "/usr/local/etc/squid/regras/ips_sem_auth.txt"
acl acesso_sem_auth url_regex -i
"/usr/local/etc/squid/regras/acesso_sem_auth.txt"
acl twitter url_regex -i "/usr/local/etc/squid/regras/twitter.txt"
acl liberados dstdomain "/usr/local/etc/squid/regras/liberados.txt"
acl google dstdomain "/usr/local/etc/squid/regras/dominio_google.txt"
acl lib_google src "/usr/local/etc/squid/regras/lib_google.txt"
acl quiosque dstdomain "/usr/local/etc/squid/regras/dominio_autoatendimento.txt"
acl autoatendimento  src "/usr/local/etc/squid/regras/autoatendimento.txt"
acl bloqueados url_regex -i "/usr/local/etc/squid/regras/bloqueados.txt"
acl block_195 src "/usr/local/etc/squid/regras/block_195.txt"
acl permitidos_direct url_regex -i
"/usr/local/etc/squid/regras/permitidos_direct.txt"
acl urls_msn url_regex -i "/usr/local/etc/squid/regras/urls_msn.txt"
acl ips_msn src "/usr/local/etc/squid/regras/ips_msn.txt"
acl servidores src "/usr/local/etc/squid/regras/servidores.txt"
acl downloads_bloqueados urlpath_regex
"/usr/local/etc/squid/regras/downloads_bloqueados.txt"


http_access allow acesso_sem_auth
http_access deny manager !localhost
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports

http_access deny bloqueados
http_access deny downloads_bloqueados
http_access deny block_195

http_access allow liberados
http_access allow servidores
http_access allow dominio permitidos_direct
#http_access allow gmail
http_access allow ips_msn urls_msn
http_access allow twitter
http_access allow rede_servidor ips_dst_liberados
http_access allow lib_google google
http_access allow autoatendimento quiosque
http_access deny usuarios_negados
http_access allow dominio senha
#http_access allow dominio
http_access deny all

miss_access allow rede_servidor
miss_access allow experti
miss_access deny all

always_direct allow permitidos_direct

always_direct allow SSL_ports
never_direct allow all

http_reply_access allow all
icp_access allow all





-- 
"Deve-se aprender sempre, até mesmo com um inimigo."
(Isaac Newton)

Atenciosamente,
Saul Figueiredo
Analista FreeBSD/Linux
Linux Professional Institute Certification Level 1
Linux Professional Institute Certification Level 2
saulfelipecf em gmail.com
saul-felipe em hotmail.com

Cel.: (31) 9647-7859
Skype: saulfelipe


Mais detalhes sobre a lista de discussão freebsd