S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

fastdb 共享内存模式下的限制

Posted on 2010-11-03 11:01 S.l.e!ep.¢% 阅读(1337) 评论(0)  编辑 收藏 引用 所属分类: FastDB

最近项目中使用了fast db,为了提高访问效率,fast db采用diskless模式编译。
共享内存的最大尺寸受系统参数限制,
下面数据是在Linux im_monitor 2.6.9-42.ELsmp 下的缺省值:
cat /proc/sys/kernel/shmmax
33554432
默认大小都是32M;

同样fastdb里的代码也用32M作为容量上限,而且一旦越界,不再进行扩容;进程退出;
具体的代码行是:inc/database.h 文件里
#ifdef DISKLESS_CONFIGURATION
// In diskless confiuration database can not be reallocated
const size_t dbDefaultInitDatabaseSize = 32*1024*1024;
#else
const size_t dbDefaultInitDatabaseSize = 1024*1024;
#endif

为了支持fastdb在更大的共享内存下工作,需要做两点修改:
1、系统参数的修改
修改 /etc/sysctl.cfg,添加入下内容:
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 1073741824
sysctl -p 执行;
或者echo 1073741824 > /proc/sys/kernel/shmmax ,注意需要加到启动脚本里去;

2、修改fastdb源代码
const size_t dbDefaultInitDatabaseSize = 32*1024*1024;修改为合适的数值;比如32->1024

鉴于共享内存大小限制,以及不能动态扩容:当容量超过限制,进程不能进行再分配,直接退出,对于大容量的系统,对fastdb的数据使用超过2G, 或者总的虚拟内存使用量可能接近3G, 则不建议在32位操作系统中使用共享内存方式的fastdb,可以改用文件方式,实际上对于文件方式,也是通过mmap的方式来实现,对于io的写基本等同于内存效率,且可以在预分配的基础上扩容。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理