Inquiridor
Aplicação pesada

Pergunta
-
Galéra, minha aplicação não é grande, é workflow, tem 8 telas de aprovações, cada tela se conecta com SQL é outra maquina, todas os itens que são apresentados nestas telas tem a opção de visualizar os anexos, cada anexo tem em torno de 3mb no máximo, consultado em um outro BD (outra maquina).
Minha aplicação esta consumindo 98% de memória e 88% da cpu com 5 usuarios online.
Alguém sabe como verifico onde esta o problema?
Junior Santana
Todas as Respostas
-
Você utiliza programação assincrona ?
Se não utilize e distribuia os cores e a memoria.
Se sim limite os cores e memoria.
http://www.devmedia.com.br/programacao-assincrona-multithreading-em-net-com-c/23357
-
Você utiliza programação assincrona ?
Se não utilize e distribuia os cores e a memoria.
Se sim limite os cores e memoria.
http://www.devmedia.com.br/programacao-assincrona-multithreading-em-net-com-c/23357
Junior Santana
-
-
Existem alguns itens que voce pode verificar para tentar identificar o problema:
- Voce usa Factory de banco de dados com Singleton? Se não, seria uma boa ideia utilizar para reaproveitar o pool de conexões com o SqlServer.
- Voce guarda os arquivos no BD? Se sim, e se possível, tente não guardar arquivos no seu BD, a menos que seja explicitamente necessário. O ideal é guardar os arquivos em um servidor de arquivos.
- Voce utiliza Cache? O Cache ajuda bastante.
- Voce controla o estado de suas Threads? O processamento assincrono pode ser uma dor de cabeça quando se executa muitas Threads simultaneas. Neste caso, o ideal é controlar a quantidade de Threads abertas no servidor. O .NET a partir da versão 4 possui o
objeto Tasks que tem um monte de recurso para programação assíncrona
- Voce utiliza DataReaders para recuperar dados? O DataReader, apesar de mais rápido, mantém a conexão com o BD aberta. Se possível, tente usar outro objeto.
- Voce está garantindo o correto Dispose dos objetos? Sempre que possível utilize a instrução using () {}. Isso garante a correta liberação dos seus objetos.
- Voce utiliza componentes de terceiros em sua aplicação? Neste caso, dar uma olhada na documentação do componente pode ajudar a esclarecer possíveis problemas.
- Analise os logs do IIS para ver qual processo está consumindo mais recurso da máquina. Utilize também o Process Monitor do Windows. Com ele voce consegue monitorar tudo, desde de IO até Memoria, quantidade de Threads em execução, etc.
- O VS 2010 possui um recurso que é um painel de processamento paralelo. Muito útil para ver as Threads em sistemas assincronos.
Com certeza pode ter mais coisa para voce olhar, mas sempre digo o seguinte: difícil é fazer o fácil. Se for lembrando de mais coisa eu atualizo o post.
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio. - Voce usa Factory de banco de dados com Singleton? Se não, seria uma boa ideia utilizar para reaproveitar o pool de conexões com o SqlServer.
-
-
Existem alguns itens que voce pode verificar para tentar identificar o problema:
- Voce usa Factory de banco de dados com Singleton? Se não, seria uma boa ideia utilizar para reaproveitar o pool de conexões com o SqlServer.
- Voce guarda os arquivos no BD? Se sim, e se possível, tente não guardar arquivos no seu BD, a menos que seja explicitamente necessário. O ideal é guardar os arquivos em um servidor de arquivos.
- Voce utiliza Cache? O Cache ajuda bastante.
- Voce controla o estado de suas Threads? O processamento assincrono pode ser uma dor de cabeça quando se executa muitas Threads simultaneas. Neste caso, o ideal é controlar a quantidade de Threads abertas no servidor. O .NET a partir da versão 4 possui o
objeto Tasks que tem um monte de recurso para programação assíncrona
- Voce utiliza DataReaders para recuperar dados? O DataReader, apesar de mais rápido, mantém a conexão com o BD aberta. Se possível, tente usar outro objeto.
- Voce está garantindo o correto Dispose dos objetos? Sempre que possível utilize a instrução using () {}. Isso garante a correta liberação dos seus objetos.
- Voce utiliza componentes de terceiros em sua aplicação? Neste caso, dar uma olhada na documentação do componente pode ajudar a esclarecer possíveis problemas.
- Analise os logs do IIS para ver qual processo está consumindo mais recurso da máquina. Utilize também o Process Monitor do Windows. Com ele voce consegue monitorar tudo, desde de IO até Memoria, quantidade de Threads em execução, etc.
- O VS 2010 possui um recurso que é um painel de processamento paralelo. Muito útil para ver as Threads em sistemas assincronos.
Com certeza pode ter mais coisa para voce olhar, mas sempre digo o seguinte: difícil é fazer o fácil. Se for lembrando de mais coisa eu atualizo o post.
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio.Bom, analisei alguns pontos que o você citou e detectei que o prblema pode estar num função no meu Global.asa.
No Session_Start - faço um insert na base de dados com algumas informações do usuario logado, como o Session.SessionID.
No Session_End - Faço um update na base onde o mesmo deu insert quando entrou.
Comentei as duas instrução e o monitorei o servidor, percebi que o consumo diminuiu 50%.
A questão é: como usar o Global.asa sem que isso aconteça?
Junior Santana
- Voce usa Factory de banco de dados com Singleton? Se não, seria uma boa ideia utilizar para reaproveitar o pool de conexões com o SqlServer.
-
-
-
Uma desvantagem de se usar o evento Session_Start no Global, é que para qualquer usuário que entre em seu site, será criada uma Session. Mesmo que ele não efetue o Login em seu sistema, a Session será criada.
Uma sugestão, é voce capturar as informações somente no momento da autenticação do usuário no sistema.
Abraços,
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio. -
Uma desvantagem de se usar o evento Session_Start no Global, é que para qualquer usuário que entre em seu site, será criada uma Session. Mesmo que ele não efetue o Login em seu sistema, a Session será criada.
Uma sugestão, é voce capturar as informações somente no momento da autenticação do usuário no sistema.
Abraços,
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio.Junior Santana
-
Existem alguns itens que voce pode verificar para tentar identificar o problema:
- Voce usa Factory de banco de dados com Singleton? Se não, seria uma boa ideia utilizar para reaproveitar o pool de conexões com o SqlServer.
- Voce guarda os arquivos no BD? Se sim, e se possível, tente não guardar arquivos no seu BD, a menos que seja explicitamente necessário. O ideal é guardar os arquivos em um servidor de arquivos.
- Voce utiliza Cache? O Cache ajuda bastante.
- Voce controla o estado de suas Threads? O processamento assincrono pode ser uma dor de cabeça quando se executa muitas Threads simultaneas. Neste caso, o ideal é controlar a quantidade de Threads abertas no servidor. O .NET a partir da versão 4 possui o
objeto Tasks que tem um monte de recurso para programação assíncrona
- Voce utiliza DataReaders para recuperar dados? O DataReader, apesar de mais rápido, mantém a conexão com o BD aberta. Se possível, tente usar outro objeto.
- Voce está garantindo o correto Dispose dos objetos? Sempre que possível utilize a instrução using () {}. Isso garante a correta liberação dos seus objetos.
- Voce utiliza componentes de terceiros em sua aplicação? Neste caso, dar uma olhada na documentação do componente pode ajudar a esclarecer possíveis problemas.
- Analise os logs do IIS para ver qual processo está consumindo mais recurso da máquina. Utilize também o Process Monitor do Windows. Com ele voce consegue monitorar tudo, desde de IO até Memoria, quantidade de Threads em execução, etc.
- O VS 2010 possui um recurso que é um painel de processamento paralelo. Muito útil para ver as Threads em sistemas assincronos.
Com certeza pode ter mais coisa para voce olhar, mas sempre digo o seguinte: difícil é fazer o fácil. Se for lembrando de mais coisa eu atualizo o post.
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio.Washington
Tem algum material de como controlar as treads?, talvez seja isso o meu problema, já que minha aplicação usa 80% das atividades o SQL
Junior Santana
- Voce usa Factory de banco de dados com Singleton? Se não, seria uma boa ideia utilizar para reaproveitar o pool de conexões com o SqlServer.
-
Olá Junior. Desculpe pela demora.
Voce pode ler mais sobre processamento paralelo nos artigos abaixo:
- http://www.macoratti.net/13/05/c_task1.htm
- http://www.macoratti.net/10/09/c_thd1.htm
- http://www.codeproject.com/Articles/189374/The-Basics-of-Task-Parallelism-via-C
- http://msdn.microsoft.com/pt-br/library/vstudio/hh556530.aspx
- http://msdn.microsoft.com/pt-br/library/vstudio/hh300224.aspx
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio.