In my experience, OOM's happen when the inventory is large, especially when having lots of variables in the inventory, combined with lots (several hundreds) of hosts.
Not very scientific, but to get a rough idea on the size of your inventory, could you show the output of
$ time (ansible all -m debug -a var=hostvars |wc -l ; ansible all --list-hosts |wc -l)
19788298
1046
real 2m3.222s
user 6m54.500s
sys 0m7.772s
Mine would yield 19.788.298 hostvars lines for 1046 hosts.
That used to be a lot more, before I made some optimisations on a dynamic inventory script that calculated a bunch of variables:
$ ansible all -m debug -a var=hostvars |wc -l ; ansible all --list-hosts |wc -l
95924259
1037
(that last job took 17 minutes to run, on an i7 quadcore laptop )