Troubleshooting “High CPU Usage on SharePoint Server”
Issue: The SharePoint server experiences unusually high CPU consumption, leading to slow page loads, delayed workflows, and performance degradation.
Causes: Misconfigured IIS settings, inefficient SQL queries, excessive background jobs, large list processing, or resource-intensive third-party solutions.
1. Identify the Root Cause of High CPU Usage
Before applying fixes, determine which process is consuming the most CPU resources.
Tools for Diagnosis:
✅ Task Manager (taskmgr.exe) → Identify high-CPU processes.
✅ Resource Monitor (resmon.exe) → Analyze CPU consumption at a granular level.
✅ Performance Monitor (perfmon.msc) → Track long-term CPU trends.
✅ SharePoint Health Analyzer → Check for CPU-related warnings.
✅ SQL Server Profiler → Identify resource-heavy queries.
✅ IIS Worker Process (w3wp.exe) Monitoring → Check if SharePoint IIS application pools are consuming excessive CPU.
PowerShell to List High-CPU Processes:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
2. Check & Optimize IIS Worker Processes (w3wp.exe)
Each IIS Worker Process (w3wp.exe) handles SharePoint requests and can cause high CPU usage if misconfigured.
Fixes:
🔹 Open Task Manager → Processes → Sort by CPU and find w3wp.exe.
🔹 Identify which SharePoint web application is consuming high CPU:
Get-WmiObject Win32_Process | Where-Object { $_.Name -eq "w3wp.exe" } | Select-Object CommandLine, ProcessId
🔹 Recycle application pools to free up CPU:
Restart-WebAppPool -Name "SharePoint - 80"
🔹 Enable IIS request limits to prevent excessive CPU consumption.
3. Optimize SQL Server Queries to Reduce CPU Load
SQL Server is a major component of SharePoint, and inefficient queries spike CPU usage.
Fixes:
🔹 Identify high-CPU queries:
SELECT TOP 10 * FROM sys.dm_exec_requests ORDER BY cpu_time DESC;
🔹 Optimize database performance:
- Rebuild fragmented indexes:
ALTER INDEX ALL ON [dbo.AllDocs] REBUILD; - Reduce auto-growth settings to prevent frequent resource spikes.
🔹 Offload read-heavy operations to read replicas (if using SQL Always On).
4. Reduce SharePoint Timer Jobs & Workflows Consumption
Excessive SharePoint Timer Jobs and workflows cause high CPU usage.
Fixes:
🔹 Navigate to Central Admin → Monitoring → Review Job Definitions.
🔹 Disable unnecessary timer jobs or schedule them during off-peak hours.
🔹 Restart SharePoint Timer Service (SPTimerV4) periodically:
Restart-Service SPTimerV4
🔹 Review workflow performance and move complex workflows to Power Automate.
5. Optimize SharePoint Caching to Reduce CPU Load
Inefficient caching causes repeated database queries, leading to high CPU consumption.
Fixes:
🔹 Enable BLOB Caching in web.config:
<BlobCache location="C:\BlobCache" path=".*\.(gif|jpg|png|css|js|ico)$" maxSize="10" enabled="true" />
🔹 Configure Output Caching in Central Administration.
🔹 Reduce Object Cache Size in site collection settings.
6. Manage Large Lists & Queries for Better CPU Performance
Processing large lists with over 5,000 items can spike CPU usage.
Fixes:
🔹 Enable List View Threshold limits:
- Central Admin → Manage Web Applications → Resource Throttling.
🔹 Index columns in large lists to improve query efficiency.
🔹 Archive old or unused lists.
7. Adjust CPU Priority for SharePoint & Background Processes
To prevent SharePoint from consuming too many CPU resources, adjust process priorities.
Fixes:
🔹 Open Task Manager → Find w3wp.exe → Right-click → Set Priority → Below Normal.
🔹 Use PowerShell to dynamically adjust CPU priority:
Get-Process w3wp | ForEach-Object { $_.PriorityClass = "BelowNormal" }
🔹 Set CPU affinity for IIS Worker Processes to balance load across cores.
8. Optimize Disk & Virtual Memory Settings
If paging occurs frequently, CPU usage can increase due to excessive disk read/writes.
Fixes:
🔹 Move SQL database and transaction logs to separate disks.
🔹 Increase paging file size (set it to 1.5x RAM size).
🔹 Run Disk Cleanup (cleanmgr) to remove unnecessary files.
9. Check for Faulty Third-Party Solutions or Custom Code
Poorly optimized third-party solutions or custom scripts can consume excessive CPU.
Fixes:
🔹 Disable third-party web parts & solutions and monitor CPU usage.
🔹 Review custom code for performance issues using:
Get-SPFeature | Where-Object { $_.Scope -eq "Web" }
🔹 Use SharePoint Developer Dashboard to identify slow web parts.
10. Regular Monitoring & Automation
10.1. Automate Resource Monitoring
✅ Set up Performance Monitor Alerts for high CPU usage.
✅ Use SharePoint Health Analyzer to detect CPU spikes.
✅ Configure Event Viewer Alerts for CPU-related warnings.
10.2. Keep SharePoint & SQL Server Updated
✅ Apply the latest SharePoint Cumulative Updates (CUs).
✅ Regularly patch SQL Server and Windows Server.
