问题背景

最近装个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的使用

可参考我的这篇简单介绍:

Linux下,如何监控某个进程到底向哪个地址发起了网络调用

大家也可以直接在服务器上直接执行以下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)

然后,我们只是知道了,有这个现象,但不知道为啥,然后就开始了一顿漫无边际的面向搜索引擎找问题。找了半天,没啥收获。

后边我们就决定再去看看官网,看看官网有没有说,怎么才是正统的服务自启动方式(已经快放弃了。。。)

柳暗花明

结果在官网的如下链接:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/#install-mongodb-community-edition

看到如下一段话,说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都试了,还是不行,要不要放弃?的更多相关文章

  1. 曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告

    曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告 前言 前两天,访问开发环境上一个java服务,发现一直转圈圈,因为我开着fiddler,可以看到的现象是,接口一直没返回:本来 ...

  2. CentOS 7开机不执行/etc/rc.local的解决方法

    该死的CentOS 7居然开机不执行/etc/rc.local!!!!! 解决: chmod +x /etc/rc.d/rc.local 问题分析: 其实在/etc/rc.lacal文件上已经说明了, ...

  3. Centos下MongoDB数据库的安装以及配置开机自启动(三)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...

  4. Centos 下添加开机自启动服务和脚本【转】

    最近刚玩Centos7的系统,跟Centos6还是很多方面有改变的,这里记录一下怎么在Centos7下添加开机自启动脚本和服务的方法. 1.添加开机自启服务 我这里以docker 服务为例,设置如下两 ...

  5. centos下设置开机启动程序

    首先,设置权限, 由于/etc/rc.local是/etc/rc.d/rc.local的软连接,所以必须确保/etc/rc.local和/etc/rc.d/rc.local都有x权限(可执行) 执行命 ...

  6. 曹工改bug--这次,我遇到了一个难缠的栈溢出bug,还是日志相关的,真的难

    前言 前几天,在linux上部署一个war包应用时,tomcat直接起不来,查看tomcat的日志,catalina.out里没啥特别的,但是查看localhost日志,发现栈溢出了. [root@l ...

  7. Centos 下添加开机自启动服务和脚本

    最近刚玩Centos7的系统,跟Centos6还是很多方面有改变的,这里记录一下怎么在Centos7下添加开机自启动脚本和服务的方法. 1.添加开机自启服务 我这里以docker 服务为例,设置如下两 ...

  8. centos下mongodb安装

    安装说明: 系统环境:Centos-6.5 安装软件:mongodb-linux-x86_64-2.4.9.tgz 下载地址:http://www.mongodb.org/downloads 上传位置 ...

  9. CentOS开机自启动/etc/rc.local不执行的解决办法

    放置在开机自启动里面没有自动启动 查看文件/etc/rc.local发现是一个软连接 修改源文件的执行权限即可 chmod 755 /etc/rc.d/rc.local 查看日志可以看到开机自启动过程 ...

随机推荐

  1. 百度前端技术学院2018笔记 之 利用 CSS animation 制作一个炫酷的 Slider

    前言 题目地址 利用 CSS animation 制作一个炫酷的 Slider 思路整理 首先页面包含三种东西 一个是type为radio的input其实就是单选框 二是每个单选框对应的label 三 ...

  2. 2018京东校招Java笔试题

    相比阿里巴巴,京东的题都是考研基础题,加上一点java基础知识和linux命令. 1. 单选题(19道题,每题2分): 1)4个并发进程都需要5个同类资源,则至少需要多少个资源,才不会导致死锁? 2) ...

  3. Black Hat Python之#2:TCP代理

    在本科做毕设的时候就接触到TCP代理这东西,当时需要使用代理来对发送和收到的数据做修改,同时使用代理也让我对HTTP协议有了更深的了解. TCP Proxy用到的一个主要的东西就是socket.pro ...

  4. web selenium 小笔记

    常用库导入 from selenium import webdriver #导入webdriver模块 from selenium.webdriver.common.by import By # XP ...

  5. 最短路径——Dijkstar算法

    背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Dijkstar算法理解: Dijkstar算法的核心思 ...

  6. Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

    1.简介 上一篇中宏哥已经将其的理论知识介绍了一下,这一篇宏哥就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划. 2.网络计划实战 通过上一篇的学习,宏哥将其 ...

  7. Rocket - debug - Example: Accessing Registers Using Abstract Command

    https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using ...

  8. js规则和运算符

    通过“+”号或toString()方法将数值转换成字符串. 通过parseInt()将字符串转换成整型. 通过parseFloat()将字符串转换成浮点型. charAt() 获取字符串特定索引处的字 ...

  9. Java 第十一届 蓝桥杯 省模拟赛 小明的城堡

    小明用积木搭了一个城堡. 为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个 n 行 m 列的方格图上,每个积木正好占据方格图的一个小方格. 当然,小明的城堡并不是平面的,而是立体的.小明 ...

  10. (Java实现) 洛谷 P1605 迷宫

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...