Alocação de Memória DATASNAP
Boa tarde
Temos uma aplicação multicamadas com Datasnap e estamos com um problema com relação à alocação de memória no servidor.
Ao subir os clients, a memória alocada para o server vai subindo, porém ao fechar esses clientes, a memória do servidor não é liberada.
Fizemos testes com os LifeCycles tipo Session e Invocation e o resultado não foi alterado.
Debugamos e vimos que as sessões estão sendo liberadas, porém a memória do server continua a mesma.
Alguém já passou por isso?
Temos uma aplicação multicamadas com Datasnap e estamos com um problema com relação à alocação de memória no servidor.
Ao subir os clients, a memória alocada para o server vai subindo, porém ao fechar esses clientes, a memória do servidor não é liberada.
Fizemos testes com os LifeCycles tipo Session e Invocation e o resultado não foi alterado.
Debugamos e vimos que as sessões estão sendo liberadas, porém a memória do server continua a mesma.
Alguém já passou por isso?
Fernando Papile
Curtidas 0
Respostas
Marcos Rodrigues
29/07/2014
Pessoal, alguém sabe a solução para esse problema? Estou com o mesmo problema.
Estou utilizando o lifeCycle como Server.
Em meu ServerMethod, tenho cerca de 15 FDQuery cada uma ligadas ao seu DatasetProvider.
No cliente uso ClientDataSet ligado a um DSProviderConnection1 ligado a um SqlConnection.
A cada aplicação cliente que abro o "Server.exe" vai ganhando Kilobytes e não libera quando encerro a aplicação.
Às vezes o servidor trava.
Existe algum procedimento a fazer do lado do servidor para liberar esses recursos?
Estou utilizando o lifeCycle como Server.
Em meu ServerMethod, tenho cerca de 15 FDQuery cada uma ligadas ao seu DatasetProvider.
No cliente uso ClientDataSet ligado a um DSProviderConnection1 ligado a um SqlConnection.
A cada aplicação cliente que abro o "Server.exe" vai ganhando Kilobytes e não libera quando encerro a aplicação.
Às vezes o servidor trava.
Existe algum procedimento a fazer do lado do servidor para liberar esses recursos?
GOSTEI 0
Alisson Santos
29/07/2014
Boa noite pessoal, Estão utilizando o Rest ou o DataSnap nativo?
GOSTEI 0
Marcos Rodrigues
29/07/2014
Não estou utilizando DataSnap Rest, mas o DataSnap Server TCP/IP na porta 211
GOSTEI 0
Efraim Sousa
29/07/2014
Marcos Soares, conseguiu resolver?? Estou passando pelo mesmo problema :S :S
GOSTEI 0
Marcos Rodrigues
29/07/2014
Não consegui resolver. Mudei para DataSnap Rest e melhorou bastante. Ainda preciso fazer mais testes.
GOSTEI 0
Scv Sistemas
29/07/2014
Olá, bom também uso aplicações datasnap e passei pelo mesmo problema, a solução que encontrei foi criar uma procedure que faz a limpeza de resíduos.
crie esta procedure coloque ela no Create e no Destroy do seu ServerMethods.
procedure LimpaMemoria; var MainHandle : THandle; begin try MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ; SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ; CloseHandle(MainHandle); except end; Application.ProcessMessages; end;
crie esta procedure coloque ela no Create e no Destroy do seu ServerMethods.
GOSTEI 0
Lorival Filho
29/07/2014
Está trabalhando da mesma maneira ou achou outra solução. Vi em outro lugar que na verdade essa solução fixa o máximo de memória. Hoje eu tenho umas 30 conexões no meu servidor e acabou chegando a quase 1GB de alocação de memória. Analisando com calma vi que o que faz alocar mais memória é uma função que retorna um JsonArray (na verdade um arquivo PDF dentro dele). Algo novo?
GOSTEI 0