The MSDTC Windows service failed to start due to low memory

Microsoft.MSDTC.6.3.MicrosoftDistributedTransactionCoordinatorServiceStartup.Application.Freeupsystemmemory (UnitMonitor)

Knowledge Base article:

Summary

Microsoft Distributed Transaction Coordinator Service Startup

The Microsoft Distributed Transaction Coordinator service (MSDTC) coordinates transactions, regardless of failures that may occur during the process, so that the work is committed as a single transaction even if the work spans multiple resource managers on multiple computers.

MSDTC is a Windows service. By default, the service is configured as a manual service rather than as an automatic service. However, most applications demand-start the service as needed. If necessary, the administrator can start the service with the Services administrative tool.

Causes

Available system memory is low.

Resolutions

Free up system memory

Close some applications to free up the memory.

When you have closed applications to free up some additional memory, restart the Microsoft Distributed Transaction Coordinator service (MSDTC).

Administrators

To restart MSDTC:

To alternatively stop and restart MSDTC:

Element properties:

TargetMicrosoft.MSDTC.6.3.Servers
Parent MonitorSystem.Health.AvailabilityState
CategoryStateCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.2SingleEventLog2StateMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Microsoft Distributed Transaction Coordinator Service Startup Alert (Free up system memory)
Microsoft Distributed Transaction Coordinator Service Startup Alert (Free up system memory)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.MSDTC.6.3.MicrosoftDistributedTransactionCoordinatorServiceStartup.Application.Freeupsystemmemory" Accessibility="Public" Enabled="onEssentialMonitoring" Target="Microsoft.MSDTC.6.3.Servers" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Windows!Microsoft.Windows.2SingleEventLog2StateMonitorType" ConfirmDelivery="true">
<Category>StateCollection</Category>
<AlertSettings AlertMessage="Microsoft.MSDTC.6.3.MicrosoftDistributedTransactionCoordinatorServiceStartup.Application.Freeupsystemmemory.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/EventDescription$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="FirstEventRaised" HealthState="Success"/>
<OperationalState ID="Negative" MonitorTypeStateID="SecondEventRaised" HealthState="Error"/>
</OperationalStates>
<Configuration>
<FirstComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</FirstComputerName>
<FirstLogName>Application</FirstLogName>
<FirstExpression>
<Or>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>Microsoft-Windows-MSDTC</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>4097</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>Microsoft-Windows-MSDTC</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>53283</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</Or>
</FirstExpression>
<SecondComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</SecondComputerName>
<SecondLogName>Application</SecondLogName>
<SecondExpression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>Microsoft-Windows-MSDTC</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>4103</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</SecondExpression>
</Configuration>
</UnitMonitor>