• 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

  • 相关阅读:
    进程实际操作篇2
    进程的实际操作篇1
    进程的理论知识
    解决套接字粘包,udp套接字对象的使用和socketserver模块实现并发
    day24-网络知识扫盲,socket的基本使用
    day23-网络编程之互联网基础,tcp/ip协议详细介绍
    day21-多态和多态性,鸭子类型,反射,内置方法,异常处理
    JAVA WEB小测
    JAVA动手动脑
    JAVA课上动手动脑问题2
  • 原文地址:https://www.cnblogs.com/hiyang/p/13691943.html
Copyright © 2020-2023  润新知