CentOS、Debian和Ubuntu服务器内存使用率查看和分析的详细指南

CentOS、Debian和Ubuntu服务器内存使用率查看和分析的详细指南

发布时间:2024-10-05 03:19:46

1. free 命令

free 命令是查看内存使用情况最快捷的方式。

bash
free -h

示例输出:

 

total used free shared buff/cache available
mem: 7.7g 4.1g 208m 310m 3.4g 2.9g
swap: 2.0g 1.5m 2.0g

详细解释:

  • total: 总物理内存
  • used: 已使用的内存
  • free: 完全未使用的内存
  • shared: 多个进程共享的内存
  • buff/cache: 用作缓冲区和缓存的内存
  • available: 可用于启动新应用程序的内存估计值

注意:available 不等于 free。linux会将未使用的内存用作磁盘缓存,这部分内存可以在需要时立即释放给应用程序使用。

2. top 和 htop 命令

top 命令

bash
top

示例输出(顶部):

 

top - 14:28:23 up 7 days, 5:29, 2 users, load average: 0.52, 0.58, 0.59
tasks: 231 total, 1 running, 230 sleeping, 0 stopped, 0 zombie
%cpu(s): 2.6 us, 1.0 sy, 0.0 ni, 96.1 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
mib mem : 7908.8 total, 212.9 free, 4235.5 used, 3460.4 buff/cache
mib swap: 2048.0 total, 2046.5 free, 1.5 used. 3017.0 avail mem

top 中:

  • m 键可以按内存使用率排序
  • q 键退出

htop 命令

首先安装 htop:

centos:

bash

sudo yum install epel-release
sudo yum install htop

debian/ubuntu:

bash

sudo apt update
sudo apt install htop

然后运行:

bash
htop

htop 提供了更直观的界面,包括内存和cpu使用的图形表示。你可以使用 f1-f10 功能键进行各种操作。

3. /proc/meminfo 文件

bash
cat /proc/meminfo

示例输出(部分):

 

memtotal: 8103424 kb
memfree: 218112 kb
memavailable: 3089344 kb
buffers: 384208 kb
cached: 2710656 kb
swapcached: 192 kb
active: 3340288 kb
inactive: 3105792 kb
...

这个文件提供了最详细的内存使用信息。重要字段解释:

  • memtotal: 总物理内存
  • memfree: 完全空闲的内存
  • memavailable: 可用于启动新应用的内存估计值
  • bufferscached: 用作缓冲区和缓存的内存
  • swaptotal, swapfree: 交换空间总量和可用量

4. vmstat 命令

bash
vmstat 5 5

这会每5秒输出一次,共输出5次。

示例输出:

 

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 218112 393216 3141632 0 0 0 5 1 2 2 1 97 0 0
0 0 0 218112 393216 3141696 0 0 0 18 443 852 1 0 99 0 0
0 0 0 218112 393216 3141696 0 0 0 0 438 848 2 1 97 0 0

重要列解释:

  • swpd: 使用的交换空间
  • free: 空闲内存
  • buff: 用作缓冲区的内存
  • cache: 用作缓存的内存
  • si, so: 从磁盘交换入内存和从内存交换出到磁盘的数量
  • us, sy, id, wa: cpu时间分配(用户时间、系统时间、空闲时间、等待i/o时间)

5. ps 命令

查看内存使用最多的前10个进程:

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

示例输出:

 

user pid %cpu %mem vsz rss tty stat start time command
mysql 28830 0.3 24.9 1737504 2001312 ? ssl may07 173:41 /usr/sbin/mysqld
www-data 1253 0.0 5.6 358640 453800 ? s may07 0:16 /usr/sbin/apache2 -k start
www-data 1252 0.0 5.6 358508 453668 ? s may07 0:16 /usr/sbin/apache2 -k start

列解释:

  • %mem: 进程使用的物理内存百分比
  • vsz: 虚拟内存大小(kb)
  • rss: 常驻集大小,即进程使用的非交换物理内存(kb)

6. sysstat 包中的 sar 命令

首先安装 sysstat:

centos:

bash
sudo yum install sysstat

debian/ubuntu:

bash

sudo apt update
sudo apt install sysstat

然后使用 sar 查看内存使用历史:

bash
sar -r

这会显示今天的内存使用统计。要查看特定日期的数据:

bash
sar -r -f /var/log/sa/sa日期

其中"日期"是两位数的日期(如 01 表示本月1号)。

示例输出:

 

12:00:01 am kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:10:01 am 218112 7885312 97.31 393216 3141632 8539648 84.60 3407872 3178496 36
12:20:01 am 218112 7885312 97.31 393216 3141696 8539648 84.60 3407872 3178560 36

分析和解释内存使用情况

  1. 总体内存使用率
    • 如果 free 命令显示的 available 内存很低(比如少于总内存的 10%),可能表明系统内存压力较大。
    • 但要注意,高缓存(buff/cache)使用并不一定是坏事,因为这部分内存可以在需要时快速释放。
  2. 交换空间使用
    • 如果 free 命令显示交换空间使用量很大,而且 vmstat 显示频繁的交换活动(siso 列有持续的非零值),这可能表明系统内存不足。
  3. 进程内存使用
    • 使用 pstop 命令查看哪些进程占用最多内存。
    • 如果单个进程占用了大量内存,可能需要调查该进程是否有内存泄漏或配置问题。
  4. 内存增长趋势
    • 使用 sar 命令查看内存使用的长期趋势。如果可用内存持续下降,可能需要考虑增加物理内存或优化应用程序。
  5. 缓存和缓冲区
    • 大量的缓存和缓冲区使用通常是好事,因为它提高了系统性能。只有当活跃进程需要更多内存时,这部分内存才会成为问题。
  6. oom killer
    • 如果在系统日志(/var/log/syslog/var/log/messages)中看到 out of memory (oom) killer 的活动,这表明系统曾经严重缺乏内存,被迫终止了某些进程。

记住,内存管理是一个复杂的主题。单一的高内存使用并不一定表示问题,重要的是要综合考虑系统性能、应用需求和用户体验。如果你持续观察到内存压力,可能需要考虑增加物理内存、优化应用程序或调整系统配置。

--------------------------------------------------------

以上是涵盖了在centos、debian和ubuntu服务器上查看和分析内存使用率的多种方法。这个指南不仅包括了每个命令的详细说明,还提供了输出示例和解释,以及如何解读这些信息。

主要内容包括:

  1. 使用 free 命令的详细解释
  2. tophtop 命令的使用方法和输出解读
  3. 解析 /proc/meminfo 文件的关键信息
  4. 使用 vmstat 命令进行内存监控
  5. 使用 ps 命令查看单个进程的内存使用
  6. 使用 sysstat 包中的 sar 命令进行历史数据分析
  7. 如何分析和解释内存使用情况

这个指南不仅告诉您如何获取内存使用数据,还帮助您理解这些数据的含义,以及如何判断是否存在内存问题。

感谢05互联