记一次confluence故障的RCA
记一次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的工作方式
- Confluence使用appId和appSecret与Synchrony服务通信。
- JSON Web Token(JWT)提供连接的详细信息给客户端。
- 在初始化Confluence编辑器时,会将Synchrony Javascript加载到浏览器中。
- Synchrony通过JWT和正在编辑页面的contentId打开一个WebSocket会话。
- 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相关推荐
- 记一次网络故障排除:nat虚拟机不能ping外网 浏览器可以上网
记一次网络故障排除:nat虚拟机不能ping外网 浏览器可以上网 起因 在虚拟机中使用A软件需要联网注册,但是注册失败,随手ping了一下baidu,不通.但是可以用浏览器打开baidu. 解决 管理 ...
- 记一次MongoDB故障排查的过程
数据技术嘉年华等你来 预告:11.16-17日,北京市东三环中路61号富力万丽酒店,相聚数据技术嘉年华,(99元票务)免费购票倒计时,点击查看大会详情. 张甦老师带来主题"双剑合璧带你走进M ...
- 记一次服务器故障带来的网站降权恢复记录
各位关注我的朋友们好,当你看到这篇文章的时候说明我的站已经恢复了正常的访问了. 这里把我的站最近一周网站无法访问遇的情况细节进行梳理,一来做为网站异常情况记录,二来可以帮助大家遇到类似问题该如何解决. ...
- 记一次confluence邮件服务器配置的坑(阿里企业邮箱)
公司想通过confluence自动发送邮件,项目经理搞了半天没搞定,公司服务器是阿里云服务器,有事就甩给我了,按照百度出来的方法试了下(可能大部分方式一,方式二就成功了,方式三可适用于阿里企业邮箱). ...
- 记一次网站故障排查过程(nginx 504状态码、 upstream timed out (110: Connection timed out)以及jbd2引起IO高
一.问题描述 客户侧反馈无法正常访问系统,页面转圈,时好时坏,访问不稳定. 二.系统环境: 机器环境:UOS . nginx .php(对接其他服务器kingbase .钉钉.redis .KF) E ...
- 记一次网络故障的解决
发现问题 1.用户无法打开web.runningdoctor.cn 2.监控状态无异常.无报警 3.tracert结果无异常.丢包率正常 4.用户无法访问的时候,我们能打开网站 5.多地代理访问网站, ...
- 无法进入Windows,无法进入PE,无限重启——记一次电脑故障
最近搬了公司一台电脑回家办公,谁知回到家后,电脑先是开机卡在田字,再次重启就无法进入Windows. 插上装有PE的U盘,选择从U盘启动,好家伙,直接PE都进入不了,无限循环重启. 于是,拆下内存,橡 ...
- 待解决:记一次SSD故障,格式化失败
前言:win7下系统盘mSATA接口的SSD突发故障,无法进入操作系统引导.硬盘接入新机器,win10下硬盘格式显示为RAW,无法格式化,磁盘检查,无错误,重建引导记录无效. 目前故障有: ①文件不可 ...
- 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)
参考:http://www.cnblogs.com/liuxianan/p/err_unsafe_port.html?ref=myread 问题来源 因为经常有各种各样的大小项目要跑,全部放一个tom ...
最新文章
- 【iOS】Socket/TCP 通信 发送 NSString 字符串格式数据
- easyui datagrid 自定义加载按钮实例
- ES6——generator与yield
- 谷歌微软 IBM 激战云端,亚马逊地位恐将不保?
- Handbook of Constraints Programming——Chapter4 Backtracking Search Algorithms-Preliminaries
- python基础代码大全-python零基础入门命令方式汇总大全,快速恶补你的Python基础...
- 二维特征分类的基础_3D 分割分类总结
- ps人像精修照片步骤_15天零基础自学PS!送你整套PS教程297集+视频+素材+源文件模板6...
- 启动mongodb服务时报错100
- 怎么在pyqt界面上添加新菜单栏选项_PyQt创建菜单栏、工具栏
- Oracle存在修改,不存在插入记录 SQL
- Android SDK官网下载网址
- golang java 对比_golang编程语言和java的性能对比
- LINUX命令 VS DOS命令
- linux4755代表什么权限,CentOS下chmod 755和4755的区别是什么?
- 石乙己——孔乙己程序员版
- 计算机信息单位换算中的t是,算力单位换算(算力单位t)
- VSAN磁盘组更换硬盘
- 计算机网络调试记录表,计算机网络管理员中级操作技能考核评分记录表.doc
- 国内APP消息推送机制以及微信消息延迟问题剖析
热门文章
- php实现团购功能,PHP 对接美团大众点评团购券(门票)的开发步骤
- Cannot change network to bridged: There are no un-bridged host network adapters解决方法
- 纯CSS3绘制的猫咪老师——献给喜欢CSS3及《夏目友人帐》的你
- python实现繁简体自动转换小工具
- R语言生存分析中的OR值是什么?如何解读?
- 计算机网络超时重传时间,TCP超时重传机制
- 深入了解机器学习 (Descending into ML):线性回归
- 路飞学城之 luffy(1)
- 《朗读者》的读后感优秀范文4000字
- String类中的trim()方法实现