Linux服务器CPU100%怎么办,如何排查CPU占用高?

Linux服务器CPU使用率飙到100%,最常见的直接原因是某个进程死循环或高并发请求堆积,优先用top确认进程PID,再按进程类型(业务代码、数据库、异常进程)分治解决,彻底定位比盲目重启更重要。

先花30秒定位:是谁吃光了你的CPU

服务器CPU跑满100%,系统通常还能SSH登录,别慌,第一步是找到元凶,登录服务器后,执行下面两条命令之一:

Linux系统CPU持续彪高,如何排查?
加载中
Linux系统CPU持续彪高,如何排查?
  • top 回车,按 P 键按CPU使用率排序,看第一行进程PID和%CPU列
  • 用 ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%cpu | head -n 10 直接列出Top 10进程

如果看到某个进程长时间占用接近100%,先记录PID,接着用 lsof -p PID 看这个进程打开了哪些文件、连接了哪些网络端口;再用 ls -l /proc/PID/exe 确认这个进程的可执行文件路径和身份,这两步能帮你快速判断是自家业务进程、数据库进程,还是被入侵植入的挖矿程序。

行业共识认为,绝大多数CPU跑满案例都能在这一步完成初步定性:要么是业务代码出问题,要么是请求流量超预期,要么是系统被恶意利用,不要急着重启,先看清楚再动手。

按业务场景逐项排查:从代码到架构的完整链条

业务应用进程占用高:代码死循环、日志爆炸、线程阻塞

如果你的top里显示的是Java、Python、Node.js或者PHP进程,按以下顺序检查:

  • 先看日志:tail -n 200 /var/log/app.log 或业务日志目录,死循环经常伴随着大量异常堆栈、重复错误、日志快速增长,如果日志文件几秒钟增加几十MB,多半是代码进入了异常循环或错误级别的日志刷屏。
  • 检查线程栈:Java进程用 jstack PID | grep -A 30 "java.lang.Thread.State" 看线程状态;对Python进程可用 py-spy dump --pid PID;Node.js用 node --prof-process 生成CPU profile,多数情况下能看到线程卡在哪个方法或循环里。
  • 审视最近的代码变更:回想或通过Git log查看上一个发布版本改了什么,高并发下最容易出问题的是缓存失效后穿透到数据库、正则表达式回溯、字符串拼接大对象等场景,举个例子,一个未加索引的慢SQL在业务高峰期被热点请求反复触发,数据库CPU会先暴涨,紧接着应用服务器CPU也会被连接等待拖垮。

数据库进程CPU飙高:慢SQL和索引失效是头号嫌疑

如果top

Linux服务器CPU100%怎么办,如何排查CPU占用高?

里看到mysqld、postgres或redis-server占用过高,别马上杀进程,先查数据库慢查询日志:

# MySQL
mysql -uroot -p -e "SHOW FULL PROCESSLIST;"
# 或开启慢查询日志后查看

常见原因和对应动作:

  • 慢SQL没走索引:用EXPLAIN SELECT ...查看执行计划,关注type列是否为ALL(全表扫描)或rows是否异常大,加索引或者改写SQL是首选方案。
  • 锁竞争严重:看SHOW ENGINE INNODB STATUS的LATEST DETECTED DEADLOCK和当前锁等待,业务高峰期大量并发更新同一行,会导致CPU等待锁自旋飙升。
  • 缓存失效击穿:Redis不存在或者过期,请求全部落到数据库,先把缓存重建策略改成互斥锁或提前异步刷新,再考虑增加缓存时长。

高并发请求导致软中断和上下文切换飙升:网络层的信号

当CPU的us(用户态)不高,但si(软中断)或sy(系统态)很高,且top里找不到单个高占用进程时,问题往往出在网卡收包或内核处理上。

  • 执行 cat /proc/softirqs,看NET_RX是否增长异常。
  • 用 ethtool -S eth0 | grep -E "rx_packets|tx_packets" 对比看包速率。
  • 检查是否被CC攻击:ss -state ESTABLISHED | wc -l 看连接数,再用 ss -state ESTABLISHED -field remote | sort | uniq -c | sort -nr | head 找到异常来源IP。

如果确认是流量攻击,第一时间在防火墙或云安全组里封掉异常IP,再调整nginx和内核参数,比如增加net.core.netdev_max_backlog、调低net.ipv4.tcp_syn_retries,安全组拦截和DDoS高防防护是云服务器厂商的标准能力,具体配置方法可以咨询平台客服。

处理CPU100%的实操步骤:从止损到治本

第一步:快速止损,但别盲目kill

如果是业务进程,先把进程挂起或重启,让服务恢复响应,但保留现场:

# 保留CPU核心转储(部分场景对Java/DTCore有用)
gcore -o /tmp/pidcore PID
# 杀掉或重启异常进程
kill -9 PID
# 对于守护进程,使用systemctl restart app.service

重启后业务恢复,但问题没解决,还会再犯,现场数据(core文件和日志)是后续定位的依据,没有它就只能猜。

第二步:看系统负载和CPU时间分布

执行vmstat 1 5,观察username(us)、system(sy)、idle(id)三列,如果us高,是用户态代码问题;如果sy高,可能是虚拟机频繁调度或内核锁问题;如果id低且wa高,则CPU在等待磁盘I/O。

Linux服务器CPU100%怎么办,如何排查CPU占用高?

再执行uptime看load average,注意CPU核心数和负载的对应关系:8核机器负载跑到8,满载;16核跑到12,还有余量,但load高和CPU100%不是一回事,负载还包括不可中断的D状态进程,比如卡在磁盘I/O上的进程。

第三步:针对不同根因的具体处置

根因类型 典型特征 直接处置 长期方案
业务代码死循环 单进程CPU恒定90%+,无异常日志 重启进程,收集线程栈 引入代码评审、压测,使用APM工具监控
慢SQL打爆数据库 慢查询日志增加,数据库进程CPU高 杀掉慢查询会话 优化索引、引入读写分离、分库分表
流量攻击 网络连接数激增,软中断狂飙 封IP、启用云安全组 接入高防,配置限流、WAF
内存不足触发Swap 服务器卡顿但CPU不高,swap使用率高 扩充内存或重启业务 增加内存监控,配置OOM保护
被挖矿木马入侵 陌生进程占满CPU,有异常外联IP 杀进程、删除文件 修复漏洞、改密码、更新安全组

第四步:检查是否被挖矿程序渗透

近年来的安全报告反复提到,Linux服务器CPU100%的一个常见原因是中了挖矿木马,挖矿程序的特征非常明显:

  • 进程名伪装成kworker、systemd、crond等常见名字,但实际路径在/tmp或/var/tmp下
  • 网络连接大量访问矿池端口,比如4444、8333、9999等
  • CPU使用率在满负荷和低负荷之间周期性波动,佣金账户切换频繁

处理步骤:先用nettop -n或ss -tnp找到外联地址,按PID定位程序路径,删除可执行文件;然后检查crontab、systemd服务、rc.local和shell历史,清除全部持久化后门,如果是在公有云上,建议直接重装系统,并修改SSH密钥、控制台密码,这是最彻底的做法。

如何提前预防CPU100%再次发生

站在运维角度,等CPU满了再处理是被动的,好的做法是提前建立防线:

  • 配置监控告警:为CPU使用率设置两个阈值,比如60%预警、85%触发告警,业内专家指出,监控数据的采样周期不要超过1分钟,否则峰值容易漏掉,用云平台的监控报警或者开源的Prometheus+Grafana都行。
  • Linux服务器CPU100%怎么办,如何排查CPU占用高?

  • 限制单个进程资源:用systemd的CPUQuota字段限制服务CPU上限,或者用cgroup给数据库、Web服务分别划分核数,例如在某个服务单元文件里加CPUQuota=200%表示最多用2个核心。
  • 定期压测和容量评估:每半年做一次全链路压测,模拟业务峰值流量,不少线上事故都出现在搞完大促、做活动或者上线新功能后,压测能提前暴露代码瓶颈。
  • 把关键日志和线程快照接入自动转储:Java应用可以配置-XX:+HeapDumpOnOutOfMemoryError,Python进程写一个定时抓取栈的脚本,这样CPU一旦异常,你已经留有现场证据。

Q&A:关于Linux服务器CPU100%的常见疑问

为什么CPU100%但网站还能打开?

多数情况下是某一颗核或单个进程吃满,系统其它核心尚有富余。top命令第一行的%Cpu(s)展示的是所有核的平均值,必须按1查看每个核的使用率,Web服务器通常有进程/线程池隔离机制,少量进程出问题不会让整个服务瘫痪,如果一个进程占满了所有核,网站还能打开,多半是网络栈和静态资源响应未受影响,但动态请求基本已经全部卡住了。

云服务器CPU100%和物理机处理方式有什么不同?

云服务器的CPU跑满会受到账号限流,如果购买的是共享型实例,CPU长时间占满可能导致丢包或降频,甚至被平台强制停机,处理上比物理机多一步:先确认实例规格和CPU积分(像t系列实例会有CPU信用额度),如果积分耗尽,就要考虑升级到计算型实例或者独享型实例,云平台控制台的安全组、流量攻击告警和快照回滚功能,能节省大量排查时间,处理流程和物理机一样,但止损动作更快,回滚也更容易。

用kill杀掉高CPU进程会不会把系统弄崩?

只有在明确知道进程身份和影响范围时才能杀,如果是你自己的业务进程,kill后服务会中断,但系统本身不会崩,你真正要担心的是数据库和关键中间件进程,直接kill -9可能造成数据损坏,安全做法是尽量用服务自带的重启命令,比如systemctl restart mysql,处理前先发信号让进程优雅退出,如果进程是你的业务代码,杀掉后最好保留日志和栈现场,否则只能等下次复现。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/715073.html

赞 (0)
服务器540M带宽上行是多少呢,怎么测速?
上一篇 2026年10月6日 08:39
2K19服务器关了MC还能玩吗,2K19离线MC怎么玩?
下一篇 2026年10月6日 08:41

相关推荐

  • 批处理作业的shuffle阶段为何带宽消耗极大?,如何优化网络性能

    Shuffle 阶段对网络带宽消耗极大,本质是数据在分布式节点间进行全量重分区,必须从压缩、分区、调度、硬件四个层面同时下手才能显著降低带宽压力,shuffle阶段网络带宽消耗大怎么办?先看清它的三个“带宽黑洞”在批处理作业里,shuffle 阶段像一场突然爆发的“早高峰”:所有 Map 任务把中间结果写到本地……

    2026年9月10日
    200
  • 玩LOL一直连接服务器失败怎么回事,怎么解决?

    玩lol一直连接服务器失败,通常不是游戏本身的问题,而是本地网络环境、客户端文件或服务器状态出了状况,按顺序排查网络、修复客户端、检查服务器公告就能解决,lol连接服务器失败怎么办?先排查网络问题网络连接是游戏稳定的基础,相当一部分玩家遇到连接失败都与本地网络波动有关,业内专家指出,在排查服务器问题前,先确认自……

    2026年8月21日
    2100
  • 服务器2003如何设置自动重启服务?服务器2003自动重启服务的配置方法

    服务器2003自动重启服务的设置核心结论:Windows Server 2003本身不支持“服务级”自动重启功能,但可通过任务计划程序+脚本或第三方监控工具实现服务异常停止后自动重启,保障业务连续性,为什么需要自动重启服务?服务崩溃或资源泄漏后,手动干预平均耗时20分钟以上(微软2008年运维调研数据)高频服务……

    2026年4月14日
    7200
  • 广州物联网平台开发哪家好?广州物联网系统定制开发公司推荐

    2026年广州物联网平台开发的核心破局点,在于深度融合本地制造业生态与AI大模型,实现从“设备接入”向“数据智能”的跨越,选择具备原生AI能力与端到端安全合规的平台架构是降本增效的唯一确定性答案,2026广州物联网平台开发的核心逻辑重构产业升级倒逼平台能力跃迁根据中国信息通信研究院2026年最新预测,广州及大湾……

    2026年4月29日
    5700
  • AIX设置服务器字符集的方法有哪些,AIX如何修改服务器字符集

    AIX服务器字符集设置的正确性直接决定了系统能否正确处理多语言数据,避免乱码风险,其核心结论在于:必须确保操作系统层面、用户环境层面以及应用层面的字符集配置保持高度一致,且优先推荐使用UTF-8(如ZH_CN.UTF-8)作为标准字符集,以实现最大程度的兼容性与稳定性,在AIX系统中,字符集不仅仅是简单的显示问……

    2026年3月11日
    13200
  • 青岛千兆独享带宽服务器配置要点有哪些,多少钱?

    青岛千兆独享带宽服务器配置的核心在于根据业务负载匹配CPU代数、内存通道与NVMe硬盘阵列,并利用青岛本地BGP多线优势实现低延迟,青岛千兆独享带宽配置的核心要素处理器与内存搭配策略青岛千兆带宽服务器最怕带宽跑满但CPU跟不上,如果业务是视频转码或高并发计算,Intel Xeon Gold 5418Y或AMD……

    2026年8月12日
    1200
  • 服务器50g系统盘是什么?服务器50g系统盘能装什么系统

    服务器50g系统盘是什么?简言之,它是指为操作系统及基础运行环境分配的50GB容量存储空间,专用于安装系统、驱动、关键服务组件,不用于业务数据存储,该配置常见于轻量级云服务器、入门级VPS或特定容器化部署场景,核心价值在于成本优化、部署快速、隔离明确、维护高效,为什么选择50GB作为系统盘容量?当前主流云服务商……

    程序编程 2026年4月18日
    5600
  • ASP.NET如何动态添加控件?动态控件生成方法详解

    ASP.NET 动态生成控件:突破静态页面限制的核心技术ASP.NET 动态生成控件是指在运行时通过服务器端代码(C#或VB.NET)创建并操作控件对象,将其添加到页面控件树中呈现的技术,它突破了静态页面设计的局限,赋予开发者根据业务逻辑、用户输入或数据库内容实时构建复杂、灵活用户界面的能力,是构建数据驱动、高……

    2026年2月12日
    11330
  • Steam无法连接服务器失败怎么办,错误代码怎么解决?

    steam错误无法连接到服务器失败,直接原因是网络链路受阻、本地配置异常或平台服务波动,大多数情况下可通过排查网络、清理缓存文件、检查DNS与加速工具在几分钟内解决,你正欢快地准备上线开黑,结果客户端弹出“无法连接到服务器”的提示,反复点击重试只能看到转圈圈,别急着摔鼠标,这个经典问题属于常见故障,每年都会出现……

    2026年9月24日
    100
  • 服务器ftp传源码怎么操作?ftp上传源码详细步骤教程

    服务器FTP传源码的高效与安全,核心在于标准化的操作流程与严谨的权限配置,而非简单的文件拷贝,通过合理的连接模式选择、传输类型设置以及上传后的权限校验,可以确保源码完整无误地部署至服务器环境,避免因文件损坏或权限错误导致的服务运行故障,FTP传输前的环境准备与工具选择源码传输不仅仅是数据的搬运,更是部署流程的关……

    2026年4月1日
    8800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注