1. There can be many reasons - basically you are accessing 'certain' blocks 'very frequently'. So, you need to identify what is the object, file, blocks and the SQLs in question. Then understand why there are so many concurrent access to the blocks.

2. You need to identify the SQLs first and see the plan.

When you have 22GB buffer cache, it is very difficult to believe that, your DBWR is falling behind. What is the CPU usage?

These generic problem definition will not help any way. Take one problem at time and start investigate. It looks to me some SQLs playing naughty.