Tracking (un)successful autovacuums in postgres
First figure out what PostgreSQL version you have. If it is truly 9.5, upgrade before you do anything else. I mean it. The rest of my answer deals with recent PostgreSQL versions.
A row lock won't block autovacuum progress (unless it is an anti-wraparound vacuum), but a table lock can. These are logged if you set log_autovacuum_min_duration to something else than -1:
LOG:  skipping vacuum of &quot;vacme&quot; --- lock not available

or
ERROR:  canceling autovacuum task
DETAIL:  while scanning block 5756 of relation &quot;laurenz.vacme&quot;

Keep all autovacuum settings at default values, except autovacuum_vacuum_cost_delay, which you set to 2ms.
Now why is your autovacuum not running? Some ideas:

You didn't commit the transaction that deleted the rows.

The autovacuum workers are doing something else. Check pg_stat_activity.

Check for oddities in the log file.