Os administradores de Exchange Server temem o momento em que seu painel de monitoramento acende com erros Microsoft.Exchange.Data.Storage.TooManyObjectsOpenedException enquanto o consumo de memoria do Store.exe escala alem dos limites aceitaveis. Este erro indica que um ou mais processos excederam o numero maximo de objetos MAPI abertos simultaneamente no seu servidor Exchange 2013, 2016 ou 2019. Neste artigo, voce aprendera exatamente o que desencadeia esta excecao, como diagnosticar a causa raiz usando PowerShell e Performance Monitor, e como resolve-lo sistematicamente antes que impacte todo o seu ambiente de mensagens.
Pre-requisitos
- Exchange Server 2013, 2016 ou 2019 com a ultima atualizacao cumulativa instalada
- Acesso ao Exchange Management Shell com funcao de Organization Management ou Server Management
- Acesso de administrador local ao servidor Exchange
- Acesso ao Performance Monitor (perfmon.exe)
- Familiaridade com PowerShell e cmdlets do Exchange
- Acesso ao Visualizador de Eventos para os logs de Aplicativo e Sistema
- Compreensao basica do protocolo MAPI
Entendendo TooManyObjectsOpenedException
A excecao TooManyObjectsOpenedException e lancada pelo Exchange Information Store (Store.exe) quando uma sessao de cliente ou processo em segundo plano abre mais objetos MAPI do que o limite configurado permite. Os objetos MAPI incluem mensagens, pastas, anexos, visualizacoes de tabela e assinaturas de notificacao. Cada vez que o Outlook abre uma pasta, expande uma conversa, ou um agente de backup enumera conteudos de caixa de correio, ele cria objetos MAPI que consomem memoria dentro do processo Store.exe.
O Exchange aplica estes limites atraves de politicas de limitacao para proteger a estabilidade do servidor. Quando uma unica sessao ou caixa de correio excede sua contagem de objetos alocada, o Information Store gera o Event ID 9646 no log de Aplicativo e rejeita solicitacoes adicionais de objetos daquela sessao. O sintoma visivel imediato e que os clientes Outlook afetados experimentam travamentos, desconexoes ou erros de “Nao e possivel expandir a pasta”, enquanto no lado do servidor voce ve a memoria do Store.exe crescendo sem controle.
A distincao critica aqui e entre limites por sessao e limites por caixa de correio. Um unico usuario executando Outlook com dez suplementos pode ter dez sessoes separadas, cada uma consumindo objetos. O limite por sessao pode nao ser excedido, mas o limite agregado por caixa de correio ainda pode ser ultrapassado.
Como Funcionam os Limites de Objetos MAPI
O Exchange rastreia objetos abertos atraves do rastreamento interno de recursos do Information Store. Cada tipo de objeto tem seu proprio contador:
- Mensagens abertas: Numero de objetos de mensagem abertos simultaneamente
- Pastas abertas: Numero de objetos de pasta retidos na memoria
- Anexos abertos: Fluxos de anexos atualmente acessados
- Assinaturas de notificacao: Registros de notificacoes push de clientes
Quando qualquer contador excede seu maximo configurado, o store gera a excecao e a registra como Event ID 9646 com detalhes sobre qual usuario e qual tipo de objeto desencadeou o limite.
Diagnosticando o Problema
Passo 1: Confirmar o Erro nos Logs de Eventos
Abra o Visualizador de Eventos e navegue ate Logs do Windows > Aplicativo. Filtre por Event ID 9646 com origem MSExchangeIS. O detalhe do evento revela o usuario afetado, o tipo de objeto que excedeu o limite e a contagem atual versus o maximo:
Event ID: 9646
Source: MSExchangeIS
Description: Mapi session "/o=Organization/ou=Exchange Administrative Group/cn=Recipients/cn=jsmith"
exceeded the maximum of 500 objects of type "objtMessage".
Isso lhe diz imediatamente qual caixa de correio e problematica e qual tipo de objeto esta sendo esgotado.
Passo 2: Usar Get-StoreUsageStatistics
O cmdlet Get-StoreUsageStatistics e sua ferramenta de diagnostico principal. Execute-o contra o banco de dados de caixa de correio afetado:
Get-StoreUsageStatistics -Database "Mailbox Database 01" |
Sort-Object -Property DigestCategory -Descending |
Format-Table DisplayName, DigestCategory, SampleCount, SampleValue -AutoSize
Isso retorna dados de consumo de recursos para todas as sessoes ativas de caixa de correio. Procure caixas de correio com numeros anormalmente altos em SampleValue, que indicam objetos abertos excessivos.
Para focar em uma caixa de correio especifica:
Get-StoreUsageStatistics -Identity "[email protected]" |
Format-List *
Passo 3: Verificar Estatisticas da Caixa de Correio
Use Get-MailboxStatistics para identificar caixas de correio com contagens de itens excepcionalmente grandes que podem contribuir para o problema:
Get-MailboxStatistics -Database "Mailbox Database 01" |
Sort-Object -Property ItemCount -Descending |
Select-Object DisplayName, ItemCount, TotalItemSize, LastLogonTime -First 20
Caixas de correio com centenas de milhares de itens em uma unica pasta sao candidatas principais para desencadear excecoes de limite de objetos, especialmente quando os clientes tentam sincronizar a pasta completa.
Passo 4: Contadores do Performance Monitor
Adicione os seguintes contadores no Performance Monitor para rastrear o consumo de objetos MAPI em tempo real:
- MSExchangeIS Store\Active Client Logons — total de sessoes ativas
- MSExchangeIS Store\Client: RPCs attempted/sec — taxa de solicitacoes
- MSExchangeIS Store\Messages Opened/sec — taxa de criacao de objetos
- MSExchangeIS\RPC Requests — operacoes RPC concorrentes
- Process(Store)\Working Set — consumo de memoria do Store.exe
Crie um conjunto de coletores de dados e execute-o por pelo menos quatro horas para capturar padroes de uso de pico. Correlacione os picos nas contagens de mensagens abertas com os carimbos de tempo das entradas do Event ID 9646.
Causas Comuns
Suplementos do Outlook Defeituosos
Os suplementos de terceiros para Outlook sao o culpado mais frequente. Suplementos que realizam indexacao em segundo plano, integracao com redes sociais ou sincronizacao com CRM frequentemente abrem centenas de objetos MAPI por pasta e nao os liberam corretamente. Um unico usuario com um suplemento mal programado pode esgotar o limite de objetos por sessao em minutos.
Para identificar o suplemento infrator, verifique as informacoes do cliente RPC:
Get-RpcClientAccess -Server EX01 | Format-List
Depois correlacione o nome do aplicativo cliente nos detalhes do Event ID 9646. Os infratores comuns incluem versoes desatualizadas do Salesforce para Outlook, suplementos da Thomson Reuters e scanners de email antivirus.
Software de Backup e Arquivamento de Terceiros
Agentes de backup como Veeam Explorer for Exchange, Veritas Backup Exec ou Commvault frequentemente usam MAPI ou EWS para enumerar e ler conteudos de caixa de correio durante janelas de backup. Se o software de backup esta configurado para recuperacao em nivel de item, ele pode abrir cada mensagem em um banco de dados simultaneamente, excedendo facilmente os limites de objetos.
Verifique os agendamentos de trabalhos de backup e confirme se os eventos de TooManyObjectsOpenedException se correlacionam com janelas de backup. Revise a configuracao do software de backup para opcoes de limitar conexoes MAPI ou usar snapshots VSS.
Problemas do Indexador de Pesquisa do Exchange
O Microsoft Exchange Search Host Controller (HostControllerService) e o processo de indexacao de conteudo podem funcionar mal e tentar repetidamente indexar os mesmos itens, mantendo objetos excessivos abertos. Verifique a saude do indice de pesquisa:
Get-MailboxDatabaseCopyStatus * |
Select-Object Name, Status, ContentIndexState, ContentIndexErrorMessage
Se ContentIndexState mostra Failed ou Crawling por periodos prolongados, o indexador pode estar contribuindo para o esgotamento de objetos. Reconstrua o indice se necessario:
Stop-Service MSExchangeFastSearch
Stop-Service HostControllerService
# Excluir a pasta do catalogo de indice para o banco de dados afetado
Remove-Item "D:\ExchangeDatabases\DB01\DB01.Single" -Recurse -Force
Start-Service MSExchangeFastSearch
Start-Service HostControllerService
Problemas de Replicacao de Pastas Publicas
Em ambientes com caixas de correio de pastas publicas, a sincronizacao de hierarquia de replicacao pode causar criacao excessiva de objetos. Cada pasta publica na hierarquia requer objetos abertos durante a sincronizacao. Organizacoes com milhares de pastas publicas podem facilmente exceder limites durante ciclos de replicacao.
Verifique a saude da replicacao de pastas publicas:
Get-PublicFolderMailboxDiagnostics -Identity "PF_Mailbox01" |
Select-Object -ExpandProperty SyncInfo
Corrupcao do Banco de Dados
A corrupcao subjacente do banco de dados ESE pode fazer com que o Information Store tente repetidamente acessar paginas danificadas, criando e abandonando objetos MAPI no processo. Se outras causas foram eliminadas, execute uma verificacao de integridade:
# Desmontar o banco de dados primeiro
Dismount-Database "Mailbox Database 01" -Confirm:$false
# Executar eseutil para verificacao de integridade
eseutil /g "D:\ExchangeDatabases\DB01\DB01.edb"
# Se problemas forem encontrados, executar reparo
eseutil /p "D:\ExchangeDatabases\DB01\DB01.edb"
# Desfragmentar para recuperar espaco
eseutil /d "D:\ExchangeDatabases\DB01\DB01.edb"
# Remontar
Mount-Database "Mailbox Database 01"
Comparacao de Limites de Objetos por Versao do Exchange
| Parametro | Exchange 2013 | Exchange 2016 | Exchange 2019 |
|---|---|---|---|
| Max objetos por sessao (objtMessage) | 500 | 500 | 500 |
| Max pastas abertas por sessao | 500 | 500 | 500 |
| Max objetos por caixa de correio (total) | 16.000 | 16.000 | 16.000 |
| Max conexoes RPC concorrentes | 40 | 40 | 40 |
| Timeout RPC padrao (segundos) | 120 | 120 | 120 |
| Memoria max do Store.exe (% de RAM) | Dinamico (ate 75%) | Dinamico (ate 75%) | Dinamico (ate 75%) |
| Politica de limitacao configuravel | Sim (New-ThrottlingPolicy) | Sim (New-ThrottlingPolicy) | Sim (New-ThrottlingPolicy) |
| Tamanho do cache ESE configuravel | Sim (registro) | Sim (registro) | Sim (registro) |
Note que embora os limites padrao sejam identicos entre versoes, Exchange 2016 e 2019 possuem algoritmos aprimorados de gerenciamento de memoria que lidam com a limpeza de objetos de forma mais agressiva que o Exchange 2013.
Resolucao Passo a Passo
1. Identificar a Causa Imediata
Revise as ultimas 24 horas de entradas do Event ID 9646 e compile uma lista de caixas de correio afetadas e aplicativos cliente:
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'MSExchangeIS'
ID = 9646
StartTime = (Get-Date).AddHours(-24)
} | Select-Object TimeCreated, Message | Export-Csv C:\temp\9646events.csv
2. Aumentar Limites de Objetos (Alivio Temporario)
Se o impacto na producao e severo, aumente temporariamente o limite de objetos por sessao via registro:
HKLM\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem
Value: Maximum Allowed Sessions Per User
Type: REG_DWORD
Data: 32 (padrao e 16, aumentar para 32 ou 64)
Para limites por tipo de objeto, crie uma politica de limitacao personalizada:
New-ThrottlingPolicy -Name "HighObjectLimit" -RCAMaxConcurrency 40 -RCAPercentTimeInAD 100
Set-Mailbox -Identity "jsmith" -ThrottlingPolicy "HighObjectLimit"
Reinicie o servico Microsoft Exchange Information Store apos alteracoes no registro.
3. Abordar a Causa Raiz
Baseando-se no seu diagnostico das secoes anteriores:
- Suplementos do Outlook: Desabilite o suplemento infrator via Politica de Grupo ou as chaves de registro de suplementos COM do Office. Teste com Outlook em modo seguro (
outlook.exe /safe). - Software de backup: Reconfigure para usar snapshots baseados em VSS em vez de enumeracao MAPI. Agende backups durante horarios de baixa demanda.
- Indexador de pesquisa: Reconstrua o catalogo de indice de conteudo para o banco de dados afetado.
- Pastas publicas: Reduza o tamanho da hierarquia, divida caixas de correio grandes de pastas publicas ou ajuste o agendamento de replicacao.
- Corrupcao do banco de dados: Execute
eseutil /dpara desfragmentacao offline para limpar inconsistencias do banco de dados.
4. Implementar Monitoramento Preventivo
Crie uma regra de monitoramento para Event ID 9646 no seu sistema de monitoramento (SCOM, Zabbix ou similar) e configure uma tarefa agendada do PowerShell para rastrear contagens de objetos:
$results = Get-StoreUsageStatistics -Database "Mailbox Database 01" |
Where-Object { $_.SampleValue -gt 400 }
if ($results) {
Send-MailMessage -To "[email protected]" -Subject "Alerta de Objetos MAPI" `
-Body ($results | Out-String) -SmtpServer "smtp.contoso.com"
}
Cenario Real
Seu servidor Exchange 2016 comeca a registrar Event ID 9646 a cada poucos minutos numa segunda-feira de manha. A memoria do Store.exe escalou de seus habituais 24 GB para 38 GB num servidor de 48 GB. Os usuarios reportam desconexoes do Outlook e carregamento lento de pastas.
Voce executa Get-StoreUsageStatistics e descobre que cinco caixas de correio pertencentes a equipe de vendas mostram contagens elevadas de objetos. Verificando os detalhes do evento, voce ve que o aplicativo cliente e identificado como “Client=MSExchangeRPC” com uma tag adicional apontando para um suplemento CRM de terceiros.
Uma investigacao adicional revela que a equipe de TI implantou uma nova versao do suplemento Dynamics 365 para Outlook durante o fim de semana. Esta versao tem um bug conhecido onde abre objetos de mensagem para cada registro de contato, mas nunca os fecha. Em poucas horas, a sessao de cada usuario de vendas acumula mais de 450 objetos de mensagem abertos, aproximando-se do limite de 500.
A resolucao envolve tres passos: Primeiro, voce aumenta temporariamente o limite por sessao para 1.000 via registro para parar o sangramento imediato. Segundo, voce reverte o suplemento CRM para a versao anterior usando Politica de Grupo. Terceiro, voce reinicia o servico Information Store durante o almoco para limpar os objetos acumulados. Nas proximas 24 horas, a memoria do Store.exe retorna a sua linha base normal de 24 GB e nenhum outro evento 9646 aparece.
Armadilhas e Casos Especiais
Ambientes de Database Availability Group (DAG): Num DAG, TooManyObjectsOpenedException num no nao se replica automaticamente para copias passivas. No entanto, se a causa raiz e um problema em nivel de caixa de correio (como um item corrompido), o problema seguira a caixa de correio durante o failover do banco de dados. Sempre verifique tanto nos ativos como passivos.
Coexistencia com Exchange 2013 e 2016: Durante a coexistencia de migracao, as sessoes proxy entre servidores podem multiplicar as contagens de objetos MAPI. Uma unica sessao do Outlook para uma caixa de correio 2013 proxiada atraves de um servidor 2016 cria objetos em ambos os servidores. Monitore ambos os servidores durante a coexistencia.
Modo cache versus modo online: O Outlook em Modo Cache do Exchange abre menos objetos concorrentes que o Modo Online porque sincroniza incrementalmente. No entanto, a sincronizacao inicial de um perfil em Modo Cache para uma caixa de correio grande (100.000+ itens) pode elevar temporariamente as contagens de objetos acima dos limites.
Caixas de correio compartilhadas com muitos delegados: Uma caixa de correio compartilhada aberta por 20 usuarios simultaneamente cria 20 sessoes separadas, cada uma com sua propria alocacao de objetos. O limite agregado por caixa de correio pode ser atingido rapidamente mesmo que nenhuma sessao individual seja abusiva.
Exchange hibrido com Office 365: As consultas hibridas de livre/ocupado e os movimentos de caixa de correio entre instalacoes criam sessoes MAPI temporarias que consomem objetos. Durante migracoes em lote massivas, o servidor local pode experimentar pressao de objetos a partir do endpoint de migracao.
Solucao de Problemas
Consulta de Log de Eventos para Erros Relacionados
Procure eventos relacionados que frequentemente acompanham TooManyObjectsOpenedException:
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'MSExchangeIS'
ID = 9646, 9660, 9667, 9760
StartTime = (Get-Date).AddDays(-7)
} | Group-Object Id | Select-Object Name, Count | Sort-Object Count -Descending
- Event ID 9660: A sessao excedeu o maximo de objetos do tipo
objtFolder - Event ID 9667: Limite de conexao RPC excedido
- Event ID 9760: Sessao MAPI desconectada por esgotamento de recursos
Contadores de Desempenho ESE
Monitore estes contadores para detectar problemas em nivel de banco de dados que contribuem para o alto consumo de memoria:
- Database\Database Cache % Hit — deve estar acima de 99%. Abaixo de 95% indica memoria insuficiente ou thrashing de cache
- Database\Database Page Evictions/sec — valores altos significam que o cache esta cheio e descartando paginas ativamente
- Database\Log Record Stalls/sec — indica contencao de escrita que pode escalar para retencao de objetos
A Memoria do Store.exe Nao Diminui Apos a Correcao
Se a memoria do Store.exe permanece elevada apos resolver a causa raiz, o cache ESE pode precisar de intervencao manual. Reinicie o servico Microsoft Exchange Information Store durante uma janela de manutencao:
Restart-Service MSExchangeIS -Force
Em ambientes DAG, realize primeiro uma alternancia controlada do banco de dados:
Move-ActiveMailboxDatabase "Mailbox Database 01" -ActivateOnServer EX02 -Confirm:$false
Depois reinicie o Information Store no servidor ativo original. Isso garante zero tempo de inatividade para os usuarios.
Resumo
- TooManyObjectsOpenedException ocorre quando os limites de objetos MAPI sao excedidos, causando crescimento de memoria do Store.exe e desconexoes de clientes
- Event ID 9646 no log de Aplicativo identifica a caixa de correio afetada e o tipo de objeto que atingiu o limite
- Get-StoreUsageStatistics e o cmdlet principal do PowerShell para diagnosticar quais caixas de correio consomem recursos excessivos
- As cinco causas mais comuns sao suplementos do Outlook defeituosos, software de backup, falhas do indexador de pesquisa, problemas de replicacao de pastas publicas e corrupcao do banco de dados
- O alivio temporario envolve aumentar os limites por sessao via registro, mas sempre aborde a causa raiz
- eseutil /d para desfragmentacao offline resolve a corrupcao em nivel de banco de dados que contribui para vazamentos de objetos
- Monitore proativamente os Event IDs 9646, 9660, 9667 e 9760 para detectar problemas antes que impactem os usuarios
- Em ambientes DAG, sempre realize alternancias controladas antes de reiniciar o Information Store