在CentOS 7上查看和管理内存使用情况

在Linux系统中,内存管理是一个至关重要的方面,尤其在生产环境中,了解系统内存的使用情况可以帮助管理员优化系统性能,检测内存泄漏,合理分配资源,从而确保系统的稳定运行。本文将详细介绍在CentOS 7系统中如何使用常见的内存监控工具,如freetopps等,并深入探讨这些工具的各种参数和用法,以便读者能够全面掌握系统内存的监控与管理。

free 命令详解

基本用法

free命令是Linux系统中最常用的查看内存使用情况的命令之一,它能够显示系统中的物理内存和交换内存的使用情况。其基本语法如下:

shell 复制代码
free [选项]

常用选项

  • -b:以字节为单位显示内存使用情况。
  • -k:以KB为单位显示内存使用情况(默认选项)。
  • -m:以MB为单位显示内存使用情况。
  • -g:以GB为单位显示内存使用情况。
  • -t:在输出的最后一行显示总内存使用情况。
  • -s <间隔时间>:周期性地显示内存使用情况,间隔时间为指定的秒数。
  • -c <次数>:指定周期性显示内存使用情况的次数。
  • -h:以人类可读的方式显示内存使用情况,例如,将数字转换为易于理解的单位(GB、MB、KB等)。

示例

以下是一些使用free命令的示例:

1. 以人类可读的方式显示内存使用情况
shell 复制代码
[root@VM-16-3-centos ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.6G         85M        776K        305M        238M
Swap:            0B          0B          0B
2. 显示总内存使用情况
shell 复制代码
[root@VM-16-3-centos ~]# free -ht
              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.6G         86M        776K        305M        239M
Swap:            0B          0B          0B
Total:         2.0G        1.6G         86M

输出解释

  • total:总物理内存
  • used:已经使用的内存
  • free:没有使用的内存
  • shared:多进程共享内存
  • buff/cache:读写缓存内存
  • available:应用程序可用的物理内存

这些信息能够帮助我们快速了解系统当前的内存使用情况,评估内存的分配和使用效率。

top 命令详解

top命令是Linux系统中另一个非常强大的工具,用于实时监控系统的资源使用情况,包括CPU、内存、交换分区的使用情况,以及各个进程的详细信息。

基本用法

shell 复制代码
top [选项]

常用选项

  • -d seconds:设置top命令的刷新间隔时间,默认为3秒。
  • -u username:只显示指定用户名的进程信息。
  • -p pid:只显示指定进程ID的信息。
  • -n iterations:设置top命令的循环次数,即显示的次数。
  • -s field:按指定字段对进程进行排序,默认按CPU使用率排序。可选字段包括pid、user、pr、ni、virt、res、shr、s、%cpu、%mem、time+、time、command。
  • -o field:按指定字段对进程进行排序,与-s参数不同的是,-o参数可同时指定多个字段进行排序。
  • -c:显示完整的命令行信息。

示例

以下是一些使用top命令的示例:

1. 默认显示系统资源使用情况
shell 复制代码
[root@VM-16-3-centos ~]# top
top - 15:47:19 up 164 days,  6:58,  1 user,  load average: 0.21, 0.20, 0.13
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  0.5 sy,  0.0 ni, 97.5 id,  0.7 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2046684 total,    95396 free,  1648520 used,   302768 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   241956 avail Mem
2. 显示完整的命令行信息
shell 复制代码
[root@VM-16-3-centos ~]# top -c
top - 15:47:56 up 164 days,  6:59,  1 user,  load average: 0.11, 0.17, 0.13
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.7 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2046684 total,    94868 free,  1648668 used,   303148 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   241808 avail Mem

输出解释

  • USER:进程所有者的用户名
  • PID:进程ID
  • %CPU:进程占用CPU的百分比
  • %MEM:进程占用内存的百分比
  • VSZ:进程占用的虚拟内存大小,单位为KB
  • RSS:进程占用的实际物理内存大小,单位为KB
  • TTY:进程所在的终端
  • STAT:进程状态,包括R(运行)、S(睡眠)、T(停止)、Z(僵尸进程)等
  • START:进程启动的时间
  • TIME:进程占用CPU的时间
  • COMMAND:进程命令

通过这些信息,我们可以详细了解每个进程的资源使用情况,从而找出占用资源较多的进程,进行优化或处理。

ps 命令详解

ps命令用于显示当前系统的进程状态。它提供了比top命令更为灵活的进程显示和过滤功能。

基本用法

shell 复制代码
ps [选项]

常用选项

  • a:显示所有进程,包括其他用户的进程。
  • u:以用户为主要输出格式,包括进程用户、进程ID、CPU使用率、内存占用等。
  • x:显示没有控制终端的进程。
  • -e:显示所有进程。
  • -f:显示完整格式的进程信息。
  • -o format:自定义输出格式。
  • --sort:按照指定字段排序。

示例

1. 按内存使用排序显示前5个进程
shell 复制代码
[root@VM-16-3-centos ~]# ps aux --sort=-rss | head -n 5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql     1180  0.0 13.8 1612496 283868 ?      Sl    2023 155:13 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root      3997  0.0 13.4 2691696 275900 ?      Sl    2023 191:01 java -jar dbd-1.0.0-SNAPSHOT.jar
root      4457  0.0 13.3 2698236 273284 ?      Sl    2023 227:17 java -jar lim-0.0.1-SNAPSHOT.jar
root      7843  0.1 12.7 2705412 261332 ?      Sl   Apr09   5:26 java

 -jar station-0.0.1-SNAPSHOT.jar

输出解释

  • USER:进程所有者的用户名
  • PID:进程ID
  • %CPU:进程占用CPU的百分比
  • %MEM:进程占用内存的百分比
  • VSZ:进程占用的虚拟内存大小,单位为KB
  • RSS:进程占用的实际物理内存大小,单位为KB
  • TTY:进程所在的终端
  • STAT:进程状态
  • START:进程启动的时间
  • TIME:进程占用CPU的时间
  • COMMAND:进程命令

通过ps命令,我们可以灵活地显示和过滤系统中的进程信息,根据需要进行排序和筛选,从而更好地管理和优化系统资源。

进阶:系统内存分析与优化

在了解了基本的内存查看工具后,我们可以进一步进行系统内存的分析与优化。以下是一些高级技巧和方法。

使用 vmstat 进行系统性能监控

vmstat命令提供了有关系统整体性能的详细统计信息,包括内存、CPU、进程和I/O的详细情况。它的基本语法如下:

shell 复制代码
vmstat [选项] [间隔] [次数]

示例

1. 每2秒刷新一次,显示5次
shell 复制代码
[root@VM-16-3-centos ~]# vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  95396 302768 1035752    0    0     1     2    1    1  1  1 98  0  0
 0  0      0  95396 302768 1035752    0    0     0     0  101  198  0  0 100  0  0
 0  0      0  95396 302768 1035752    0    0     0     0  109  215  0  0 100  0  0
 0  0      0  95396 302768 1035752    0    0     0     0   94  170  0  0 100  0  0
 0  0      0  95396 302768 1035752    0    0     0     0  106  188  0  0 100  0  0

输出解释

  • procs:进程信息,包括等待运行的进程数(r)和在非中断睡眠状态的进程数(b)。
  • memory:内存信息,包括已交换出的内存(swpd)、空闲内存(free)、缓冲内存(buff)、缓存内存(cache)。
  • swap:交换分区信息,包括从交换区读取的内存(si)和写入交换区的内存(so)。
  • io:I/O信息,包括从块设备接收的块数(bi)和发送到块设备的块数(bo)。
  • system:系统信息,包括每秒中断次数(in)和每秒上下文切换次数(cs)。
  • cpu:CPU信息,包括用户时间(us)、系统时间(sy)、空闲时间(id)、等待I/O时间(wa)、虚拟机时间(st)。

通过vmstat命令,我们可以全面监控系统的运行状态,及时发现和处理性能瓶颈。

内存优化技巧

  1. 减少缓存压力 :在服务器上运行大型应用程序时,缓存可能会占用大量内存。可以通过调整内核参数来优化缓存使用,例如减少dirty_ratio参数:

    shell 复制代码
    sysctl -w vm.dirty_ratio=10
  2. 释放缓存:可以通过以下命令手动释放内存中的缓存:

    shell 复制代码
    echo 3 > /proc/sys/vm/drop_caches
  3. 监控并优化应用程序 :使用pstop等命令找出内存使用率高的进程,对应用程序进行优化,释放不必要的资源。

  4. 合理配置交换空间:确保交换空间的大小合适,以便在物理内存不足时,系统能够正常运行。

  5. 调整OOM Killer策略 :在内存紧张时,OOM Killer会终止一些进程。可以通过调整oom_score_adjoom_score_adj_min等参数来改变OOM Killer的行为。

内存泄漏检测

内存泄漏是指程序在运行过程中动态分配内存而没有及时释放,导致内存使用量逐渐增加,最终可能耗尽系统内存。以下是一些检测和处理内存泄漏的方法:

  1. 使用Valgrind工具:Valgrind是一个强大的内存检测工具,可以检测出程序中的内存泄漏问题。

    shell 复制代码
    valgrind --leak-check=yes ./your_program
  2. 使用GDB调试:通过GDB调试程序,查看内存分配和释放情况,找出未释放的内存。

    shell 复制代码
    gdb ./your_program
    (gdb) run
  3. 日志分析:检查应用程序的日志文件,查看是否有内存泄漏的相关错误信息。

  4. 定期重启服务:对于一些长时间运行的服务,可以定期重启服务,以释放可能存在的内存泄漏。

总结

本文详细介绍了在CentOS 7系统中使用freetopps等命令查看和管理内存使用情况的方法,以及如何进行系统内存分析与优化。通过这些工具和技巧,系统管理员可以更好地了解和管理系统的内存资源,确保系统的稳定运行。希望本文对您有所帮助,让您在内存管理方面更加得心应手。

相关推荐
Yana.nice30 分钟前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月35 分钟前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
小白跃升坊1 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey1 小时前
【Linux】线程同步与互斥
linux·笔记
杨江1 小时前
seafile docker安装说明
运维
舰长1151 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀1 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng2 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.2 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
树℡独2 小时前
ns-3仿真之应用层(三)
运维·服务器·ns3