临时修改

admin
请提供您需要摘要的具体内容,收到后我将立即为您生成一段100-200字的摘要。

CentOS内存占用飙升至90%?别慌,这份排查与解决指南请收好 **

当你在管理服务器时,突然发现监控报警显示 CentOS内存大于百分之90,服务器响应变慢,这无疑是一场“灾难”,内存耗尽不仅会导致服务卡顿,严重时甚至会触发系统OOM(Out of Memory) Killer,直接杀死关键进程导致服务崩溃。

遇到这种情况,切忌盲目重启服务器,请按照以下步骤进行快速排查与处理:

临时修改

第一步:确认内存使用情况

我们需要区分哪些内存是被“真正”占用的,哪些只是被系统“缓存”了。

在终端输入以下命令查看内存详情:

free -m
  • total: 总内存
  • used: 已使用内存
  • free: 空闲内存
  • buff/cache: 缓存和缓冲区

注意: 在Linux系统中,buff/cache 属于可回收内存,如果你的 used 接近 90%,但 free 很少,而 buff/cache 很大,这通常不是内存泄漏,而是系统将内存用作文件缓存以提高性能,此时你可以安全地清理缓存。

第二步:找出“内存杀手”

如果清理缓存后,内存依然紧张,我们需要找出是哪个进程在占用资源,使用 top 命令查看资源占用最高的进程:

top

top 界面中,按 M 键(大写)可以按照内存使用率排序,找到占用最高的 PID(进程号)。

或者,使用一条命令直接列出占用内存前 10 的进程:

ps aux --sort=-%mem | head -n 11

第三步:针对性解决

找到占用内存的进程后,根据进程类型采取不同的措施:

清理系统缓存(如果是缓存导致的) 如果发现内存被大量占用在 buff/cache,可以使用以下命令释放内存(注意:这会降低后续文件读取速度,属于临时措施):

sync; echo 3 > /proc/sys/vm/drop_caches

终止非关键进程(紧急止血) 如果是某个临时任务或测试脚本导致内存飙升,且该进程不是系统核心服务,可以使用 kill 命令强制终止:

kill -9 [PID]
  • -9 代表强制终止,慎用。

优化 Swappiness 设置(防止频繁交换) Linux 默认的 Swappiness 值为 60,意味着当内存使用达到 40% 时就会开始使用交换分区(虚拟内存),这会严重拖慢服务器速度,我们可以将阈值调低,让系统更积极地使用物理内存而非硬盘交换:

# 永久修改(写入配置文件)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

解决僵尸进程 有时候进程虽然退出了,但状态没有更新,会一直占用内存,检查僵尸进程:

ps aux | grep defunct

如果是僵尸进程,通常需要重启对应的服务或等待父进程回收资源。

第四步:长期优化与监控

解决眼前的危机后,我们需要防止再次发生:

  1. 增加物理内存:如果业务量持续增长,最根本的解决办法是升级服务器内存条。
  2. 优化应用程序:检查 Java、Nginx、MySQL 等核心服务的配置,优化代码逻辑,减少内存泄漏。
  3. 部署监控:安装 nmonzabbix 等监控工具,设置 80% 或 85% 的报警阈值,防患于未然。

CentOS内存大于百分之90 时,先别急着

文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码