• 找到 OSChina 早上 8 点钟容易宕机的原因 ?


    最近一段时间,OSChina 网站在早上 8 点出头的时候很容易因为数据库连接池爆满而导致网站宕机。表现的情况是数据库处理大量的查询,堆积大量并发连接,导致无法再连接到数据库,执行一个简单的查询速度也非常慢,数据库机器的 CPU 很高。

    但事实上早上 8 点并非 OSC 网站的高峰期,高峰期的时候都不会挂,为什么偏偏在这么一个没多少人访问的时间点宕机呢?

    找了很久没发现系统在 8 点这个时间点有什么特殊的任务要做,对数据库也做了一些调整,包括 “ MySQL Can’t Create Thread: Errno 11 ” 的问题。

    但是问题依旧。

    再次挨个检查系统 crontab 中定义的作业。其中自动构建 Lucene 索引的作业引起了注意。

    */5 8-22 * * * /data/oschina/build.sh lucene_build

    系统每 5 分钟执行一次增量索引构建,该构建过程仅在一天早上8点到晚上10点钟进行。

    我记得当初这么设置的原因是有一个索引的构建容易出问题,为了避免出问题时没人处理,因此设置了这个时间段,后来一直没去调整。

    再查看系统跑 lucene 的进程,我靠,那么那么那么多。。。。。

    赶紧一个 killall java 杀掉所有的 lucene 索引构建进程,没几秒钟数据库的连接就下来了,系统恢复正常访问。

    所以我现在有 80% 的把握能确定宕机问题就是因为这个索引构建进程导致的。而且索引构建本身不存在问题,问题出在时间点的设定上。试想白天高峰期时候 5 分钟执行一次从来没出过任何问题。也就是说经过了一个晚上(从晚上10点到早上8点这段时间)系统又有很多的数据,导致8点钟启动增量索引构建时一次性任务量很大,无法在下一个5分钟到来之前结束,于是不断启动新的进程,于是不断连接到数据库,于是数据库性能急剧下降,于是挂机。

    好吧,It's my fault!

    将 8-22 改为 * 后继续观察!

    http://www.tuicool.com/articles/Ybe22e2

  • 相关阅读:
    vue实现简单的点击切换颜色
    Controller层注解详解
    分布式数据库系统的透明性概念
    utf8和utf8mb64的关系
    数据库设计的四个阶段
    IDEA自定义启动图
    编译过程划分
    Linux 之 CentOS 7 安装Tomcat9
    Linux 之 CentOS 7 安装JDK1.8
    Linux 之 CentOS 7安装MySQL5.7
  • 原文地址:https://www.cnblogs.com/softidea/p/5816499.html
Copyright © 2020-2023  润新知