hahaha yes it is very silly, it turns out I was using 32bit box

no wonder bitcoind crashes when reach 4gb and ignore the rest of the memory
i already moved it to 64bit and everything seems to work fine.
thanks for the help

anyway, for anyone have similar issue but with limited RAM, using -dbcache=16 really do the trick. it works even for 100k+ addresses but every command become very slow.