A simillar situation was met and the solution in that case was to uninstall some feature using stsadm and restart of iis.
Other options which will help you arrive at solving the problem are:
1. Perform Load testing, using tools such as Visual Studio Team Test or WCAT
2. If you are using IIS7 configure Failed Request Tracing to generate a trace if requests take more a certain amount of time
3. Use logparser to see which requests arrived at the time of the CPU spike
the following command will analyze logfile and find witch page have long time execution
c:\> logparser "select top 10 cs-uri-stem, time-taken from ex071105.log group by cs-uri-stem order by time-taken desc" -q:on
4. Use the following :
a. Process Explorer
b. Windows Resource Monitor
c. Detailed error logging
d. use custom trace logging.
5. Check whether it happens on AppPool recycles.
6. Changing Session state from Inproc to State server or sql server is one option
7. IISPeek will also help.
8. Check what appliaction pool the w3wp.exe is attached to.
in task manager show the processID of the task
and run the IIS script iisapp.vbs to show what application pool is attached to what teh offending w3wp.
IF there are multiple applications in that pool seperate them off futher to narrow down the search if possible.
9. Moreover you can follow , iis app pool settings,