Health Monitoring show high IIS CPU usage
Open the Task Manager - sort all processes by CPU time. You will get the
PIDs of the consuming processes. Then, using Process Monitor from Sysinternals
filter the output for those
PIDs - you will get the paths which are queried by these processes. They are actually home directories of the domains.
In Plesk Panel:
Maximum CPU use %'
Then go to
IIS Manager -> Application Pools ->
And choose most suitable action.
It can be:
'NoAction' or 'KillW3wp' -- IIS 7.x (Windows Server 2008)
'Throttle' and 'ThrottleUnderLoad' -- IIS 8 (Windows Server 2012)
Doing nothing in the case of NoAction, or killing the worker process for KillW3wp. By default for application pool Limit Action is 'NoAction'
When the process is using a high amount of CPU, and after some time IIS realizes that they would use more than their limit within
<Limit interval> minute, so it kills the process for the remainder of the Limit Interval. The process is prevented from restarting until the Limit Interval expires. During this time, any user requests will fail with a HTTP 500 error. After the Limit Interval is reached, the process is allowed to restart, it uses a high amount of CPU again, and it gets killed again. This cycle will continue to repeat for this application that uses high CPU.
Unlike IIS 7 where the only solution was killing W3WP, in Windows Server 2012 we have two additional throttling options: Throttle and ThrottleUnderLoad. The Throttle option will always restrict the application to the specified amount of CPU utilization, while the ThrottleUnderLoad option will allow the process to use more than the specified amount of CPU, provided that there is no contention for CPU resources.
Lack of hardware resources, heavy load and/or improperly designed application