I've spent a witless few days trying to sort this same issue out, I've even used the deregister_heartbeat code - to no effect. I wanted to share a solution I put in place to keep Apache / MySQL from dying whilst you try to find out what's going on.
In the end after creating a test copy of the site on a different server and swapping to a default theme I was able to work out that an extention engine in a child theme was making Ajax calls that were somehow getting past the deregistered heart beat - we've now ditched the engine and will probably write the child-theme from scratch.
To buy me some time whilst tracking the offending stuff down I needed a way to drop the threads from the webserver before they occupied all available spaces - and we have a big webserver - it was nonetheless causing sites to crash after only an hour since an Apache restart. You can of course employ a hard Apache restart (apachectl restart or service apache restart on a Debian machine) - but this kills all connections - and in a multi-host environment its going to mess someone up. If you are on an *NIX system, you can do the following, it requires w3m (or equivalent braile-mode browser that can run dumps from the CLI like elinks, lynx or links)
#!/bin/bash
kill `w3m -dump http://<server address>/server-status | grep "admin-ajax.php"|awk '{print $2}'`
Make sure you get the backticks right after the kill and at the end of the script. We basically use w3m to hit the server-status page (you need to have this enabled in your Apache config - make it available only from a local IP address, it gives a lot away) - we pipe the results through grep just hone in on processes that deal with admin-ajax.php - and then we feed those lines into awk which basically returns a list of the associated PID numbers to the kill command.
The result is that the process threads in Apache will die - but will appear for a short while in any server-status list as open slot with no current process - subsequent hits to your site will occupy these threads in a normal fashion again
We put the whole thing into a cron task running every 5 minutes or so - effect is we got the threads appearing, but they never stayed around long enough to cause issue.