nothing changes if I increase number of threads.
pgbouncer doesn't change much.
also, I think the nature of high-sys-cpu during stall and and when I run pgbench is different.
During pgbench it's constantly at 30-40%, while during stall it sits at low 5-15% and then spikes to 90% after a while, with no apparent reason (i.e.: no increased load or anything), then goes down in a few secs, or stays until postgres restarted.
at this point the only thing that does help on app side is when I force frequent re-connection to postgresql (i.e. not letting postmaster live too long)