zoukankan      html  css  js  c++  java
  • rocksdbCacheSizeGB过大导致mongodb被kill

    现象

    通过监控发现mongodb重启了两次,结合内存监控来看,很有可能是被kill了,时间点也对的上。

    查找日志

    cd /var/log
    fgrep -i 'killed process' /var/log/messages 或者 journalctl -xb | fgrep -i 'killed process'
    
    Sep 17 22:48:15 h27 kernel: Killed process 56106 (mongod) total-vm:40778532kB, anon-rss:38430872kB, file-rss:0kB, shmem-rss:0kB
    Sep 17 22:48:15 h27 kernel: Killed process 56132 (ftdc) total-vm:40778532kB, anon-rss:38433100kB, file-rss:0kB, shmem-rss:0kB
    Sep 17 22:48:15 h27 kernel: Killed process 2249 (Replica.xecutor) total-vm:40778532kB, anon-rss:38433100kB, file-rss:0kB, shmem-rss:0kB
    Sep 18 07:18:15 h27 kernel: Killed process 16984 (mongod) total-vm:33426556kB, anon-rss:30856324kB, file-rss:0kB, shmem-rss:0kB
    Sep 18 07:18:15 h27 kernel: Killed process 16988 (FlowCon.fresher) total-vm:33426556kB, anon-rss:30858472kB, file-rss:0kB, shmem-rss:0kB
    Sep 18 12:43:18 h27 kernel: Killed process 13595 (mongod) total-vm:32848996kB, anon-rss:30967520kB, file-rss:0kB, shmem-rss:0kB
    

    服务器的内存是64G,mongo的进程占了32G,还有一些其他程序,结果就OOM了。

    kill 的机制:先 kill 内存占用较大的程序

    解决问题

    服务器内存就64G,rocksdbCacheSizeGB 设置成50G太大了。将 rocksdbCacheSizeGB 缓存从50G调整到20G。

    cacheSizeGB 指的就是Cache size,包括数据和索引。Mongod本身使用内存如连接池堆栈以及sorting buffer等都是额外的,不会被统计到这个数字里面。如果索引在内存,查询冷数据取决于IO能力。如果IO latency很低,系统也没有是高负载,那响应时间应该是毫秒级的区别。但是如果查询很频繁,又涉及到很多范围、批量查询,IOPS又跟不上,那就有可能到几百几千毫秒都有可能。

    参考

    MongoDB内存配置 --wiredTigerCacheSizeGB

  • 相关阅读:
    volatile 关键字
    C++ 强制类型转换
    HTTP详解2-请求、响应、缓存
    HTTP详解1-工作原理
    C++ 基本知识
    (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
    C++ inline
    P1075 质因数分解
    P1085 不高兴的津津
    P5015 标题统计
  • 原文地址:https://www.cnblogs.com/hiyang/p/13691943.html
Copyright © 2011-2022 走看看