MongoDB 调优记

自从设了三节点MongoDB副本集、运行一段时间后,服务却常常炸裂、动不动地就换主。于是乎就scale咯。Scale后发现一台机器的MongoDB经常无故重启,机器也反应超慢。

top图

如图所示。。。wa高得可怕(,I/O炸得腻害。肿么办呢?那就照着文档调优咯。

配置环境

  • 使用官方、最新、文档的软件包
  • 尽可能使用SSD
  • 使用EXT4、XFS,对于WiredTiger存储引擎尽可能使用XFS
  • 如使用NFS,配置bg,nolock,noatime
  • 数据存储卷上noatime,不记录访问时间
  • 配置交换空间

禁用Transparent Huge Pages

参见Disable Transparent Huge Pages

sysctl配置

禁用 zone reclaim

vm.zone_reclaim_mode=0

Swappiness

“Swappiness”是一种Linux内核设置,它在需要分配交换时会影响虚拟内存的管理,范围从0至100。越大越积极存进硬盘。

于是我们。。。

vm.swappiness=1

ulimit

合适的ulimit有利于mongod的运行。

1
2
3
4
5
6
7
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -l unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000