记录一次linux环境中java应用无法启动问题的排查过程

2023-05-16

linux环境中java应用无法启动问题的排查过程

问题表象

某天,一个朋友找到我说自己有一个项目部署在云服务器上,现在系统登录的时候提示用户名密码错误,怀疑是密码被改了,由于之前的开发离职了,想让我帮忙想想办法修改一下密码。

step1

【思路1】 既然系统登录页面能访问,并且系统明确提示用户名密码错误,那程序应该是没问题,我只要想办法连上数据库把密码改一下应该就能解决了。
【疑惑1】 于是要到了远程服务器的方式,准备上去通过jar包的配置找到数据库连接地址直接动手,于是ps -ef|grep java,发现并没有java进程,瞬间感觉事情不妙,但没有想太多,通过history硬找到了应用的jar包,在application.yml中找到了mysql的连接地址就是localhost:3306,于是我又ps -ef | grep mysql,发现也没有进程。我擦,那应用和数据库都没启,系统咋能访问的?
【疑惑1-结论】 前后端分离通过nginx代理部署的项目可以在后端项目没有启动的情况下访问前端静态页面。于是我ps -ef | grep nginx,果然nginx是启动着的,从nginx.conf配置中也找到了dist文件确实存在,至此解决了刚才的疑惑。于是我紧接着启动了mysql,又启动了jar包,发现启动报错了,提示数据库连接失败。找了半天发现mysql的端口是3309,这哥们配置文件写的3306。这尼玛之前真的启动成功过吗。。。。
【思路1-结论】 废了半天劲终于把数据库搞定了,于是我赶紧去数据库里找到了user表,筛选出对应用户的密码,发现密码字段加密了(安全性做的还挺好),靠着我机智的头脑试出来是base64加密的,解密后发现密码并没有被改,至此说明登录不成功的原因并不是密码被修改导致的,思路1是错误的,需要重新找到问题的根本原因。
【阶段性结论1】 既然密码是对的,那应该没有问题呀,于是我怀着不信任的态度又在登录界面试了好几次,确实一直提示用户名密码错误。他喵的,难道不是连的这个数据库?于是我又确认了一下application.yml,确保了数据库没有连错。由于没有源码,我只得打开登录页面的F12看看,期望能发现点什么,果然发现login请求报nginx 502了,那说明后端服务访问不到?于是我ps -ef|grep java,果然没有java进程。至此说明登录失败的原因应该是后端服务一直没启起来。

step2

【疑惑2】 服务都没启起来,居然报用户名密码错误,这代码咋写的,等拿到源码一定要看看。
【思路2】 既然定位到是因为服务没启起来,那就得想办法找到服务没启动起来的原因,排查日志发现并无任何报错。联想到之前说的这台服务器中过毒,我的第一想法是是不是有人在服务器上装了杀毒软件,误把java应用当作病毒给杀了。
【思路2-结论】 经跟服务器维护人员确认后发现并没有安装杀毒软件,看来也不是这个原因。

step3

【思路3】 那是不是因为程序有问题导致内存崩了没启动起来?于是我打开了两个控制台,一个启动jar包,另一个使用top命令监控这服务器状态。结果发现:
在这里插入图片描述
我靠,应用一启动占用了200%+的内存,那肯定是程序占用cpu太多导致系统崩溃,程序中肯定有死循环之类的。至此我坚定的以为发现了问题的根本原因。
【思路3-结论】 在没有源码的情况下我只能通过反编译工具,我想着如果是这个原因那一定是启动的时候有加载缓存或者处理啥东西,可把所有的类都翻完也没有找到带@PostStructe和*cache相关类,同时也没有使用spring的xml配置文件方式。本来想着通过dump堆栈信息下来再看看的,但在这之前我查了一下linux的top命令中%CPU的含义,发现用不着dump堆栈信息了,压根不是程序的问题。

step4

【思路4】 百度发现linux top中**%CPU显示的是进程占用一个核的百分比**。一核?我这200%+启不起来,难道这服务器只有两核?我马上cat /proc/cpuinfo看了一下,结果如下:
在这里插入图片描述
他喵的,8核服务器,就算我应用占满了两核cpu也不至于挂了呀,那看看服务器整体cpu占用的平均值吧,其实刚刚图里有:
在这里插入图片描述
cpu的整体占用平均值居然占到了97%。我在top命令的基础上按了1,看到了各个cpu的占用情况:
在这里插入图片描述
终于水落石出:8核cpu被全部沾满了,所以我的应用启动的过程中抢不到cpu,进程自己就挂了
【思路4-结论】 联想到之前说过这台服务器曾中过挖矿病毒,那八九不离十是服务器就没清理过病毒,一问,果然如此。那现在就是想办法处理病毒了。首先我们得找到病毒进程,然后把它kill掉,杀掉以后你会发现它过一段时间又自启动了,那肯定有什么定时任务,所以得想办法把定时任务清掉,定时任务清掉以后重新启动服务器你会发现他又会自启动,所以linux启动程序里也需要删掉相关文件,具体可参照如何清理挖矿病毒。 病毒清理掉后重新启动应用,观察了一天,各项功能正常。

【疑惑2-结论】 后来拿到了源码
在这里插入图片描述
果然没考虑后端没启动的情况,只要有问题,全部提示’用户名密码错误’,哥们儿这写法有点不对哦。

补充

【补充1-Linux top命令里面%CPU和cpu(s)的差别】 Cpu(s)表示的是 所有用户进程占用整个cpu的平均值,由于每个核心占用的百分比不同,所以按平均值来算比较有参考意义。而%CPU显示的是进程占用一个核的百分比,而不是整个cpu(12核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100。

【补充2-挖矿病毒】 前几年区块链比较火,由于区块链需要大量计算,所以出现了挖矿病毒,这个病毒的核心功能就是借助宿主机的计算能力用于区块链的节点计算。通过这个事我大概总结了挖矿病毒的特点:它在操作系统开机自启动里加了很多curl的进程,这些进程会定时自动联网注册一个-bash的进程,这个-bash进程就是挖矿病毒进程,他会把整个服务器的cpu全部沾满,导致应用无法启动。需要修改自启动的配置和清理掉所有curl进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录一次linux环境中java应用无法启动问题的排查过程 的相关文章

  • Xrdp 体验优化 减少/解决画面卡顿

    参考链接 xff1a Default TCP send buffer size too low 1483 调整 Xrdp 配置参数 编辑 etc xrdp xrdp ini tcp send buffer bytes 61 4194304
  • 安装debian8操作系统

    安装参考文档 xff1a https wenku baidu com view 0b5b506f0912a21614792995 html 注意 xff1a 步骤可以参考具体配置看需求 修改IP dedian操作系统的IP文件在 etc n
  • 驱动——LED灯循环闪烁

    使用结构体形式对寄存器地址进行映射 xff0c 实现3盏LED灯的循环点亮 1 创建LED灯点亮所需要的GPIO寄存器的结构体 xff0c 并对寄存器地址进行宏定义 2 通过ioremap函数将物理地址映射为虚拟地址 void iorema
  • ubuntu CA安装 证书申请

    1 安装 xff1a apt get install openssl 2 修改配置文件 xff1a 注意不同于网上 xff0c 位置在 xff1a usr lib ssl openssl cnf xff0c 将以下项改为自己的位置 dir
  • URL后面#号的问题

    一 的涵义 代表网页中的一个位置 其右面的字符 xff0c 就是该位置的标识符 比如 xff0c http www example com index html print 就代表网页index html的print位置 浏览器读取这个UR
  • Swift-UIView的创建和使用

    创建 View let view1 61 UIView let view2 61 UIView frame CGRectMake 20 120 100 100 let view3 61 UIView frame CGRectMake 40
  • kali 运行apktool 报错解决方法

    问题描述 xff1a 系统 xff1a kali 1 9 apktool d 123 apk test Input file 123 apk was not found or was not readable 问题解决方法 xff1a 方法
  • pip安装换清华源

    用python的pip安装时有些包安装的太慢了 解决的方法是 xff1a 换成清华源 pip install 要安装的包 i https pypi tuna tsinghua edu cn simple 或者直接替换下载源设置清华源 pip
  • 操作无法完成,因为该文件已在system中打开

    根据提示 xff0c 我们主要的任务是在system xff08 系统 xff09 中将这个文件关闭 1 打开 任务管理器 方法一 xff1a 快捷键 xff1a ctrl 43 shift 43 esc 方法二 xff1a 右击任务栏底部
  • 在CentOS7上安装和配置Node.js

    本文介绍如何在CSDN云主机实例上搭建Node js环境 Node js 是一个基于 Chrome 的 JavaScript 运行时环境构建的开源平台 xff0c 可帮助开发人员构建快速且可扩展的网络应用程序 它在 V8 引擎上运行 xff
  • C++ 输出cout

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • k8s集群部署单节点gitlab

    k8s集群部署单节点gitlab k8s集群部署单节点gitlab前言gitlab redis yamlgitlab postgresql yamlgitlab server yaml安装结果 k8s集群部署单节点gitlab 前言 前提准
  • win10下Anaconda的安装和配置

    第一步 xff0c 下载anaconda 这是anaconda官网地址 xff0c 点击下载即可 xff1a anaconda官网 第二步 xff1a 安装anaconda 点击下载好的 exe安装包 xff0c 双击安装即可 xff1a
  • pip指定包安装目录

    文章目录 pip install t target dir pandas 设置 pip 默认安装路径 找到 Anaconda home envs py36 Lib site py USER SITE span class token ope
  • 利用VS Code docker 搭建容器开发环境(含WSL2)

    目录 基本软件安装VScode 插件安装连接WSL2及容器linux代码编译查看源码 xff0c 调试linux kernel总结补充学习busyboxvmware真香 这篇文章的灵感来源 感谢UP xff0c 我才有了WSL2 vscod
  • Linux用户和用户组管理

    此博客仅当学习笔记 xff0c 所有内容均参考C语言中文网 xff0c 望支持正版 xff0c 至C语言中文网查看详细内容 用户和用户组管理 xff0c 顾名思义就是添加用户和用户组 更改密码和设定权限等操作 可能有很多人觉得用户管理没有意
  • CCF-炉石传说

    这题原本想的比较复杂 xff0c 因为每次召唤随从或随从死亡时都要对右边的随从编号进行变动 xff0c 然后构建了链表的数据结构 xff0c 但是越写越复杂 xff0c 所以马上放弃这个思路 其实只要构建一个结构体 xff0c 结构体保存随
  • 宝塔面板开启数据库远程登陆权限

    宝塔面板开启数据库远程登陆权限 默认情况下宝塔面板创建的mysql数据库是本地登陆权限 xff0c 如果要远程管理操作需要单独开启权限 xff0c 具体操作如下 xff1a 1 登陆宝塔面板 xff0c 点击 安全 xff0c 在防火墙里面
  • 重参数化技巧:高斯分布采样

    1 高斯分布采样 我们现在得到了有样本X得到的分布X N mu sigma 2 xff0c 通过采样我们得到确定的隐变量向量 xff0c 从而作为解码器
  • 微擎系统安装流程

    虚拟主机安装微擎系统流程 推荐环境 linux 43 php5 6及以上 43 mysql5 6及以上 如果您购买的主机开通的是windows系统 请先更换成linux系统 如果是虚拟主机 在主机面板 php版本页面选择php7 0 从官网

随机推荐

  • 部署https后浏览器提示不安全,不出现绿色小锁?

    网站部署https后 浏览器提示不安全 不出现绿色小锁图标 访问网站后 按f12 浏览器提示 Mixed Content The page at 39 https www xxx com 39 39 was loaded over HTTP
  • linux系统变为只读出现提示Read-only file system的解决办法

    问题描述 linux系统变为只读 出现提示Read only file system 如图所示 问题原因 系统没有正常关机 导致虚拟磁盘出现文件系统错误 说明 此修复可能会导致个别文件及数据丢失 修复之前建议做好文件备份工作 解决方法 使用
  • 小程序接入微信视频号配置指南

    一 填写视频号品牌信息和视频号类目资质 xff08 需要在平台发布模式后再进行填写 xff09 如图 xff1a 二 如之前已是平台发布模式的 xff0c 还需要操作 更新授权 xff1b 如之前是自主发布的 xff0c 切换到平台发布模式
  • 微信小程序如何使用视频组件

    小程序中可以使用视频组件来播放自己想要展示的视频 xff0c 具体步骤如下 一 添加视频组件 1 点击 店铺 装修店铺 编辑 xff0c 进入小程序页面编辑 2 点击 组件库 视频 xff0c 页面会添加视频组件 xff0c 点击视频组件的
  • 小程序地理位置接口申请

    申请接口理由 xff1a wx chooseAddress 获取用户收货地址提交理由 xff1a 快速定位用户当前位置 xff0c 获取省市区等地址信息 xff0c 方便用户提交地址等信息 wx chooseLocation打开地图选择位置
  • 远程桌面时出现“身份验证错误,要求的函数不受支持”解决办法

    远程桌面时 出现身份验证错误 xff0c 要求的函数不受支持 的错误 xff0c 如图所示 xff1a 这是由于本地客户端或者服务器端一方更新了CVE 2018 0886 的 CredSSP 补丁 xff0c 而另外一方未安装更新的原因导致
  • macbook苹果电脑系统使用“终端”远程登录linux主机

    登录mac系统后 xff0c 依次打开顶部菜单 xff0c 前往 gt 应用程序 gt 实用工具 gt 终端 xff0c 如下图 xff1a 在打开的终端页面 xff0c 输入如下代码 xff1a ssh root 64 服务器IP地址 注
  • wdcp面板无法打开

    打开wdcp面板提示 34 无法连接mysql xff0c 请检查mysql是否已启动及用户密码是否设置正确 34 按http faq myhostadmin net faq listagent asp unid 61 417先ssh方式远
  • java主机禁止某些IP访问的方法

    JAVA主机用的是tomcat来处理数据 xff0c 所以不支持以前apche使用的 htacess方式 xff0c 一般有两种禁止方法可以选择 xff0c 一是在server xml文件里面禁止 xff0c 或者是修改程序代码 1 禁止I
  • 用K-Means和DBSCAN算法对西瓜数据集4.0进行聚类分析

    文章目录 数据集K MeansDBSCAN 用K Means和DBSCAN算法对西瓜数据集4 0进行聚类分析 数据集 density sugercontent span class token number 1 span span clas
  • FSS对象存储挂载到windows云服务器操作方法

    FSS对象存储可以挂载到云主机中用于存储视频 备份等不需要 经常读写的大文件 不适合存放数据库等对IO需求较高 经常读写的场景 1 远程登陆服务器 xff0c 打开控制面板 xff0c 然后点击 打开或关闭windows功能 windows
  • nohup: failed to run command java: No such file or directory解决

    程序里远程执行shell命令 xff08 nohup java jar xff09 的执行 xff0c 后台日志报错如下 xff1a nohup failed to run command 96 java 39 No such file o
  • 七大顶级编程学习网站

    1 B站 xff1a https www bilibili com 不要以为b站只有二次元和游戏 xff0c 很多高质量的 34 开源 34 教程应有尽有 xff0c 如果大家想学实践性较强的知识 xff0c 如java的juc xff0c
  • SpringBoot测试失败并报错: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration

    情况一 xff1a 该测试类在测试包test下的包名和类路径java下的包名不一致导致的 xff0c 修改包名一致即可 由于包名自动生成的缘故导致这两个包名不一致 xff0c 引发以下报错 java lang IllegalStateExc
  • bootstrap个人简历毕业作品模板

    简介 xff1a 一款bootstrap框架个人简历模板 xff0c 可以作为前端毕业作品模板 xff0c 模板非常简单 网盘下载地址 xff1a https zijieyunpan cn vOnXW43exgr 图片 xff1a
  • linux进阶20——GDB(六):查看变量命令(print和display)

    一段c语言程序 include lt stdio h gt int main int num result 61 0 i 61 0 scanf 34 d 34 amp num while i lt 61 num result 43 61 i
  • 开发常用的抓包工具

    前端开发常用的抓包工具 浏览器开发者工具 浏览器开发者工具就是开发中常用的F12 xff0c 或者点击右键 gt 检查 可以看到单个请求的时间 xff0c 并可过滤 筛选请求 vConsole vConsole是前端手机开发的调试利器 xf
  • Linux Debian9安装Go

    介绍 Go xff0c 也称为golang xff0c 是由Google开发的一种现代开源编程语言 Go在许多应用程序中越来越受欢迎 xff0c 它采用极简主义的开发方法 xff0c 帮助您构建可靠 xff0c 高效的软件 本教程将指导您下
  • linux C有限状态机解析HTTP请求

    先看main函数执行的功能很简单 xff0c 前半段是建立TCP连接的常规操作 xff0c 每次读取4096字节的数据到缓存区 xff0c 解析这4096个数据 xff0c 根据解析状态返回相应结果 int main int argc ch
  • 记录一次linux环境中java应用无法启动问题的排查过程

    linux环境中java应用无法启动问题的排查过程 问题表象 某天 xff0c 一个朋友找到我说自己有一个项目部署在云服务器上 xff0c 现在系统登录的时候提示用户名密码错误 xff0c 怀疑是密码被改了 xff0c 由于之前的开发离职了