========================================================================================================================== 问题 1、修改数据目录和日志文件目录后无法启动 修改日志目录及数据目录的权限。将各目录的属组、属主修改为 mongod 。chown -R mongod:mongod mongodb/ 2、无法开启http接口的监控页面 Changed in version 3.6: MongoDB 3.6 removes the deprecated HTTP interface and REST API to MongoDB. 4、透明大页问题 Transparent Huge Pages (THP) 1、参数位置 /sys/kernel/mm/transparent_hugepage/enabled /sys/kernel/mm/transparent_hugepage/defrag 2、背景 标准大页(Huge Pages)是从Linux Kernel 2.6后被引入的。目的是使用更大的内存页面(memory page size) 以 适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。 3、相关知识 内存页面: 一个页面的大小为4096字节,1M有256个页面,1GB内存有256000个页面。CPU有内存管理单元,内存管理单元中有 页面的列表。 内存物理地址和虚拟地址的映射关系保存在名为页表的数据结构中,随着计算机硬件的不断迭代和提升,计算的内 存越来越大,映射关系也非常巨大,读取这个映射关系会非常消耗时间,因此最近使用的映射地址都有缓存,这个 缓存称为 转译后备缓冲器(TLB)。 TLB缺失问题: 内存越大,内存映射页面越多,TLB缓存缺失的可能性越大。而Transparent Huge Pages (THP)透明大页面可以解决 这个问题。THP 开启的情况下,khugepaged内核线程会将4KB 页扩张到2MB,内存占用量增大512倍。 将/sys/kernel/mm/transparent_hugepage/enabled 设置为madvise,khugepaged 默认情况下不会处理内存,除非应 用程序使用madvise 系统调用,给特定范围的内存进行 THP 处理。 透明大页面存在问题: 透明大页面可以提升某些程序的使用性能,但可能会造成内存泄漏等问题。 4、透明大页面在MongoDB中存在的问题 开启透明大页面(THB)可以减少在具有大内存的计算机上存在的TLB缓存缺失的情况,但THB在运行数据库的计算机上通常 表现不佳,甚至会造成严重的问题,因为数据库访问内存具有稀疏不连续的特点,因此在MongoDB服务器上应该关闭此项 功能。 5、解决办法 方法一:使用脚本进行修改内核运行参数 1、创建脚本 vim /etc/init.d/disable-transparent-hugepages #!/bin/bash ### BEGIN INIT INFO # Provides: disable-transparent-hugepages # Required-Start: $local_fs # Required-Stop: # X-Start-Before: mongod mongodb-mms-automation-agent # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Disable Linux transparent huge pages # Description: Disable Linux transparent huge pages, to improve # database performance. ### END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' > ${thp_path}/enabled echo 'never' > ${thp_path}/defrag re='^[0-1]+$' if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]] then # RHEL 7 echo 0 > ${thp_path}/khugepaged/defrag else # RHEL 6 echo 'no' > ${thp_path}/khugepaged/defrag fi unset re unset thp_path ;; esac 2、修改权限 sudo chmod 755 /etc/init.d/disable-transparent-hugepages 3、设定开机启动 chkconfig --add disable-transparent-hugepages 方法二:使用tuned或ktune工具进行动态修改内核运行猜数 1、创建一个profile文件 mkdir /etc/tuned/no-thp 2、修改tuned配置文件 /etc/tuned/no-thp/tuned.conf [main] include=virtual-guest [vm] transparent_hugepages=never 3、载入配置文件 tuned-adm profile no-thp 5、MongoDB 可视化工具 adminmongo mongoVUE ==========================================================================================================================