正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史记录

« 前一个 版本 2 当前 »

历史存储服务pkhisdb占用内存

  • 在缺省情况下,使用时间越长,访问次数越多内存分配的越大
  • mongodb通过操作系统内存映射方式分配内存,自己并不管理内存,导致缺省情况下,物理内存占用总是趋向于100%。
  • mongodb的存储引擎缺省分配物理内存策略:
    • 最大物理内存大小算法如下:(电脑总物理内存-1G)/2。如服务器物理内存64G,pkhisdb最大内存可以占用(64-1)/2=31.5G物理内存
    • 如果通过下面方法修改存储引擎大小,如wiredTigerCacheSizeGB=4。但在2012上实测内存还是占用到95%。
  • 可以通过下面方法修改
    • 在windows 2008下可以通过安装操作系统自带工具WSRM(系统资源管理器)来限制内存
    • 在windows2012下没有WSRM,需要通过Hyper-V
    • Linux可以通过cgroups工具限制物理内存
  • 服务器内存很大时,虽然看起来使用的内存很多,不会影响mongodb使用,但影响该服务器上其他程序的使用。
  • 如1500点的历史数据,运行1天后,内存达到20G左右(服务器内存总64G),使用processexplore工具(查看方法:进程探测器,查看程序内存和虚拟内存、启动时间等信息)看到pkhisdb内存为19G,这样其实不会出现问题:

修改方法

  • 如希望修改pkhisdb占用内存大小,最大为4G,可以通过修改配置文件config/pkhisdb.conf文件,该文件缺省为:
dbpath=d:/hisdb
logpath=../log/hisdb.log 
port=30002
  • 在文件最后增加一项,如要限制最大物理内存为4G:wiredTigerCacheSizeGB=4

  • 重新启动pkhisdb,或者启动整个eview服务端
  • 此时查看log/hisdb.log,可以看到大约第11行的log中,有:wiredTiger: { engineConfig: { cacheSizeGB: 4.0 } } },说明设置生效
CONTROL [initandlisten] options: { config: "..\config\pkhisdb.conf", net: { port: 30002 }, storage: { dbPath: "d:/hisdb", engine: "mmapv1", journal: { enabled: true }, mmapv1: { smallFiles: true }, wiredTiger: { engineConfig: { cacheSizeGB: 4.0 } } }, systemLog: { destination: "file", path: "../log/hisdb.log" } }



  • 无标签