阿里云ESC服务器CPU一直处于100%该如何排查?

阿里云ESC服务器CPU一直处于100%该如何排查?

问题背景

使用 docker 容器化部署整个项目,然后服务器的CPU一直处于100%,此时就出现了问题:此时如果重新开启一个窗口去连接,或者访问宝塔面板、Navicat连接MySQL就连接不上了,问题很严重

image-20230819135127639

问题分析

  • 服务器CPU飙升至100%常见原因

    • 程序或应用负载过重:如果你在服务器上运行的程序或应用负载很重,会导致CPU使用率飙升。这可能是因为程序设计不合理、代码有bug、数据库查询频繁等原因导致的。
    • 访问量激增:如果你的网站或服务突然遭受大量访问,服务器会面临巨大的压力,导致CPU使用率飙升。这可能是由于广告宣传、流量攻击或媒体报道等原因引起的。
    • 恶意软件或病毒感染:如果服务器中存在恶意软件或病毒,它们可能会消耗大量的CPU资源。这些恶意软件可以通过漏洞利用、下载非法软件、点击恶意链接等方式进入服务器。
    • 资源不足:如果服务器配置不足,例如内存不足或硬盘IO性能较差,会导致CPU负载过高。这种情况下,服务器无法及时处理任务,从而导致CPU使用率飙升。
    • 崩溃或错误日志:服务器出现崩溃或错误可能会导致CPU使用率飙升。你可以检查服务器的日志文件,查找错误信息以确定问题所在。
  • 如何排查

    这里提供一下我的排查思路吧,主要分为两种情况,恰巧这两种情况我都遇到了🤣

    • 方案一:针对CPU100%,同时能够正常执行指令的

      1. 定位凶手。使用top -c 查看CPU 占用情况 ,按P(大写)可以倒序查看占CPU占用率
      2. 分析原因。针对CPU超高的,如果这个进程我们明确知道,它并不是一个特别重要的进程,我们可以先直接通过kill -9 pid 杀死它,然后仔细 程序是否存在问题,比如死循环,循环依赖等等问题;如果是一个很重要的进程,我们可以通过jstack -l pid > pid.stack 将这个进程的堆栈信息重定向到pid.stack ,然后将这个进程对应的 tid 转换为16进制数(这个转换我们可以直接搜索在线进制转换即可,网上一大把),最后cat pid.stack | grep '16tid' -C 20查看该线程打印出来的堆栈信息

      备注:pid是进程id,tid是线程id,16tid是tid转成16进制后的结果,注意区分,jvm的进程快照中线程显示是16进制的所以需要转成16进制

      上面那个方法是比较通用且常见的方法, 而我之前遇到过因为启动Nacos容器出现CPU飙升100%(感兴趣的可以参考这篇文章:Docker运行Nacos容器,过一会就报错UnsatisfiedDependencyException_知识汲取者的博客-CSDN博客),我是直接通过docker logs --tail 500 nacos查看日志,然后发现是 堆内存不够导致的,最终通过配置 jvm 堆内存参数,最终成功启动 nacos

    • 方案二:针对CPU100%,但是不能够正常执行指令的,也就是窗口直接卡的动都不动了

      这种情况没有其它办法,只能通过重启服务器了

      恰巧我也遇到过,之前在使用docker build -t 指令为三个后端 jar 包构建程一个容器的过程中,一下启动导致CPU直接飙升100%结果终端页面卡的动都动不了了,重启服务器后,我经过不断排查,最终定位到是由于我的服务器内存太小了,由于我有之前 Nacos 的bug解决经验了,所以这一次我就直接给每一个 jar 包的启动过程中都限制最大堆内存,最终就成功解决了

PS:相信过不了多久,我这段时间的项目就要上线了,到时候应该还会发一篇文章用于介绍我的新项目,尽情期待吧(●’◡’●)

参考文章

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
安装Zabbix监控系统需要以下步骤: 1. 登录到阿里云服务器ESC。 2. 安装所需的依赖软件包。可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install apache2 mysql-server php php-mysql php-gd php-xml php-bcmath php-mbstring php-ldap php-xmlrpc ``` 3. 下载Zabbix软件包。可以从Zabbix官方网站下载最新的稳定版本。 4. 解压缩下载的软件包。可以使用以下命令解压缩: ``` tar -zxvf zabbix-<version>.tar.gz ``` 5. 进入解压后的目录。例如: ``` cd zabbix-<version> ``` 6. 配置Zabbix服务器。可以使用以下命令进行配置: ``` ./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 ``` 7. 编译并安装Zabbix服务器。可以使用以下命令进行编译和安装: ``` make install ``` 8. 创建Zabbix数据库。可以使用以下命令创建数据库: ``` mysql -u root -p create database zabbix character set utf8 collate utf8_bin; grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'password'; flush privileges; exit; ``` 9. 导入Zabbix数据库模板。可以使用以下命令导入模板: ``` cd database/mysql mysql -u zabbix -p zabbix < schema.sql mysql -u zabbix -p zabbix < images.sql mysql -u zabbix -p zabbix < data.sql ``` 10. 配置Zabbix服务器。可以编辑Zabbix服务器配置文件`zabbix_server.conf`,设置数据库连接等参数。 11. 启动Zabbix服务器和代理。可以使用以下命令启动: ``` zabbix_server zabbix_agentd ``` 12. 配置Zabbix前端。可以将Zabbix前端文件复制到Apache的网站目录下,并设置相应的权限。 13. 在浏览器中访问Zabbix前端,按照界面提示进行初始化配置。 14. 登录到Zabbix前端,配置主机和监控项等。 希望以上步骤对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识汲取者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值