曹工改bug:centos下,mongodb开机不能自启动,systemctl、rc.local都试了,还是不行,要不要放弃?
问题背景
最近装个centos 7.6的环境,其中,基础环境包括,redis、nginx、mongodb、fastdfs、mysql等,其中,自启动使用的是systemctl,其他几个组件,都没啥问题,唯独,这个mongodb,是死活启动不了。
但是,我这里说的,不是启动不了,如果直接在shell里敲:
systemctl start mongod.service
是没啥问题的,是可以启动的。
mongod.service大致如下,各文件夹的权限也已经仔细检查过,应该是没毛病:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
后边换成了rc.local方式:
/etc/rc.d/rc.local
#!/bin/bash
/usr/bin/mongod --fork -f /etc/mongod.conf &
但是,依然不行。
这两天,同事也在断断续续在弄,大家手里有其他事,这块暂时放下了。
转机:strace命令
我一般浏览器开的tab比较多,有个几天前的tab,是关于strace的,我当时主要是想:找一个命令,可以监控某个进程的网络请求。
本来可以用tcpdump,但是,这个不是针对某个进程的,只能通过端口过滤,一般情况下,用端口过滤也足够了,但是,总是觉得不爽。
然后找到了这个链接:
https://askubuntu.com/questions/11709/how-can-i-capture-network-traffic-of-a-single-process
里面提到了strace可以做到。试了下,确实完美解决了我的问题。
比如说,我可以attach到某个进程,然后调用进程的某个接口,让该进程调用某个微服务,然后看看我们能不能抓到:

(看不清可在单独tab查看,这个是java应用,向注册中心eureka发送的心跳,可以发现,完美抓到了)
strace的使用
可参考我的这篇简单介绍:
大家也可以直接在服务器上直接执行以下shell,查看帮助文档:
yum install strace
man strace
其主要支持两种方式,一种是直接使用strace来包装某个命令,使用strace来启动该命令;另一种,就是上面说的,attach到某个已经在运行中的进程。
然后,我想到,既然strace可以监控系统调用,那么,监控下mongodb吧,这里可以用strace来包装命令,我试着把命令换成了如下的样子:
strace -tt -s 10000 -o mongo.txt /usr/bin/mongod --fork -f /etc/mongod.conf
这块命令,分两块看。
strace -tt -s 10000 -o mongo.txt
这部分是strace的参数,
-tt 打印时间
-s 设置字符串的长度,否则具体内容显示不出来
-o 将结果输出到文件
另外部分,就是mongo的命令了:
/usr/bin/mongod --fork /etc/mongod.conf
比较正常情况下,和异常情况下的strace输出日志
在同事建议下,我们先直接在shell中执行了以下命令:
strace -tt -s 10000 -o mongo.txt /usr/bin/mongod --fork -f /etc/mongod.conf
然后,得到了mongo.txt。这个是正常的文件。
然后,我们reboot了服务器,然后不清楚文件生成到哪里了,直接find查找了一把,然后找到后,把这两个文件,都存到了pc上,用beyond compare进行对比。
下面是对比结果:

建议大图查看。
可以发现,有问题的文件里,在打开以下文件时,报了错,提示没有权限:
/sys/fs/cgroup/memory/memory.limit_in_bytes EACCES (Permission denied)
然后,我们只是知道了,有这个现象,但不知道为啥,然后就开始了一顿漫无边际的面向搜索引擎找问题。找了半天,没啥收获。
后边我们就决定再去看看官网,看看官网有没有说,怎么才是正统的服务自启动方式(已经快放弃了。。。)
柳暗花明
结果在官网的如下链接:
看到如下一段话,说SELinux,默认不让mongo访问/sys/fs/cgroup:
然后我一看,这个目录有点熟悉啊,上面报没有权限的文件,不就这个目录下吗?
/sys/fs/cgroup/memory/memory.limit_in_bytes EACCES (Permission denied)
知道原因就好说了,原来是SELinux,我们这边比较暴力,直接把这个关闭了。
关闭方式:https://www.cnblogs.com/activiti/p/7552677.html
总结
在华为的时候,组里的大佬们有一句话:办法总比困难多。
那时感觉,这也太鸡汤了。。。
我现在也有这个感觉,每次在快要放弃时,问题结果被解决了,有点意思。
另外一个感悟:方法比结果重要
曹工改bug:centos下,mongodb开机不能自启动,systemctl、rc.local都试了,还是不行,要不要放弃?的更多相关文章
- 曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告
曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告 前言 前两天,访问开发环境上一个java服务,发现一直转圈圈,因为我开着fiddler,可以看到的现象是,接口一直没返回:本来 ...
- CentOS 7开机不执行/etc/rc.local的解决方法
该死的CentOS 7居然开机不执行/etc/rc.local!!!!! 解决: chmod +x /etc/rc.d/rc.local 问题分析: 其实在/etc/rc.lacal文件上已经说明了, ...
- Centos下MongoDB数据库的安装以及配置开机自启动(三)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...
- Centos 下添加开机自启动服务和脚本【转】
最近刚玩Centos7的系统,跟Centos6还是很多方面有改变的,这里记录一下怎么在Centos7下添加开机自启动脚本和服务的方法. 1.添加开机自启服务 我这里以docker 服务为例,设置如下两 ...
- centos下设置开机启动程序
首先,设置权限, 由于/etc/rc.local是/etc/rc.d/rc.local的软连接,所以必须确保/etc/rc.local和/etc/rc.d/rc.local都有x权限(可执行) 执行命 ...
- 曹工改bug--这次,我遇到了一个难缠的栈溢出bug,还是日志相关的,真的难
前言 前几天,在linux上部署一个war包应用时,tomcat直接起不来,查看tomcat的日志,catalina.out里没啥特别的,但是查看localhost日志,发现栈溢出了. [root@l ...
- Centos 下添加开机自启动服务和脚本
最近刚玩Centos7的系统,跟Centos6还是很多方面有改变的,这里记录一下怎么在Centos7下添加开机自启动脚本和服务的方法. 1.添加开机自启服务 我这里以docker 服务为例,设置如下两 ...
- centos下mongodb安装
安装说明: 系统环境:Centos-6.5 安装软件:mongodb-linux-x86_64-2.4.9.tgz 下载地址:http://www.mongodb.org/downloads 上传位置 ...
- CentOS开机自启动/etc/rc.local不执行的解决办法
放置在开机自启动里面没有自动启动 查看文件/etc/rc.local发现是一个软连接 修改源文件的执行权限即可 chmod 755 /etc/rc.d/rc.local 查看日志可以看到开机自启动过程 ...
随机推荐
- JavaScript的基础语法及DOM元素和事件
一,JavaScript是什么? 1,JavaScript简称:js,是一种浏览器解释型语言,嵌套在HTML文件中交给浏览器解释执行.主要用来实现网页的动态效果,用户交互及前后端的数据传输等. 2,J ...
- web项目——javax.servlet.ServletException: Circular view path [registerForm]
报错: 控制台输出: 三月 21, 2019 10:12:32 上午 org.springframework.web.servlet.PageNotFound noHandlerFound 警告: N ...
- CF1353E K-periodic Garland(贪心/dp)
Question 有n盏灯,0代表暗,1代表亮,相邻两个1之间为周期k,求出最少的改变次数 Solution First 贪心方法 详见博客https://blog.csdn.net/cheng__y ...
- Gauge框架在JS中的简单应用
gauge框架简介 Gauge是一个轻量级的跨平台测试自动化工具. gauge安装[Win10 64位下测试] [百度网盘链接]https://pan.baidu.com/s/1bidE34gLLrS ...
- 02 . Python之数据类型
Python入门之数据类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数 ...
- dell5460笔记本电脑ubuntu18.04系统音频驱动的安装和使用
一.背景: 近期使用dell5460笔记本在ubuntu系统下观看视频,发现没有声音,考虑安装音频驱动. 二.音频驱动的安装 linux系统的音频驱动基于ALSA(即Advanced Linux So ...
- Rocket - diplomacy - LazyModule的组织方式
https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...
- Rocket - tilelink - ErrorEvaluator
https://mp.weixin.qq.com/s/NkbW465NAmhDsETksd2M0g 介绍ErrorEvaluator的实现. 1. 基本介绍 ErrorEvalu ...
- Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...
- Java实现 LeetCode 554 砖墙(缝隙可以放在数组?)
554. 砖墙 你的面前有一堵方形的.由多行砖块组成的砖墙. 这些砖块高度相同但是宽度不同.你现在要画一条自顶向下的.穿过最少砖块的垂线. 砖墙由行的列表表示. 每一行都是一个代表从左至右每块砖的宽度 ...