If you can’t find any runaway processes, get a utility such as Volitans Smart Utility that can talk to the disk drive and see if it’s getting errors. The drive is old enough that it could well be failing, and the first symptom of that is usually a general slowdown as the drive keeps trying on bad blocks until it finally succeeds. These ‘temporary’ errors do not get reported to the operating system, and that SMART Verified yes/no thing is absolutely useless. By the time it says ‘no’ the data is usually not recoverable.
Volitans isn’t free, but has a free demo period. It’s well worth paying for though. It can watch the disk in the background and warn you when trouble starts, which has saved my bacon several times over the years. Unfortunately, external drive enclosures rarely pass SMART data; if you manage to find one that does, hang onto it so you can test externals, too.
If the drive is bad, get a ‘final’ bootable backup, then replace it. For an iMac, the easiest thing is to run from an external drive though it’s slower, which may or may not be noticeable depending on what you’re doing. If the internal drive is really bad, it can keep everything slow when it’s mounted (the system periodically tries to talk to any drive it sees). You can test this by dismounting the drive by hand. If letting it stay mounted causes slowdowns, you can put in a cron job or automator action to dismount it automatically on startup.