Here are my best thoughts:
a) Do you store any
session values InProc - then check all the elements you store InProc. Although moving them to a more scalable SQL Server solution will help, don't do it unless you actually figure out the process hogging element.
At a later stage, after figuring out the faulty element, to release some process related issues - push the session to SQL server.
b) Is the
Worker process too less to handle the load? If you think so, increase the number of worker process in the application pool.
c) This is the best one - for it has helped me solve similar issues twice - the
IIS Debug diagnostic tool. You can download it from
here. The
knowledge base article titled "How to use the Debug Diagnostics Tool to troubleshoot high CPU usage by a process in IIS" explains all the necessary steps that you need to take to figure out the issue.
d) And obviously you need to check if you some
timer jobs that do the profile synchronization at that particular time. If you have it so, then please check the jobs
e) Have you though about
Search crawls lowering the scalability of your application? Crawl loads are known to cause intensive CPU usages. The
technet article titled "
Manage crawl load" explains you what happens and how you should fix it.
Good luck.