返回
内存迷雾下的真相:揭秘Linux系统内存指标的内在逻辑
后端
2023-11-07 22:59:53
在Linux系统中,内存管理是一个至关重要的环节,它直接影响着系统的性能和稳定性。通过监控和分析内存指标,管理员可以及时发现和解决内存问题,确保系统高效稳定运行。
本文将深入解析Linux内存指标的内在逻辑,介绍free、top、ps、vmstat等常用工具,并提供了全面的内存监控和分析方法,帮助管理员快速定位系统内存问题。
内存指标概述
Linux系统中的内存指标主要包括以下几个方面:
- 物理内存 (Physical Memory): 物理内存是指计算机中实际安装的内存容量,它是系统运行的基础。
- 虚拟内存 (Virtual Memory): 虚拟内存是指系统为每个进程分配的地址空间,它可以大于物理内存,当物理内存不足时,会将一部分内存数据交换到硬盘上,以提供额外的内存空间。
- 内存使用情况 (Memory Usage): 内存使用情况是指当前系统中正在使用的内存容量,包括正在运行的程序、内核数据结构以及缓存等。
- 内存交换情况 (Memory Swapping): 内存交换情况是指系统将内存数据交换到硬盘上的过程,当物理内存不足时,会将一部分内存数据交换到硬盘上,以提供额外的内存空间。
- 内存缓存情况 (Memory Cache): 内存缓存情况是指系统将经常访问的数据缓存在内存中,以提高访问速度。
内存监控工具
Linux系统提供了多种内存监控工具,管理员可以根据需要选择合适的工具来监控系统内存使用情况。
free
free命令是最常用的内存监控工具之一,它可以显示系统的物理内存、交换内存以及内存使用情况。
[root@localhost ~]$ free -h
total used free shared buff/cache available
Mem: 3.8G 2.4G 1.1G 38M 326M 1.4G
Swap: 2.0G 98M 1.9G
top
top命令可以动态显示系统的进程内存使用情况,以及其他系统信息。
[root@localhost ~]$ top -c -d 1
top - 10:53:43 up 5 days, 22:29, 4 users, load average: 0.18, 0.15, 0.14
Tasks: 255 total, 2 running, 252 sleeping, 0 stopped, 1 zombie
%Cpu0 : 10.2 us, 0.1 sy, 0.0 ni, 89.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 10.6 us, 0.1 sy, 0.0 ni, 89.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3884768 total, 14460 free, 1096524 used, 2743680 buff/cache
KiB Swap: 2097148 total, 1001480 free, 1095668 used. 834912 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 15032 1136 1100 S 0.3 0.0 0:00.30 systemd
2 root 20 0 0 0 0 S 0.3 0.0 0:00.07 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
5 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_sched
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
ps
ps命令可以显示当前正在运行的进程及其内存使用情况。
[root@localhost ~]$ ps -aux | head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 9776 1088 ? Ss May29 0:00 /sbin/init splash
root 2 0.0 0.0 0 0 ? S May29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S May29 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S May29 0:00 [rcu_bh]
root 5 0.0 0.0 0 0 ? S May29 0:00 [rcu_sched]
root 6 0.0 0.0 0 0 ? S May29 0:00 [migration/0]
root 7 0.0 0.0 0 0 ? S May29 0:00 [watchdog/0]
root 8 0.0 0.0 0 0 ? S May29 0:00 [cpuhp/0]
root 9 0.0 0.0 0 0 ? S May29 0:00 [kdevtmpfs]
root 10 0.0 0.0 0 0 ? S May29 0:00 [netns]
vmstat
vmstat命令可以显示系统的内存使用情况、交换情况、磁盘IO情况等。
[root@localhost ~]$ vmstat 1 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 2216 1136 3275 1096524 0 0 0 0 207 420 3 1 95 1
0 0 2216 1136 3275 1096524 0 0 0 0 66 412 0 1 98 1
0 0 2216 1136 3275 1096524 0 0 0 0 237 407 2 2 94 2
0 0 2216 1136 3275 1096524 0 0 0 0 91 397 2 1 96 1
0 0 2216 1136 3275 1096524 0 0 0 0 194 410 1 2 95 2
cachestat
cachestat命令可以显示系统的缓存使用情况。
[root@