Load, on Linux, is calculated with a non-trivial formula somewhere deep in the kernel's guts. But you can simply think of it as (somewhat) directly proportional with the number of processes waiting to run. From my experience there are two situations - either you have a billion concurrent processes and the run queue waiting time is naturally large or some proccesses got blocked somehow. In the first case it should be pretty obvious where the problem is. Note that in certain contexts high load doesn't really mean the system is trashed.
Now, in the second case you problem might be with processes stucked in uninterruptible sleep that typically block the run queue. They have the 'D' flag in
ps -ef. Use strace, lsof, fuser to figure out what is happening.
For long-term profiling you can use Collectd and Process+CPU plugins.