How can I investigate sustained high CPU usage by Microsoft.Exchange.Rpc.ClientAccess.Service.exe?
Solution 1:
See if this helps: http://social.technet.microsoft.com/Forums/nl/exchange2010/thread/55da7565-abc1-4c40-bade-7d3dc420de2e. Lots of possible causes are discussed there.
Solution 2:
I've discovered the root cause(s) and will update them here:
High CAS CPU was caused by
BES servers. This was sporadic and variable
Journaling. Our archiving processes was using 8000 MAPI connections to a server, and caused high CPU
Outlook users on NAT. Many people using outlook anywhere were behind a NAT. Our load balancer load balanced them by IP rather than cookie (as 2010 sp1+ supports it)
Activesync Calendar issue. iPhones were hammering our server with calendar updates that were rejected due to an Apple programming bug. We stopped the ActiveSync app pool and updated autodiscover to point all Activesync users to a dedicated CAS Array
So in the end the solution was to create a dedicated CAS array for Jornaling, Activesync, and Outlook Anywhere traffic. We co-located Journaling + BES onto the same array. This was a poor mans QOS and fault isolation for each service.
The tool we used to identify the high CPU culprit was "Exmon", however just know that running Exmon will cause trace files to appear in \program files(x86)\Exmon. If these files aren't deleted they may fill the drive.
Solution 3:
Process Explorer can help break down exactly what the process is doing.
Be warned though, procexp.exe can use quite a bit of CPU itself.
Solution 4:
Do you have users with iPhone's, iPad's, etc?
See below if you do.
We ran into this at work.
http://www.networkworld.com/news/2013/021313-byod-ios-exchange-servers-266683.html iOS devices hobble Exchange servers when they synch
AND
(Linked in article) http://support.microsoft.com/kb/2814847?wa=wsignin1.0 Rapid growth in transaction logs, CPU use, and memory consumption in Exchange Server 2010 when a user syncs a mailbox by using an iOS 6.1 or 6.1.1-based device