The Mailbox and Categorizer thread count exceeds the recommended limit

[This topic is intended to address a specific issue called out by the Exchange Server Analyzer Tool. You should apply it only to systems that have had the Exchange Server Analyzer Tool run against them and are experiencing that specific issue. The Exchange Server Analyzer Tool, available as a free download, remotely collects configuration data from each server in the topology and automatically analyzes the data. The resulting report details important configuration issues, potential problems, and nondefault product settings. By following these recommendations, you can achieve better performance, scalability, reliability, and uptime. For more information about the tool or to download the latest versions, see "Microsoft Exchange Analyzers" at https://go.microsoft.com/fwlink/?linkid=34707.]  

Topic Last Modified: 2010-04-01

The Microsoft Exchange Best Practices Analyzer examines the processes that are running on Exchange 2007 Transport servers. This includes servers that are running the Hub Transport role and servers that are running the Edge Transport role.

The Exchange Best Practices Analyzer determines the number of worker threads that the store driver uses for mailbox delivery (MaxConcurrentMailboxDeliveries) and the number of threads that the categorizer component uses.

If the sum of store driver threads and categorizer threads exceeds 80 percent of the Microsoft .NET Framework common language runtime (CLR) thread pool limit, the Analyzer generates a warning message.

We recommend an upper limit of 80 percent of the CLR thread pool for mailbox and categorizer thread usage. If the server exceeds this limit, you may experience decreased performance on the server. Specifically, if the MaxConcurrentMailboxDeliveries parameter is set to a high value, such as 100 or greater, the transport server may experience a shortage of categorizer threads. In this scenario, you may experience message delivery issues in the Exchange environment.

The categorizer is an Exchange transport component that processes incoming messages. The categorizer determines how to deliver the messages based on information about the intended recipients. After the categorizer retrieves recipient information, it applies policies, routes the messages, and performs content conversion based on the recipient information.

An Exchange 2007 Edge Transport server uses the categorizer to route messages to the appropriate destination. An Exchange 2007 Hub Transport server uses the categorizer to expand distribution lists and identify alternative recipients or forwarding addresses.

The store driver on the Hub Transport server delivers messages to and from Mailbox servers. The MaxConcurrentMailboxDeliveries parameter specifies the maximum number of delivery threads that the particular Hub Transport server can have open at the same time for message delivery. The default value for the MaxConcurrentMailboxDeliveries parameter is 30. Generally, the store driver holds threads for longer periods during the message delivery process. Therefore, if the MaxConcurrentMailboxDeliveries parameter is set to a high value, thread pool threads may be unavailable to service other requests.

To address this issue, use the Set-TransportServer cmdlet to configure a lower value for the MaxConcurrentMailboxDeliveries parameter. This value should be such that the sum of store driver threads and categorizer threads does not exceed the recommended maximum of 80 percent of the CLR thread pool.

Note

To determine the size of the available CLR thread pool, multiply the number of logical processors on the server by 25.

To configure the MaxConcurrentMailboxDeliveries parameter

  1. On the Hub Transport server, start the Exchange Management Shell.

  2. To retrieve the current MaxConcurrentMailboxDeliveries value, run the following command. Replace <servername> with the name of the Exchange server.

    Get-TransportServer <servername> | format-list
    
  3. To set a new MaxConcurrentMailboxDeliveries value, run the following command. Replace <servername> with the name of the Exchange server, and replace <value> with an integer, such as 30.

    Set-TransportServer <servername> -MaxConcurrentMailboxDeliveries <value>
    
  4. Exit the Exchange Management Shell.

For More Information

For more information about Set-TransportServer cmdlet parameters, see Managing Message Throttling.

For more information about how to use the Set-TransportServer cmdlet, see Set-TransportServer.