oom-killer killing processes despite having plenty of free swap

Solution 1:

Take a look at this page for some information that may help in diagnosing your problem.

In particular, you need to look at /proc/meminfo and /proc/slabinfo for more information as a start.

Solution 2:

You have a device driver or other kernel subsystem allocating a large amount of real-memory. That's the reason it's not swapping out to your swap space.

You need to identify the work-load you are doing and try to isolate the kernel system that's allocating large amounts of memory.