[ Paulo Roberto Simões Pellucci <[EMAIL PROTECTED]> ]:
----------------------------------------
|
|  Boa tarde gente, estive procurando pela internet algum tutorial,
|  explicações, que poderiam me ajudar a dar um tuning no meu zope. 
|  Rodo um site (http://www.primus.com.br) no meu Zope 2.8.3-final, 
|  com python 2.4.1 (em SUSE 10).
|  

Antes de mais nada faça um upgrade para Python 2.4.3 e 2.8.7
(talvez funcione com Zope 2.9.6)

|  
|  O site faz pesquisas em companhias aéreas através de seus
|  webservices, envia xml e recebe xml (utilizando xml.dom.
|  minidom) e está dando top direto em horário de muita pesquisa 
|  (o processador chega a 99% e meu site todo praticamente trava)

Quais são os processos que estão consumindo mais CPU ?

É o Zope ? É um método externo que está consultando webservices ?
É o banco ? Tem mais algo relevante rodando (tipo updatedb) ?

|  ,várias conexões ao banco ficam abertas 

Difícil dizer com certeza sem mais dados:
- como é a sua conexão com o banco de dados e que banco usa ?
- vc está usando um conecction pool ?
- vc reutilza conexão antigas ou sempre abre uma nova conexão a
  cada acesso na página
- vc usa sockets TCP/IP ou named pipes para acessar o banco ?
- vc checou os limites default do Linux para buffers de sockets
  e número máximo de arquivos abertos ?

|  (preciso ir ao código mal feito e fechar conexões que não 
|  estão sendo fechadas), já aumentei o número de threads do meu
|  zope.conf (para 50,

Não necessariamente isso vai melhorar e pode piorar. Vc quer diminuir 
o consumo de CPU ou diminuir a latência (tempo de espera) para 
o usuário. Volte o número de threads para 10.
Vc usa ZEO ? O banco de dados está na mesma máquina ou em outra máquina ?


| afinal são enviados threads para receber 
|  a resposta de cada requisição - de 14 a 20 threads acredito eu) 

Experimente mudar de modelo. Vc está disparando várias threads para
ficar sincronamente esperando cada resposta. Trabalhe no modelo assíncrono
(quando um socket notificar que tem dados vc faz a leitura)
e diminua o número de threads (menos trocas de contexto que a CPU vai
fazer à toa, enquanto todas as threads estão paradas esperando o dado vir
pela rede).

Threads não tem boa escalabilidade. Um modelo assíncrono vai lhe dar
um resultado melhor.

|  para cada pesquisa, e como o zope é uniprocessado ele sai por 
|  somente um processador, sendo que eu tenho 2 Dual Core 
|  (ou seja,4 processadores), e isso tá pesando demais pras 
|  pesquisas no site, travando muito o site.

A outra CPU não está necessariamente à toa. O banco não roda na mesma máquina ?

  
|  Alguém tem idéia do que posso fazer para deixar o Zope mais leve,

Não acho que seja um problema do Zope, mas da forma como foi modelada 
a solução. Veja se com os bizzus acima é possível explorar melhor a
origem da sobrecarga, e se tiver súvidas sobre a explicação dê um
alô.

Antes de mais nada, faça um diagnóstico mais preciso de qual é o gargalo.
Até o momento, meu chute é de que vc tem threads de mais ociosas comendo
sua CPU na hora do pico.

Preste atenção também se o número threads não está crescendo descontroladamente.
Se for o caso use um thread pool (limitando o número máximo de threads ativas)

Abração,
Senra

-------------
Rodrigo Senra
GPr Sistemas

Responder a