{"id":56,"date":"2010-07-26T15:39:40","date_gmt":"2010-07-26T18:39:40","guid":{"rendered":"http:\/\/blog.digavoip.com.br\/2010\/07\/26\/squid-9-parte-mais-detalhes-sobre-a-configuracao-dos-caches\/"},"modified":"2010-07-26T15:39:40","modified_gmt":"2010-07-26T18:39:40","slug":"squid-9-parte-mais-detalhes-sobre-a-configuracao-dos-caches","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=56","title":{"rendered":"Squid &#8211; 9 parte &#8211; Mais detalhes sobre a configura\u00e7\u00e3o dos caches"},"content":{"rendered":"<p>Cr\u00e9ditos:  Carlos E. Morimoto<\/p>\n<p>A configura\u00e7\u00e3o dos caches \u00e9 o par\u00e2metro da configura\u00e7\u00e3o que afeta mais diretamente o desempenho do servidor proxy e por isso deve ser sempre definida com cuidado em qualquer servidor que ir\u00e1 atender a um grande volume de usu\u00e1rios. Embora a configura\u00e7\u00e3o pare\u00e7a simples, ela na verdade esconde diversos detalhes pouco intuitivos.<br \/>\nComo comentei a pouco, em um servidor de rede local que atende um pequeno volume de clientes, voc\u00ea pode reservar apenas 32 ou 64 MB de mem\u00f3ria RAM para o cache do Squid (de forma que ele n\u00e3o consuma toda a mem\u00f3ria do servidor, prejudicando seu desempenho em outras tarefas) e, em um servidor dedicado para uma rede de maior porte voc\u00ea pode reservar at\u00e9 1\/3 da mem\u00f3ria total do servidor. Voc\u00ea deve ter se perguntado por que reservar apenas 1\/3 da mem\u00f3ria, se a fun\u00e7\u00e3o do servidor ser\u00e1 rodar apenas o proxy. Porque n\u00e3o reservar logo toda a mem\u00f3ria para o Squid?<br \/>\nA resposta \u00e9 que al\u00e9m da RAM reservada ao cache em mem\u00f3ria, o Squid precisa de mem\u00f3ria RAM para diversas outras tarefas, incluindo o gerenciamento das conex\u00f5es e armazenamento da metadata dos arquivos armazenados no cache em disco, sem falar da mem\u00f3ria RAM consumida pelo sistema operacional para fazer cache de disco e outras atividades. Reservando muita mem\u00f3ria para o cache, o sistema \u00e9 obrigado a utilizar mem\u00f3ria swap, o que acaba reduzindo o desempenho em vez de aumentar.<br \/>\nEm uma pequena rede, raramente o desempenho do HD ser\u00e1 um gargalo, j\u00e1 que o proxy precisar\u00e1 atender a um pequeno volume de requisi\u00e7\u00f5es. Entretanto, em uma grande rede, com mais do que 100 ou 200 clientes o desempenho do proxy \u00e9 freq\u00fcentemente gargalado pelo volume de leituras que o HD \u00e9 capaz de realizar.<br \/>\nUma dica nesse caso \u00e9 utilizar HDs SATA (ou SCSI) com suporte a NCQ; neles a controladora pode realizar leituras fora de ordem, levando em conta a posi\u00e7\u00e3o dos arquivos nos discos magn\u00e9ticos. Isso faz com que eles sejam capazes de realizar um volume de leituras de pequenos arquivos muito maior do que HDs IDE e HDs SATA sem NCQ (em algumas situa\u00e7\u00f5es espec\u00edficas, at\u00e9 duas vezes mais), o que melhora assustadoramente o desempenho em servidores proxy. Verifique tamb\u00e9m a possibilidade de adicionar mais mem\u00f3ria RAM ao servidor, j\u00e1 que com um cache maior na mem\u00f3ria RAM, menos arquivos precisar\u00e3o ser lidos a partir do HD.<br \/>\nOutra dica \u00e9 que voc\u00ea pode reduzir bastante o volume de opera\u00e7\u00f5es de acesso a disco fazendo com que o cache despreze arquivos muito pequenos (menores do que 2 KB, por exemplo) atrav\u00e9s da op\u00e7\u00e3o &#8220;minimum_object_size&#8221;, como em:<br \/>\nmaximum_object_size 512 MB<br \/>\nminimum_object_size 2 KB<br \/>\nIsso faz com que pequenas imagens e outros tipos de arquivos muito pequenos, usados em profus\u00e3o em muitas p\u00e1ginas web sejam simplesmente baixados novamente a cada acesso, em vez de precisarem ser lidos no cache do HD. Como os arquivos s\u00e3o muito pequenos, o aumento no uso do link n\u00e3o deve ser consider\u00e1vel.<br \/>\nContinuando, se voc\u00ea precisar alterar a localiza\u00e7\u00e3o da pasta do cache na linha &#8220;cache_dir&#8221; (para coloc\u00e1-lo em uma pasta em uma parti\u00e7\u00e3o separada, por exemplo), voc\u00ea vai logo perceber que o Squid deixar\u00e1 de inicializar, acusando um erro de permiss\u00e3o no diret\u00f3rio do cache, como nesse exemplo:<br \/>\nRestarting Squid HTTP proxy: squid* Creating squid spool directory structure<br \/>\n2008\/06\/31 16:35:46| Creating Swap Directories<br \/>\nFATAL: Failed to make swap directory \/mnt\/sda2\/squid\/00: (13) Permission denied<br \/>\nSquid Cache (Version 2.6.STABLE5): Terminated abnormally.<br \/>\nCPU Usage: 0.000 seconds = 0.000 user + 0.000 sys<br \/>\nMaximum Resident Size: 0 KB<br \/>\nPage faults with physical i\/o: 0<\/p>\n<p>Para solucionar o problema, pare o Squid, ajuste as permiss\u00f5es da nova pasta, de forma que a posse seja transferida para o usu\u00e1rio &#8220;proxy&#8221; e o grupo &#8220;proxy&#8221; (usados pelo Squid) e, para concluir, execute o comando &#8220;squid -z&#8221;, que faz com que ele reformate o diret\u00f3rio do cache, criando a estrutura apropriada:<br \/>\n# \/etc\/init.d\/squid stop<br \/>\n# chown -R proxy.proxy \/mnt\/sda2\/squid<br \/>\n# squid -z<br \/>\n# \/etc\/init.d\/squid start<br \/>\nEm vers\u00f5es antigas do Squid voc\u00ea ficava limitado a um \u00fanico diret\u00f3rio de cache, de forma que a \u00fanica forma de adicionar uma nova parti\u00e7\u00e3o era realmente movendo o cache para ela. Nas vers\u00f5es atuais (desde o Squid 2.0) existe a op\u00e7\u00e3o de simplesmente adicionar novas linhas &#8220;cache_dir&#8221; na configura\u00e7\u00e3o, sem apagar as antigas. Isso permite que voc\u00ea simplesmente adicione novas pastas e parti\u00e7\u00f5es ao cache, mantendo as antigas, como em:<br \/>\ncache_dir ufs \/var\/spool\/squid 2048 16 256<br \/>\ncache_dir ufs \/mnt\/sda2\/squid 5120 16 256<br \/>\ncache_dir ufs \/mnt\/sda3\/squid 10240 16 256<br \/>\nN\u00e3o esque\u00e7a de que, ao adicionar uma nova pasta, voc\u00ea deve parar o proxy, ajustar as permiss\u00f5es de acesso e rodar o comando &#8220;squid -z&#8221; para que o Squid crie as estruturas necess\u00e1rias, como no exemplo anterior.<br \/>\nNote que, mesmo ao usar uma parti\u00e7\u00e3o separada s\u00f3 para o cache, voc\u00ea n\u00e3o deve reservar mais do que 80% do espa\u00e7o total da parti\u00e7\u00e3o para ele, pois o Squid precisa de um pouco de espa\u00e7o extra para manter um arquivo com o status do cache e para opera\u00e7\u00f5es de organiza\u00e7\u00e3o em geral, sem falar que \u00e9 importante manter uma pequena percentagem de espa\u00e7o livre na parti\u00e7\u00e3o para reduzir a fragmenta\u00e7\u00e3o. Se voc\u00ea tiver uma parti\u00e7\u00e3o de 10 GB e usar na configura\u00e7\u00e3o &#8220;cache_dir ufs \/var\/spool\/squid 10480 16 256&#8221; (reservando exatamente 10 GB para o cache), o Squid vai travar depois de algum tempo, por falta de espa\u00e7o em disco. O correto no caso seria usar &#8220;cache_dir ufs \/var\/spool\/squid 8192 16 256&#8221;, reservando 8 GB em vez de 10.<br \/>\nUma observa\u00e7\u00e3o final \u00e9 que o volume de espa\u00e7o em disco reservado ao cache tem efeito sobre o volume de mem\u00f3ria RAM consumido pelo Squid (em adi\u00e7\u00e3o ao cache na mem\u00f3ria), pois o Squid precisa manter carregadas informa\u00e7\u00f5es sobre os arquivos armazenados no cache para localiz\u00e1-los de forma eficiente.<br \/>\nDe uma forma geral, para cada gigabyte de espa\u00e7o em disco reservado para o cache, o Squid consome cerca de 10 MB a mais de mem\u00f3ria RAM (o valor real varia de acordo com o tamanho dos arquivos armazenados no cache), de forma que um cache de 20 GB, por exemplo, aumenta o volume de mem\u00f3ria usado pelo Squid em aproximadamente 200 MB.<br \/>\nDevido a isso, n\u00e3o \u00e9 recomend\u00e1vel usar um cache em disco muito grande, a menos que o servidor realmente possua muita mem\u00f3ria dispon\u00edvel e precise atender a um volume muito grande de clientes. Para um servidor de rede local, um cache de 5 ou 10 GB j\u00e1 \u00e9 mais do que suficiente. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9ditos: Carlos E. Morimoto A configura\u00e7\u00e3o dos caches \u00e9 o par\u00e2metro da configura\u00e7\u00e3o que afeta mais diretamente o desempenho do servidor proxy e por isso deve ser sempre definida com cuidado em qualquer servidor que ir\u00e1 atender a um grande volume de usu\u00e1rios. Embora a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/56"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=56"}],"version-history":[{"count":0,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/56\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=56"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=56"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=56"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}