The very first question I would ask if what happens if you reboot. If the problem goes away I suspect this doesn't do it.
The next step is to have a monitoring tool running in the background logging what's going on so you can then go back and see if there are clues leading up to how your system got into the states it's in. My solution is to ALWAYS running collectl continuously so if something does go wrong you'll at least have some data to try and traceback what happening. In the case of collectl, it collects 100s of data points every 10 seconds and process/slab data every minute. Don't freak out - it uses <.1% of your CPU while doing this. You can also plot the data with colplot, both available on sourceforge.
An alternative is to run sar, which a number of people who haven't discovered collectl yet run.
One word of caution - the default is to collectl data samples every 10 minutes but that's far too infrequent to be of value. Sometimes you get lucky and will actually see something if conditions persists for a long time, but if you do run sar do yourself a favor and crank up the monitoring frequency to 10 seconds. It won't hurt you and the resultant data will be a lot more interesting
-mark