Objects in an Exchange Online mailbox unable to be synchronized to the Mac Outlook 2016 client cause significant CPU usage and impact battery life.
The recent Spectre & Meltdown updates have me keeping a closer eye on CPU usage and slowdowns in general. In doing so I have been reminded just how much CPU Microsoft Outlook 2016 for Mac takes up. On both my Mac systems it’s continually on the top apps list taking up 70%+ of a core. Way more than it should. I get plenty of email, but really not enough to keep it so busy. On my laptop it’s impacting battery life significantly whenever Outlook is open. This morning I decided to dig a little deeper into what’s going on.
Alongside the CPU usage, I noticed consistent network activity from the Outlook app as well - between 100-200Kbps. When I’m mobile and using a MiFi or tethering to a phone, that adds up. There must be something behind that. My setup is pretty simple - a corporate email account run through Exchange Online / Office 365, and both Windows and Mac Outlook clients. The Windows Outlook 2016 app is well behaved, using minimal resources. This must just be a Mac problem.
Outlook 2016 for Mac doesn’t give you much detail on what it’s up to, but it does have a few things we can look at.
First up - Sync Errors (Available from the Window menu). Nope, nothing there.
Next - Sync Status. This looks interesting - It’s constantly trying to sync a particular folder. That item pops up again and again.
But why? To get more info we need to head back to the Sync Errors window. Sync Errors has a settings icon at the top right coder, that will let us “Turn on logging for troubleshooting.” That’s a well hidden configuration setting. It doesn’t bother to mention that you need to restart Outlook for the logs to actually show up.
The process of enabling logging for Outlook on Mac is detailed at this Microsoft page
If I open up the directory “~/Library/Containers/com.microsoft.outlook/Data/Library/Logs/” now I have a log file to look into. A log file that is filled with messages like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <?xml version=\"1.0\" encoding=\"utf-8\"?> <s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"> <s:Header> <h:ServerVersionInfo MajorVersion=\"15\" MinorVersion=\"20\" MajorBuildNumber=\"407\" MinorBuildNumber=\"11\" Version=\"V2017_10_09\" xmlns:h=\"http://schemas.microsoft.com/exchange/services/2006/types\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/> </s:Header> <s:Body> <m:GetItemResponse xmlns:m=\"http://schemas.microsoft.com/exchange/services/2006/messages\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:t=\"http://schemas.microsoft.com/exchange/services/2006/types\"> <m:ResponseMessages> <m:GetItemResponseMessage ResponseClass=\"Error\"> <m:MessageText>The recurrence format wasn't valid., The duration between startTime and endTime (6.00:30:00) of the recurrence is greater than the minimum duration between two occurrences (1.00:00:00).</m:MessageText> <m:ResponseCode>ErrorInvalidOperation</m:ResponseCode> <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey> <m:Items/> </m:GetItemResponseMessage> <m:GetItemResponseMessage ResponseClass=\"Error\"> <m:MessageText>The recurrence format wasn't valid., The duration between startTime and endTime (6.00:30:00) of the recurrence is greater than the minimum duration between two occurrences (1.00:00:00).</m:MessageText> <m:ResponseCode>ErrorInvalidOperation</m:ResponseCode> <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey> <m:Items/> </m:GetItemResponseMessage> </m:ResponseMessages> </m:GetItemResponse> </s:Body> </s:Envelope>
From the timestamps, Outlook for Mac is nonstop trying to sync with Exchange Online but getting errors and then instantly trying again. This is very poor design, not backing off or throttling when an error is encountered or ignoring the offending object and moving on with the sync operation.
Here’s the critical part of the log errors: “The recurrence format wasn’t valid., The duration between startTime and endTime (6.00:30:00) of the recurrence is greater than the minimum duration between two occurrences (1.00:00:00).”
The error message itself narrows down a little bit what we’re looking for - a meeting invite for a recurring meeting.
Finding and Removing the Problematic Objects
To find these items, I needed to switch back over to the Windows Outlook client, because obviously these items weren’t syncing down to my Mac properly. I opened up the offending “2011” folder, and arranged the messages by Type. This way we can get straight to the Meeting Invites. Outlook does show you “Type: Recurring Meeting” in the messages list so this makes it easier.
I have all of these old emails saved in a PST folder, so it was easy to delete a few and see if anything changed on the Outlook for Mac side. Eventually I found this innocent looking meeting invite which was causing all my problems (there were actually two nearly identical ones with different lists of people on the “to” line which is why Outlook for Mac was failing to sync 2 objects not 1).
To me it looks like a perfectly fine meeting - not one that would generate an error message about the duration or recurrence. Nevertheless, without that mail in the folder, Outlook for Mac was able to continue syncing, and once completely synchronized the CPU usage calmed right down, now idling at 0.0-0.1%.
Unfortunately the Outlook for Mac client can get into these situations without behaving correctly (backing off and not hammering Exchange Online with requests), or alerting the user to a persistent sync problem. Most people who have this issue have likely never looked into that Sync Status window at all. It was such a frustration that I decided to put a nice serene waterfall image at the top of this page just to relax me when proofreading it or for others that have to go through the painstaking procedure of finding and deleting un-syncable objects. Hope it helped.