记一次confluence故障的RCA

  • Confluence故障RCA(Root Cause Analysis)
    • 问题
    • 问题原因(Root Cause)
      • 故障触发原因
      • 核实8091端口对应的服务进程
        • 关于Synchrony
      • 核实Synchrony服务进程的启动方式
      • 启动Synchrony服务并观察Confluence是否连上
      • Q&A

Confluence故障RCA(Root Cause Analysis)

本文记录我在去年给客户做的一次confluence故障原因排查,也希望借此机会与使用confluence的朋友交流一下。
本文内容均已脱敏。

问题

用户的监控系统报警confluence无法访问,主页无法打开。排查过程中我们工程师重启confluence(stop-confluence.sh/start-confluence.sh)并发现进程和端口并未能恢复正常。

问题原因(Root Cause)

故障触发原因

检查日志文件catalina.out,在07-Jul-2020 15:10:49.691处开始可见内存溢出(OOM),WebSocket Connection Manager因此停止,同时在下方日志出现“Exception in thread “synchronyProxyFilter-74905” java.lang.OutOfMemoryError: Java heap space”等多项Exception,由此判断提供8091端口的WebSocket服务的组件出现OOM。

核实8091端口对应的服务进程

根据上面得出的结果,我们判断需要恢复服务,就需要使8091端口的WebSocket重新工作,因此,需要核实该端口是由哪个应用提供服务。
通过命令netstat -tunlp | grep 8091可以获取端口的对应进程的PID,结果如下:

根据PID,可以通过命令ps -ed | grep java,我们可以得知以下四个信息:
1) PID 17511的进程为Synchrony
2) PID 17511的PPID(父进程)为16748
3) PPID 16748的进程为Confluence主程序
4) Synchrony进程的JVM配置了最大内存为1GB,Confluence的主进程JVM为8GB。

关于Synchrony

Synchrony是给Confluence提供协同编辑的引擎。它是一种允许实时同步任意数据模型的服务。
1)Synchrony的工作方式

  1. Confluence使用appId和appSecret与Synchrony服务通信。
  2. JSON Web Token(JWT)提供连接的详细信息给客户端。
  3. 在初始化Confluence编辑器时,会将Synchrony Javascript加载到浏览器中。
  4. Synchrony通过JWT和正在编辑页面的contentId打开一个WebSocket会话。
  5. WebSocket连接允许多个客户端保持同步。

所以,页面的内容数据将存储在Synchrony服务上,该服务将充当页面内容的真实来源。

核实Synchrony服务进程的启动方式

为了使Synchrony再次运作,必须找到对应的启动脚本。我们使用以下命令查找:
使用命令grep -R Synchrony ./*在/data/atlassian/confluence/bin内查找对应的启动文件。
由此落实几点:
1)Synchrony由./synchrony/start-synchrony.sh启动,由./synchrony/stop-synchrony.sh关闭。
2)start-confluence.sh里面没有发现Synchrony的启动脚本。
3)catalina.sh里面没有发现Synchrony的启动脚本。
4)/etc/init.d/内有与/synchrony/start-synchrony.sh关联的启动脚本。

启动Synchrony服务并观察Confluence是否连上

1)未重启Synchrony之前,我们可以看到日志上大量connect failed:

2)重启Synchrony之后,我们可以看到日志上大量的successfully connected:

3)故障分析
总结,由于Synchrony的OOM,导致confluence前端出现访问问题。
同时也是由于Synchrony的启动脚本与confluence的启动脚本分离,导致debug工作前30分钟被在集中研究confluence的启动问题而忽略了问题的根本原因是出在8091端口的WebSocket上。

Q&A

Q: 为什么debug期间前端会出现提示页面:BootstrapException: Unable to bootstrap application: failed to find config at: /data/atlassian/application-data/confluence/confluence.cfg.xml ?
A: 这个问题是由于debug过程中使用错误的启动脚本启动过confluence,导致confluence.cfg.xml用户权限变成root,之后再使用正确的脚本重启confluence时,由于用户组权限低于root,所以会导致无法覆盖文件的问题。
例如/data/atlassian/confluence/bin/startup.sh这个启动脚本,里面没有调用用户环境变量设置文件user.sh,也没有设置CONF_USER,从而导致问题发生,但这个并非本此故障的root cause。
正确的执行启动confluence方式是:
systemctl start confluence
/etc/init.d/confluence start
cd /data/atlassian/confluence/bin/再执行start-confluence.sh

Q: 目前单一节点故障导致业务中断的问题,是否有高可用或集群部署的可行性?
A: 参考官方资料:https://confluence.atlassian.com/doc/set-up-a-synchrony-cluster-for-confluence-data-center-958779073.html

记一次confluence故障的RCA相关推荐

  1. 记一次网络故障排除:nat虚拟机不能ping外网 浏览器可以上网

    记一次网络故障排除:nat虚拟机不能ping外网 浏览器可以上网 起因 在虚拟机中使用A软件需要联网注册,但是注册失败,随手ping了一下baidu,不通.但是可以用浏览器打开baidu. 解决 管理 ...

  2. 记一次MongoDB故障排查的过程

    数据技术嘉年华等你来 预告:11.16-17日,北京市东三环中路61号富力万丽酒店,相聚数据技术嘉年华,(99元票务)免费购票倒计时,点击查看大会详情. 张甦老师带来主题"双剑合璧带你走进M ...

  3. 记一次服务器故障带来的网站降权恢复记录

    各位关注我的朋友们好,当你看到这篇文章的时候说明我的站已经恢复了正常的访问了. 这里把我的站最近一周网站无法访问遇的情况细节进行梳理,一来做为网站异常情况记录,二来可以帮助大家遇到类似问题该如何解决. ...

  4. 记一次confluence邮件服务器配置的坑(阿里企业邮箱)

    公司想通过confluence自动发送邮件,项目经理搞了半天没搞定,公司服务器是阿里云服务器,有事就甩给我了,按照百度出来的方法试了下(可能大部分方式一,方式二就成功了,方式三可适用于阿里企业邮箱). ...

  5. 记一次网站故障排查过程(nginx 504状态码、 upstream timed out (110: Connection timed out)以及jbd2引起IO高

    一.问题描述 客户侧反馈无法正常访问系统,页面转圈,时好时坏,访问不稳定. 二.系统环境: 机器环境:UOS . nginx .php(对接其他服务器kingbase .钉钉.redis .KF) E ...

  6. 记一次网络故障的解决

    发现问题 1.用户无法打开web.runningdoctor.cn 2.监控状态无异常.无报警 3.tracert结果无异常.丢包率正常 4.用户无法访问的时候,我们能打开网站 5.多地代理访问网站, ...

  7. 无法进入Windows,无法进入PE,无限重启——记一次电脑故障

    最近搬了公司一台电脑回家办公,谁知回到家后,电脑先是开机卡在田字,再次重启就无法进入Windows. 插上装有PE的U盘,选择从U盘启动,好家伙,直接PE都进入不了,无限循环重启. 于是,拆下内存,橡 ...

  8. 待解决:记一次SSD故障,格式化失败

    前言:win7下系统盘mSATA接口的SSD突发故障,无法进入操作系统引导.硬盘接入新机器,win10下硬盘格式显示为RAW,无法格式化,磁盘检查,无错误,重建引导记录无效. 目前故障有: ①文件不可 ...

  9. 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)

    参考:http://www.cnblogs.com/liuxianan/p/err_unsafe_port.html?ref=myread 问题来源 因为经常有各种各样的大小项目要跑,全部放一个tom ...

最新文章

  1. 【iOS】Socket/TCP 通信 发送 NSString 字符串格式数据
  2. easyui datagrid 自定义加载按钮实例
  3. ES6——generator与yield
  4. 谷歌微软 IBM 激战云端,亚马逊地位恐将不保?
  5. Handbook of Constraints Programming——Chapter4 Backtracking Search Algorithms-Preliminaries
  6. python基础代码大全-python零基础入门命令方式汇总大全,快速恶补你的Python基础...
  7. 二维特征分类的基础_3D 分割分类总结
  8. ps人像精修照片步骤_15天零基础自学PS!送你整套PS教程297集+视频+素材+源文件模板6...
  9. 启动mongodb服务时报错100
  10. 怎么在pyqt界面上添加新菜单栏选项_PyQt创建菜单栏、工具栏
  11. Oracle存在修改,不存在插入记录 SQL
  12. Android SDK官网下载网址
  13. golang java 对比_golang编程语言和java的性能对比
  14. LINUX命令 VS DOS命令
  15. linux4755代表什么权限,CentOS下chmod 755和4755的区别是什么?
  16. 石乙己——孔乙己程序员版
  17. 计算机信息单位换算中的t是,算力单位换算(算力单位t)
  18. VSAN磁盘组更换硬盘
  19. 计算机网络调试记录表,计算机网络管理员中级操作技能考核评分记录表.doc
  20. 国内APP消息推送机制以及微信消息延迟问题剖析

热门文章

  1. php实现团购功能,PHP 对接美团大众点评团购券(门票)的开发步骤
  2. Cannot change network to bridged: There are no un-bridged host network adapters解决方法
  3. 纯CSS3绘制的猫咪老师——献给喜欢CSS3及《夏目友人帐》的你
  4. python实现繁简体自动转换小工具
  5. R语言生存分析中的OR值是什么?如何解读?
  6. 计算机网络超时重传时间,TCP超时重传机制
  7. 深入了解机器学习 (Descending into ML):线性回归
  8. 路飞学城之 luffy(1)
  9. 《朗读者》的读后感优秀范文4000字
  10. String类中的trim()方法实现