FreeBSD + Zope/Plone, uma idéia frustrante?

O Python, Zope e Plone formam uma equipe maravilhosa na construção de pequenos, médios e grandes portais e para o gerenciamento de conteúdo, mas e quando as coisas começam a ficar lentas?

[ Hits: 8.609 ]

Por: Cleber J Santos em 09/09/2009


FreeBSD + Zope/Plone, uma idéia frustrante?



O Python, Zope e Plone formam uma equipe maravilhosa na construção de pequenos, médios e grandes portais e para o gerenciamento de conteúdo, mas e quando as coisas começam a ficar lentas?

É sempre interessante ver as pessoas reclamando que recebem mensagens de "Zope MemoryError" em seu sistema FreeBSD, seja x86 ou 64bits, e isso pode ser uma experiência muito frustante e desagradável.

Como administrador não basta apenas culpar a aplicação ou esperar neste caso que a aplicação te informe com detalhes que você precisa deixar seu sistema preparado para recebê-la.

Sou usuário e fã de Slackware por sua simplicidade e ao mesmo tempo temperamental forma de administração, dessa mesma forma tive a oportunidade de conhecer um membro da família, já que também é um sistema gerenciado por scripts, AMO MUITO TUDO ISSO!

Linux: FreeBSD + Zope/Plone, uma idéia frustrante? Porém como nem tudo são flores, me deparei com um problema inesperado as vésperas de colocar um grande portal no ar, pois é, falhei nos testes, pois eu deveria ter visto o problema antes mesmo dele se mostrar. O que ocorre é que o Zope não é lá muito amigo do FreeBSD, pelo menos nessa parte ou vice e versa. O que significa que não basta apenas instalar o Zope no BSD esperando que vá funcionar as mil maravilhas, sem antes dar um trato no memino.

Uma das pegadinhas é quando não fixamos o HUGE_STACK_SIZE para o Python usar o Zope, ou mesmo quando é fixado com uma medida menor de memória, também coisas como desativar o IPv6 no kernel são detalhes que normalmente vão dar problemas.

Temos também o tão famoso Zope MemoryError, isso normalmente ocorre quando um ou mais processos do Zope são executados com falta de memória, isso porque no BSD o padrão de memória máximo por processos é muito pequeno, exigindo que sejam feitas algumas definições no loader.conf ou KERNCONF, como talvez 1GB, mas NÃO algo perto de memória física para não ter maiores problemas.

kern.maxdsiz = "1610612736"
kern.dfldsiz = "1610612736"
kern.maxssiz = "1610612736"

Temos ainda um outro probleminha, isso com relação ao Python, que normalmente fica processando /var/tmp e /tmp e isso faz com que ele se complique para descobrir porque a colocação está maior do que o espaço disponível em arquivos. Isso significa que o ZODB falharia ao ver uma abundância de espaço em /tmp. A solução é colocar a variável TMPDIR no zopectl para que o Python entenda que este é o padrão para ele.

Como visto, são passos rápidos, pequenos detalhes que nos passam desapercebidos e que no futuro podem ser um grande problema. E claro, depois de termos feito as modificações acima, temos que também fazer as alterações abaixo.

Ativar o redirecionamento IP no Kernel

# sysctl net.inet.ip.forwarding=1
# sysctl net.inet.ip.fastforwarding=1
# sysctl net.inet6.ip6.forwarding=1


Certifique-se de que existem as linhas em /etc/sysctl.conf, dessa forma a próxima vez você reiniciar o computador o redirecionamento IP estará ativado por padrão:

# vi /etc/sysctl.conf

net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet6.ip6.forwarding=1

Aceitar filtro

Em seguida certifique-se de que o aceite de filtro HTTP esteja carregado no kernel, pode-se verificar isso executando o comando:

# Kldstat

Edite o /boot/loader.conf e adicione a seguinte linha de modo que quando reiniciar o computador o módulo será carregado no kernel.

# vi /boot/loader.conf

accf_http_load="YES"

Também podemos carregar o módulo imediatamente, basta executar o comando:

# kldload accf_http

Modificar o sistema de memória compartilhada e setar alguns parâmetros

# sysctl kern.ipc.shmall=32768
# sysctl kern.ipc.shmmax=134217728
# sysctl kern.ipc.semmap=256


Novamente vamos editar o arquivo /etc/sysctl.conf para tornar estas alterações permanentes:

# vi /etc/sysctl.conf

kern.ipc.shmall=32768
kern.ipc.shmmax=134217728
kern.ipc.semmap=256
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet6.ip6.forwarding=1

Modificar o sistema de apenas leitura e alguns parâmetros

Editando o arquivo /boot/loader.conf.

NOTA: Aqui teremos que dar um restart para que os novos valores sejam setados nos parâmetros.

# vi /boot/loader.conf

kern.ipc.semmni=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
accf_http_load="YES"

Depois disso tudo basta certificar-se de que o Python esteja instalado no sistema, assim como algumas bibliotecas necessárias para a instalação do Zope.

# python2.4

Caso tenha a mensagem *python2.4 command not found*, então faça:

# which python2.4
# ls /usr/local/bin/python2.4


Se ainda assim tiver a mensagem: *ls: /usr/local/bin/python2.4: No such file or directory*, então:

# cd /usr/ports/lang/python24
# make install clean
# export PATH=$PATH:/usr/local/bin
# echo "export PATH=\$PATH:/usr/local/bin" >> /root/.bash_profile


Libs para o Python

  • Python Imaging Library
  • LibXSLT
  • LibXML2

# cd /usr/ports/graphics/py-imaging
# make install clean

# cd /usr/ports/textproc/libxslt
# make install clean

# cd /usr/ports/textproc/libxml2
# make install clean
# cd ../py-libxml2

# make install clean
# cd ../py-xml
# make install clean


Agora sim, seu Zope já pode ser instalado sem problemas de quedas por falta de memória, é claro que ainda assim podemos receber a mensagem de erro, mas tenha certeza, não será mais por que seu BSD precisa de configurações. :D

Até a próxima.

Publicado originalmente por Cleber J Santos em: FreeBSD + Zope/Plone, uma idéia frustrante? - cleberjsantos.com.br

   

Páginas do artigo
   1. FreeBSD + Zope/Plone, uma idéia frustrante?
Outros artigos deste autor

Assembler no Linux

Screen, eita ferramenta porreta!

Ajustando o desempenho de discos rígidos

Linux (kernel) - A história do seu criador

Escrevendo scripts no GIMP, pintando a cobra

Leitura recomendada

CMS Plone 4.1.6 com invólucro Virtualenv + Buildout + Mount Point + BLOB Storage + Unicode UTF-8

Instalando o MySQL no Zope/Plone e criando uma pequena aplicação

wxPython, uma biblioteca GUI multi-plataforma (parte 1)

Python - Brincando com arquivos

Introdução ao Python (parte 2)

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts