前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转服务器】Linux服务器内存占用高排查方法

【玩转服务器】Linux服务器内存占用高排查方法

原创
作者头像
参谋带个长
修改2024-03-06 11:18:42
9320
修改2024-03-06 11:18:42
举报

当Linux服务器内存占用高时,可以按照以下步骤进行排查:

查看内存使用情况

使用free命令可以查看系统的内存使用情况,包括总内存、已用内存、空闲内存等信息。

有时系统内存占用高可能是由缓存和缓冲区所导致的。Linux系统会利用未分配的内存作为缓存和缓冲区,以提高文件访问速度。

代码语言:bash
复制
# -h 人类可读的格式输出信息
free -h

# 可能返回
            total        used        free      shared  buff/cache   available
内存:       15Gi       1.5Gi        12Gi        46Mi       1.4Gi        13Gi
交换:      2.0Gi          0B       2.0Gi

查看进程内存占用

使用tophtop命令可以查看系统进程的内存占用情况,按照内存使用量排序,找出消耗较大的进程。

htop命令可使用 yum install htop 进行安装

代码语言:bash
复制
# 命令进入htop的交互界面通过按键组合进行交互
htop

# top命令进入界面,按下大写字母 M 按照内存占用从高到低进行排序
top

# 可能返回
top - 08:16:26 up 15 min,  1 user,  load average: 0.00, 0.04, 0.05
Tasks:  89 total,   1 running,  88 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 98.8 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                      
 2292 root      17  -3 1016716  40844  16904 S   1.3  2.0   0:09.14 YDService                                                                                                                                    
 1028 root      20   0  574288  19516   6152 S   0.0  1.0   0:00.23 tuned                                                                                                                                        
 1646 root      20   0  987628  19036   5824 S   0.0  0.9   0:00.29 YDLive                                                                                                                                       
 1709 root      20   0  622856  14296   3316 S   0.7  0.7   0:05.68 barad_agent                                                                                                                                  
  681 polkitd   20   0  614324  11116   4684 S   0.0  0.5   0:00.03 polkitd                                                                                                                                      
 1027 root      10 -10   61488  10136   8564 S   0.0  0.5   0:00.00 iscsid                                                                                                                                       
 1255 root      20   0  218528   9648   2984 S   0.0  0.5   0:00.07 rsyslogd                                                                                                                                     
 1708 root      20   0  164896   9496   2080 S   0.0  0.5   0:00.53 barad_agent              

查看系统日志

查看系统日志可以帮助定位内存占用高的原因。

代码语言:bash
复制
# journalctl命令查看系统日志,过滤关键词(“memory”或“oom”)查找相关日志
journalctl | grep -i memory

# 内核日志包含有关内存使用情况
grep -i memory /var/log/messages

内存泄漏检测

如果怀疑有内存泄漏,可使用valgrind进行内存泄漏检测。

由于 valgrind 的工作原理,它可能会使程序的运行速度变慢,并且可能会增加程序的内存使用量。因此,通常只在开发和调试阶段使用 valgrind,而不是在生产环境中。

代码语言:bash
复制
# 对程序 nginx 进行 --leak-check=full 启用完全的内存泄漏检测
valgrind --leak-check=full nginx

查看共享内存

如果共享内存占用较多,需要进一步检查是哪个进程在使用共享内存。

代码语言:bash
复制
# 查看命令
cat /proc/meminfo | grep -i shmem

# 返回结果中Shmem表示系统中当前使用的共享内存总量
Shmem:             49004 kB

查看不可回收的slab内存

查看不可回收的slab内存占用情况,如果这部分内存占用较高,可以使用slabtop命令查看是哪些slab占用大。

代码语言:bash
复制
# 查看
cat /proc/meminfo | grep -i SUnreclaim

# slabtop 命令用于实时显示内核的“slab”内存缓存信息
slabtop

检查大页内存

查看是否配置了内存大页。如果HugePages_Total输出非0,表示配置了内存大页。需要确认这些大页是业务自身配置还是其它恶意程序配置。

代码语言:bash
复制
# 查看
cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize"

# 可能返回
HugePages_Total:       0
Hugepagesize:       2048 kB

检查Swap分区

如果Swap分区使用过多,说明系统已经开始使用磁盘作为内存扩展,这可能会影响性能。

代码语言:bash
复制
# 命令一
free

# 命令二
swapon -s

分析内存使用情况

可以使用pmap命令分析特定进程的内存使用情况,或者使用perf命令进行更详细的性能分析。

总结

在实际应用中,某个进程占用内存过高可能问题并非出在程序本身,如 mysql 占用内存过高,则有可能是程序代码中 sql 语句不够优化导致,所以排查要从全局出发,考虑系统整体资源占用情况。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看内存使用情况
  • 查看进程内存占用
  • 查看系统日志
  • 内存泄漏检测
  • 查看共享内存
  • 查看不可回收的slab内存
  • 检查大页内存
  • 检查Swap分区
  • 分析内存使用情况
  • 总结
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档