Páginas

terça-feira, 28 de abril de 2009

COM+ e problemas de memória

Onde trabalho possuímos uma infra que serve de façade para a chamada de componentes dos sistemas de forma remota. Esta forma remota pode ser desde estações de usuário para servidores de componentes, servidores web para servidores de componentes e mesmo entre servidores de componentes. Ela é um pacote COM+, e chama componentes que estão também hospedados no COM+ (temos muito legado aqui, vai demorar para sair dessa tecnologia).

Recentemente deparamos com um problema de alto consumo de memória do nosso processo dllhost.

Pedimos um dump deste processo (windbg), e ao analisar, encontrei muitas entradas de System.OutOfMemoryException. Ao verificar a causa dessas exceptions, encontrei a seguinte mensagem: Retrieving the COM class factory for component with CLSID {6DEDD69A-065F-4781-90A7-35E0E0DEB4BA} failed due to the following error: 8007000e. O componente que está se querendo instanciar é um DTO nosso, e não está sendo possível pelo erro de falta de memória.

Encontrei um KB que fala sobre isso: http://support.microsoft.com/?scid=kb%3Ben-us%3B890425&x=7&y=14, e talvez possa relacionado. Ele diz que o RPC tem uma limitação de quantidade de interfaces únicas que podem ser chamadas entre processos no COM+. Como resultado, erros de OutOfMemory (8007000e) podem aparecer.

Ainda não temos um parecer final, mas estamos seguindo por essa linha para resolver a questão.

[]'s

UPDATE - 21/05/2009:

Desistimos de tentar descobrir o problema neste servidor (acontece em apenas uma máquina, outros executam o mesmo sistema sem o erro)...