Linux系统内存不足导致服务崩溃的排查方法

 更新时间:2025年08月27日 10:41:03   作者:网硕互联的小客服  
Linux 系统内存不足会导致服务崩溃、系统变慢甚至无法正常运行,以下是内存不足问题的详细排查方法,包括问题症状、原因分析及解决步骤,

1. 内存不足的常见症状

服务崩溃

  • 应用程序(如 Web 服务、数据库)无法正常运行,出现崩溃或拒绝服务。
  • 日志中可能提示 Out of MemoryKilled

系统性能下降

  • 系统响应缓慢,SSH 登录延迟高。
  • 执行命令时卡顿,例如 lstop

高 Swap 使用

  • 系统频繁使用交换分区(Swap),导致磁盘 IO 增加,性能大幅下降。

内存不足的系统日志

  • /var/log/messages/var/log/syslog 中,可能发现与内存不足相关的日志,例如:
Out of memory: Kill process 12345 (my_service) score 1234 or sacrifice child
Killed process 12345 (my_service) total-vm:123456kB, anon-rss:12345kB

2. 排查内存不足的原因

2.1 检查系统内存使用情况

查看内存和 Swap 使用情况

运行以下命令:

free -h 

输出示例:

              total        used        free      shared  buff/cache   available
Mem:           8.0G        7.5G        100M        300M        400M        150M
Swap:          2.0G        1.8G        200M
  • used:已使用内存。
  • free:剩余内存。
  • Swap:交换分区使用情况。

分析内存分配

  • 查看内存是否被缓存占用(buff/cache)。
  • 如果 available 值非常低,说明内存不足。

2.2 找出内存占用高的进程

使用 top 命令

运行以下命令:

top 

M 键,按照内存占用排序:

  • 找出内存占用最高的进程。

使用 ps 命令

按内存排序列出进程:

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

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     12345  5.0 75.6 123456 654321 ?       S    10:00   5:00 java -Xmx4G myapp.jar

使用 smem 工具(更详细的内存分析)

如果未安装,可以通过以下命令安装:

sudo apt install smem       # Ubuntu/Debian
sudo yum install smem       # CentOS/RHEL

查看实际内存占用:

smem -tk 

2.3 检查系统日志

查看 OOM(Out of Memory)日志

检查 /var/log/messages/var/log/syslog 中是否有 OOM 相关记录:

grep -i "Out of memory" /var/log/messages
grep -i "Out of memory" /var/log/syslog

查看被杀死的进程

  • 如果某些服务被系统内存管理器(OOM Killer)强制终止,日志中会提示被杀进程的名称和 PID。

2.4 检查系统内存泄漏

查找内存泄漏的进程

  • 如果某个进程的内存使用量不断增加,可能存在内存泄漏。
  • 使用 topps 命令定期查看内存增长趋势。

检查内核内存泄漏

  • 查看 slab 缓存是否异常增长:
slabtop 
  • 如果某些对象(如 dentryinode)占用大量内存,可能是内核内存泄漏。

2.5 检查缓存和缓冲

查看缓存占用情况

  • 缓存和缓冲区可能占用大部分内存,但这些内存是可释放的。
  • 使用 free -h 查看 buff/cache

清理缓存

  • 如果缓存占用过高,可以手动释放(谨慎操作):
sudo sync
sudo echo 3 > /proc/sys/vm/drop_caches

2.6 检查 Swap 使用

查看 Swap 使用情况

  • 如果内存不足,系统会使用 Swap 作为虚拟内存。
  • Swap 使用过高时,会导致性能下降(磁盘 IO 增加)。
  • 运行以下命令查看:
swapon --show 

增加 Swap 空间

  • 如果 Swap 空间不足,可以扩展 Swap 分区:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

3. 解决内存不足问题的方法

3.1 优化服务配置

调整服务的内存限制

  • 检查服务的配置文件,调整内存占用的限制。
  • 例如,优化 Java 应用的最大堆内存:
java -Xmx2G -Xms1G -jar myapp.jar

限制进程的内存使用

  • 使用 ulimit 命令限制单个进程的内存占用:
ulimit -v [memory_limit_in_kb] 

3.2 增加系统内存

  • 如果系统物理内存不足,可以通过以下方式增加:
    • 升级服务器:增加物理内存(RAM)。
    • 增加 Swap:扩展虚拟内存缓解压力。

3.3 优化系统配置

调整 OOM Killer 优先级

  • 配置某些关键服务不被 OOM Killer 优先杀死:
echo -17 > /proc/<PID>/oom_score_adj 

优化内存管理参数

  • 调整虚拟内存的触发阈值:
sysctl vm.swappiness=10 

3.4 清理系统资源

清理无用的进程

  • 使用 killpkill 终止占用内存过高的非必要进程:
kill -9 <PID> 

卸载无用服务

  • 停止和卸载占用内存的无用服务:
systemctl stop [service_name]
systemctl disable [service_name]

3.5 使用监控工具

实时监控内存使用

  • 部署监控工具(如 Zabbix、Prometheus、Grafana)跟踪内存使用情况。

设置报警机制

  • 配置内存使用超过阈值时触发报警,提前发现问题。

4. 总结

排查 Linux 系统内存不足的流程如下:

  1. 检查内存和 Swap 使用情况:使用 freetop 查找问题根源。
  2. 定位占用内存的进程:使用 pssmem 找出高内存占用进程。
  3. 分析日志信息:检查 OOM Killer 是否终止了关键服务。
  4. 优化系统和服务:调整服务配置、增加内存或清理无用进程。
  5. 部署监控工具:持续监控和优化系统资源使用。

通过合理的排查和优化,可以有效解决内存不足导致的服务崩溃问题,并提升系统稳定性和性能。

以上就是Linux系统内存不足导致服务崩溃的排查方法的详细内容,更多关于Linux内存不足服务崩溃的资料请关注脚本之家其它相关文章!

相关文章

  • Linux下安装pyenv的方法

    Linux下安装pyenv的方法

    这篇文章主要介绍了Linux下安装pyenv的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • linux如何将sda分区扩容

    linux如何将sda分区扩容

    这篇文章主要介绍了linux如何将sda分区扩容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • ubuntu系统修改时区和时间的方法

    ubuntu系统修改时区和时间的方法

    今天小编就为大家分享一篇关于ubuntu系统修改时区和时间的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 关于Linux命令行下的数学运算示例详解

    关于Linux命令行下的数学运算示例详解

    在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果。要在Shell中进行数学运算,我们需要借助点小手段。下面这篇文章主要给大家介绍了关于Linux命令行下的数学运算的相关资料,需要的朋友可以参考下
    2018-05-05
  • 详解linux dma驱动编写

    详解linux dma驱动编写

    这篇文章主要介绍了详解linux dma驱动编写,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Linux之进程的虚拟地址空间,逻辑地址和物理地址,进程管理命令

    Linux之进程的虚拟地址空间,逻辑地址和物理地址,进程管理命令

    这篇文章主要介绍了Linux之进程的虚拟地址空间,逻辑地址和物理地址,进程管理命令,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 关于Linux的curl指令使用总结

    关于Linux的curl指令使用总结

    这篇文章主要介绍了关于Linux的curl指令使用总结,具有很好的参考价值,希望对大家有所帮助。
    2023-04-04
  • 使用apachetop实时监控日志、动态分析服务器运行状态

    使用apachetop实时监控日志、动态分析服务器运行状态

    这篇文章主要介绍了使用apachetop实时监控日志、动态分析服务器运行状态,通过apachetop这个工具可以动态的查看apache的日志文件,还可以直观的看到访问的每个地址的请求数、速度及流量等信息,需要的朋友可以参考下
    2014-06-06
  • Linux动态启用/禁用超线程技术的方法详解

    Linux动态启用/禁用超线程技术的方法详解

    这篇文章主要给大家介绍了关于Linux动态启用/禁用超线程技术的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Linux调试工具GDB使用简易教程

    Linux调试工具GDB使用简易教程

    这篇文章主要介绍了Linux调试工具GDB使用简易教程,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论