one additional thing about the behaviour of vm.*{min,max} is that they do not (currently?) consider how much memory is consumed by major kernel consumers like pools. eg, there is a known radeondrmkms leak we have not figured out why it happens only sometimes, and this ends up making the kmem-160 or kmem-192 (size depends on DIAGNOSTIC, IIRC) pool grow, possibly using serious percentage of the total memory, which can end up meaning that adding vm.*min to 95% actually means way more than 100% of available memory.
so, also check what "vmstat -m" says pools are using. (we should fix this. anyone want to define what the right solution is? :-) .mrg.