【服务器知识】linux服务器内存或者CPU利用率占用高占满,如何排查原因核解决?
摘要:Linux服务器内存与CPU高利用率排查指南 本文针对Linux服务器内存利用率达90%的情况进行分析,指出Linux内存管理机制会利用空闲内存作缓存来提升性能,高内存利用率不一定代表问题。建议通过free -h命令重点关注available列而非free列,若可用内存不足可使用top或ps命令排查具体进程。对于CPU高利用率问题,推荐使用top命令按CPU排序定位问题进程,并通过ps命令查
文章目录
一、内存利用率高
最近服务器一直收到警告
我们来详细地排查一下 Linux 服务器内存利用率达到 90.311% 的原因。这是一个非常常见的情况,但高内存利用率本身并不一定代表问题,关键是要弄清楚这些内存被谁、以什么方式占用。
Linux 的内存管理机制和 Windows 不同,它会充分利用空闲内存来做缓存(cache)和缓冲(buffer),以提升系统性能。因此,你看到的“高利用率”很可能大部分是这些可以随时释放的缓存。
以下是系统的、循序渐进的排查步骤:
第 1 步:获取整体内存概览 - free
命令
首先,我们使用 free -h
命令(-h 表示以人类易读的格式显示,如 G, M),这是最重要的第一步。
free -h
输出示例:
total used free shared buff/cache available
Mem: 7.6G 3.2G 200M 16M 4.2G 4.0G
Swap: 2.0G 0B 2.0G
关键分析:
-
不要看 free 列:这个值通常很小,因为 Linux 会把空闲内存拿去做缓存。
-
重点关注 available 列:这个值表示系统当前可用于启动新应用程序的内存量,而无需交换。在上面的例子中,虽然 used 很高(3.2G + 4.2G 的 buff/cache ≈ 7.4G,利用率很高),但 available 还有 4.0G,这说明内存非常健康,大部分“占用”都是缓存。
-
如果你的 available 值也很低(例如只剩几百 M 甚至几十 M),那才说明真正可用的内存不足了,需要继续排查。
第 2 步:查看具体进程的内存使用 - top
或 ps
命令
如果 available 确实很低,下一步就是找出是哪些进程占用了最多的内存。
使用 top 命令:
-
在命令行输入 top。
-
默认按 CPU 排序,按下大写 M 可以按内存使用率(%MEM)排序。
-
查看排在最前面的几个进程,关注 RES(常驻内存,即实际使用的物理内存)和 %MEM(内存使用百分比)列。
使用 ps 命令(更适用于脚本或快速查看):
ps aux --sort=-%mem | head -10
这条命令会列出按内存使用率降序排列的前 10 个进程。
常见的内存消耗大户:
-
Java 应用(如 Tomcat, Elasticsearch, Kafka)
-
数据库(如 MySQL, PostgreSQL, Redis)
-
监控代理(如 Datadog agent, Zabbix agent)
-
大型应用(如 PHP-FPM, Nginx 的多个工作进程)
二、CPU 利用率高
和前面类似,高 CPU 使用率通常意味着一个或多个进程正在大量进行计算,这可能是正常服务(如繁忙的网站)、异常进程(如脚本失控)或被攻击(如挖矿病毒)的表现。
以下是详细的排查步骤:
第 1 步:快速定位高 CPU 进程 - top
这是最重要的一步,可以快速看清全局。
使用 top 命令:
top
-
运行后,界面会动态刷新。默认按 CPU 使用率(%CPU)排序。
-
查看第一行(Cpu(s):),确认整体使用率。
-
重点关注排在最前面的几个进程,看是哪个 PID(进程ID)、哪个 USER(用户)、哪个 COMMAND(命令)占用了最多的 CPU。
-
按下数字 1 可以展开显示所有 CPU 核心的单独使用情况,看是否是单个核心跑满还是所有核心都高。
示例输出分析:
如果看到某个 java、php-fpm、nginx、mysql
进程或一个不认识的奇怪进程长期占用 80%+ 的 CPU,那它就是怀疑对象。
第 2 步:深入分析进程细节
找到可疑进程后,需要进一步分析。
查看进程的完整路径和启动命令:
使用 ps 命令查看上面找到的高 CPU 进程的详细信息。
ps aux | grep <PID>
# 或者用这个更清晰的命令
ps -ef | grep <PID>
这会显示该进程的完整启动命令路径,帮助你判断它是否是合法服务。
更多推荐
所有评论(0)