全文检索缓存的内存管理预先分配内存应该分配多少?
我的全文检索把结果缓存到内存中,定时进行删除,结果的数量巨大,在查询的时候需要不停的进行申请和释放内存,所以想做个内存池来管理内存,一方面减少内存碎片,一方面提高效率。想了好长时间也没法入手,内存池的原理明白,也有现成的框架,但是就是不知道应该预先申请多少内存。内心十分纠结,分多了浪费内存,分少了反而会降低效率。寻求思路
[解决办法]
事先分配多少,这个是无法预计的,原因在于,不同业务对系统的压力不同,单个业务,查询信息的不同,也会产生不同压力。但有一点可以肯定的是,事先分配多少与压力有关,压力又与业务及其业务参数有关。因此,正确的做法是,统计 + 机器学习。
个人建议:
1.根据业务处理代码,预算出一个比较精准的值,作为标准参照。
2.预分配大小,这个值,让系统从小值开始尝试,逐渐把值增大,每次尝试,统计出各方面的性能。
3.根据1和2的调整,做一个机器学习模块,通过对各方面的性能数据,使用各种策略分析,自行对比,然后给出最终的统计结果。得出最终统计结果后,可以人为设定预分配大小,让机器自动设定就更好。