Neal's quick hack at Memory management inside Tokyo Cabinet Essentially I added: * rssgoal parameter as peer of lcnode/ncnode * uses libproc to get RSS memory size * change to tcbdbcacheadjust() to proportionally adjust down leafc and nodec * if actual memory usage is 10% higher than the goal via standard methods in tcbdbcacheadjust() Example usage w/ 2.3 Gig: #nmemb=256#ncnum=10240#lmemb=512#lcnum=65536#bnum=100000000#xmsiz=536870912#rssgoal=2300000000#opts=l Still in testing. Results inconclusive due to repeated server crashes .. I attempted to substitute this version of tc for a current older running version. That might cause crashes. This is a work-in-progress so the build modification are not integrated into 'configure' inputs. Build instructions 1) wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.34.tar.gz 2) wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.35.tar.gz 3) locate proc/readproc.h - if it doesn't exist install it - standard headers for libproc.so 4) tar xvfz both tarballs 5) apply the patch to tokyocabinet-1.4.34 patch -p0 < tc_1_4_34_rss_management.patch 6) configure and make as normal - will error on link 7) make -f Makefile.TC.libproc 8) configure and make tokyotyrant as normal - will error on link 9) make -f Makefile.TT.libproc 10) Install ttserver_rsshack, libtokyotyrant_rsshack.so.3 & libtokyocabinet_rsshack.so.8 in the normal places 11) ldd libtokyocabinet_rsshack.so.8 libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x00002ba0f91f9000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002ba0f9409000) librt.so.1 => /lib64/librt.so.1 (0x00002ba0f961d000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ba0f9827000) libm.so.6 => /lib64/libm.so.6 (0x00002ba0f9a41000) libc.so.6 => /lib64/libc.so.6 (0x00002ba0f9cc4000) libproc-3.2.7.so => /lib64/libproc-3.2.7.so (0x00002ba0fa013000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) 12) ldd ttserver_rsshack libtokyotyrant_rsshack.so.3 => /usr/local/lib/libtokyotyrant_rsshack.so.3 (0x00002ab055cd6000) libtokyocabinet_rsshack.so.8 => /usr/local/lib/libtokyocabinet_rsshack.so.8 (0x00002ab055eed000) libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x00002ab05616c000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002ab05637d000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002ab056591000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ab0567a6000) libdl.so.2 => /lib64/libdl.so.2 (0x00002ab0569be000) librt.so.1 => /lib64/librt.so.1 (0x00002ab056bc2000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab056dcb000) libm.so.6 => /lib64/libm.so.6 (0x00002ab056fe6000) libc.so.6 => /lib64/libc.so.6 (0x00002ab057269000) libproc-3.2.7.so => /lib64/libproc-3.2.7.so (0x00002ab0575b7000) /lib64/ld-linux-x86-64.so.2 (0x00002ab055abb000) It should be trivial to extract the code/functions from libproc to remove the dependency on librproc. libproc's get_proc_stats() reads and parses the /proc/[PID] file to fill a proc_t struct. This would be a bit cleaner...