当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具。free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
free [参数]
可选参数:
参数 | 含义 |
---|---|
-b | 以Byte为单位显示内存使用情况 |
-k | 以KB为单位显示内存使用情况 |
-m | 以MB为单位显示内存使用情况 |
-g | 以GB为单位显示内存使用情况 |
-h | 根据内存大小自动选择合适的单位显示 |
-o | 不显示缓冲区调节列 |
-s | <间隔秒数> 持续观察内存使用状况 |
-c | <显示次数> 和-s配合使用 |
-t | 显示内存总和列 |
-V | 显示版本信息 |
下面列举一个常用的命令格式:
显示所有的内存信息,每隔两秒显示一次,一共显示两次
free -h -s 2 -c 2
输出显示如下:
Men表示具体的物理内存,从多个维度统计了物理内存的情况,每个维度的含义如下:
参数 | 含义 |
---|---|
total | 总计物理内存的大小 |
used | 已使用的物理内存的大小 |
free | 可用物理内存大小 |
shared | 多个进程共享的内存总额 |
buffers | 写入磁盘内存缓冲区的大小(经常进行磁盘IO的效率比较低,所以先将要写入磁盘的文件进行一定数量的缓冲,等缓冲数据到达一定大小是一次性写进磁盘,提升效率) |
cached | 从磁盘中读取内容的缓存大小(原理差不多) |
available | 估计有多少内存可用于启动新程序,不包括swap |
-buffers/cache | 表示被程序实实在在吃掉的内存 |
+buffers/cache | 表示应用程序还可以可以申请的内存总数 |
上图中最后一行是swap分区的使用情况,swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件,所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时(所谓的吃紧,应该是指当释放了Cache和Buffer的内存,内存还是不够用),Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。 关于设置swap分区以及相关问题方法总结,可参考解决
[Linux]设置swap分区以及相关问题解决方法总结https://blog.csdn.net/GY_1202/article/details/129968922?spm=1001.2014.3001.5501
free参数和available参数的区别:
free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。
参考文章:Linux 内存分析工具——free命令https://www.cnblogs.com/54chensongxia/p/12330592.html
uptime 用于显示系统总共运行了多长时间和系统的平均负载。uptime 命令会显示一行信息,依次为:当前时间、系统已经运行了多长时间、目前有多少用户登录、系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载。输出结果等同于 top 命令汇总区的第一行。
下面列举一个常用的命令格式:
uptime [options]
选项说明:
参数 | 含义 |
---|---|
-p | --pretty 采用可读友好的格式输出系统已运行时长 |
-h | --help 显示帮助信息 |
-s | --since 以格式 yyyy-mm-dd HHSS format 输出系统启动时间 |
-V | --version 显示版本信息 |
显示的信息依次为:当前时间、系统已经运行了多长时间(1小时49分钟)、目前有多少登录用户(2 users)、系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载(load average: 0.00, 0.01, 0.05)。
②查看系统启动时间:
③只输出系统运行时长:
① 系统平均负载
系统平均负载指单位时间内,系统中处于可运行状态和不可中断状态的进程数,也就是平均活跃进程数,这与CPU 使用率没有直接关系。
可运行状态的进程指正在使用 CPU 或正在等待使用 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。不可中断状态的进程指正在等待某些 I/O 的进程,即在 ps 命令中看到的 D 状态的进程。例如等待磁盘 I/O,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
uptime 命令给出的三个时间段的平均负载并不是标准化的,因为系统中 CPU 核心数量是不定的。平均负载为 1 意味着拥有一个 CPU 核心的系统一直在忙碌,而在一个拥有 4 个 CPU 核心的系统上,意味着系统 75% 的时间是空闲的。所以,当系统平均负载除以 CPU 核心数小于等于 1表示系统没有出现过载的情况。最理想的情况是每个CPU 上都刚好运行一个进程,这样 CPU 就得到了充分的利用。
另外,读取文件 /proc/loadavg 可直接查看系统平均负载:
除了前 3 个数字表示系统平均负载外,后面的一个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程 ID。
②获取系统 CPU 核心数
使用 lscpu 命令查看:
或者直接访问文件 /proc/cpuinfo 获取 CPU 核心数:
cat /proc/cpuinfo | grep 'model name' | wc -l
③平均负载与 CPU 使用率的关系
平均负载是指单位时间内,系统中处于可运行状态和不可中断状态的进程数,所以,他不仅包扩了正在使用CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,和平均负载并不一定完全对应。比如:CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;I/O 密集型进程, 等待 I/O 也会导致平均负载升高,但是 CPU 使用率不一定很高,所以假如我们系统平均负载很高,但是 CPU 使用率不是很高,则需要考虑是否系统遇到了 IO 瓶颈,应该优化 IO 读写速度。
参考文章:Linux uptime 命令https://blog.csdn.net/K346K346/article/details/102420633
vmstat主要是用来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括CPU使用率,内存使用率,虚拟内存交换情况,IO读写情况等。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。若表示每隔5秒采集一次服务器状态,采集2次,则如下表示:
vmstat命令常用的选项如下:
选项 | 含义 |
---|---|
-a | 显示活跃和非活跃内存 |
-f | 显示从系统启动至今的fork数量 |
-m | 显示slabinfo |
-s | 显示内存相关统计信息及多种系统活动数量 |
-d | 显示磁盘相关的统计信息 |
-S | 使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(Byte),默认单位为K(1024 Bytes) |
delay | 刷新时间间隔,如果不指定,只显示一条结果 |
count | 刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷 |
类别 | 参数 | 含义 | 说明 |
---|---|---|---|
procs | r | 运行队列中进程的数量,这些进程都是可运行状态,都在等待CPU的分配 | 当这个值超过了CPU数目,就会出现CPU瓶颈 |
b | 被blocked(阻塞)的进程数,正在等待IO | ||
memory | swpd | 使用的虚拟内存的大小,单位是KB | 如果该值大于0,表示物理内存不足了,如果不是内存泄露的原因,需要考虑升级内存或者把耗内存的任务迁移到其它机器 |
free |
可用的物理内存大小,单位是KB | ||
buff | 物理内存用来缓存读写操作的buffer大小,单位是KB | ||
cache | 物理内存用来缓存进程地址空间的cache大小,单位是KB | ||
swap | si |
每秒从SWAP(交换分区)读入到RAM(swap in)的大小,单位是KB | 内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。内存是否够用不能只看空闲内存(free),还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响 |
so | 每秒从RAM写出到SWAP(swap out)的大小,单位是KB | ||
io | bi |
每秒从文件系统或SWAP读入到RAM(blocks in)的块数,block(1KB磁盘块)为单位 | 随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大 |
bo | 每秒从RAM写出到文件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位 | ||
system | in |
每秒的中断数,包括时钟中断 | 这两个值越大,会看到内核消耗的cpu时间sy会越多。cs表示每秒上下文切换的次数,调用系统函数以及进行线程的切换,都要进行上下文切换,这个值越小越好。上下文切换次数过多表示你的CPU大部分时间浪费在上下文切换中。 |
cs | 系统每秒进行上下文切换的次数 | ||
cpu | us |
用户空间占用CPU的百分比 | us的值比较高时,说明用户进程消耗的CPU时间比较多,但是如果长期超过50%,那么我们就该考虑优化程序算法或者进行加速 |
sy |
内核空间占用CPU的百分比 | sy的值高时,说明系统内核消耗的CPU资源多 | |
id | CPU空闲的百分比 | 一般来说,us+sy+id=100 | |
wa | CPU等待IO的百分比 | wa的值高时,说明CPU等待IO的时间比较多,这可能是大量的磁盘随机访问造成的,也有可能是磁盘出现瓶颈 | |
st | 来自于虚拟机偷取的CPU所占的百分比 |
参考文章:Linux vmstat命令详解https://www.cnblogs.com/baichunyu/p/15362733.html
注:可以主要考虑以下几点:
① 当前cs、in的变化趋势;
② sy+us的CPU占用和;
③ r就绪队列长度是否超过了CPU核心数。
mpstat是 Multiprocessor Statistics的缩写,是实时系统监控工具。统计与CPU相关的信息,这些信息存放在/proc/stat文件中。mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似的工具vmstat只能查看系统整体cpu情况。
mpstat [-P {cpu|ALL}] [internal [count]]
其中,各参数含义如下:
参数 | 含义 |
---|---|
-P {cpu l ALL} | 表示监控哪个CPU,例如mpstat -P 0 mpstat -P 3 mpstat -P ALL cpu在[0,cpu个数-1]中取值 |
internal | 相邻的两次采样的间隔时间 |
count | 采样的次数,count只能和delay一起使用 |
当没有参数时,mpstat只显示系统所有信息的平均值,有internal参数时,第一行的信息是自系统启动以来的平均信息,从第二行开始,输出为前一个internal时间段的平均信息 |
①mpstat不带参数:
此时输出为从系统启动以来所有信息的平均值。
②mpstat带参数:
此时表示每3秒产生1个关于处理器的统计数据报告,一共产生2个interval 的信息,然后再给出这2个interval的平均信息。
第一部分,输出首先显示了所有 CPU 的合计指标,然后显示了每个 CPU 各项的指标;第二部分,在结尾处显示所有 CPU 的平均值。
输出参数含义:
字段 | 含义 | |
---|---|---|
CPU | 处理器ID | |
%usr | 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负的进程 | usr/total*100 |
%nice | 在internal时间段里,nice值为负的进程占用CPU的时间(%) | nice/total*100 |
%sys | 在internal时间段里,内核态占用CPU的时间(%) | system/total*100 |
%iowait | 在internal时间段里,等待IO占用CPU的时间(%) | iowait/total*100 |
%irq | 在internal时间段里,硬中断占用CPU的时间(%) | irq/total*100 |
%soft | 在internal时间段里,软中断占用CPU的时间(%) | softirq/total*100 |
%steal | 显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比 | steal/total*100 |
%guest | 显示运行虚拟处理器时CPU花费时间的百分比 | guest/total*100 |
%idle | 在internal时间段里,CPU除去等待磁盘IO操作外的,因为任何原因而空闲的闲置时间(%) | idle/total*100 |
① mpstat可以显示每个CPU的统计信息,而vmstat只显示所有CPU的统计信息。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。
② vmstat中所有关于CPU的总结都适合mpstat。当您看到较低的 %idle 数字时,就知道出现了 CPU 不足的问题。当您看到较高的 %iowait 数字时,就知道在当前负载下等待IO严重。
参考文章:Linux中mpstat命令参数详解https://blog.csdn.net/quiet_girl/article/details/50697412
top命令是Linux系统中常用的性能分析工具,可以实时地查看系统的运行情况,比如内存、CPU、负载以及各个进程的资源占用情况。
执行top后输出界面展示:
注:top界面主要分为两个部分,前5行展示的是系统的整体性能,光标下面的部分是系统中每个进程的具体信息。光标所在处是用来输入操作命令的。
第一行:
字段 | 含义 |
---|---|
top | 名称 |
22:00:00 | 系统当前时间 |
up 4:54 | 系统以及运行的时间,和uptime命令相等 |
2 users | 当前有2个用户在线 |
load average: 0.00, 0.01, 0.053 | 系统一定时间内的平均负载,分别是1分钟、5分钟、15分钟 |
第二行:
字段 | 含义 |
---|---|
Tasks |
任务,也就是进程 |
189 tota | 当前总共有189个任务,也就是189个进程 |
1 running | 1个进程正在运行 |
188 sleeping | 188个进程正在休眠 |
0 stopped | 0个停止的进程 |
0 zombie | 0个僵尸进程 |
第三行:
字段 |
含义 |
---|---|
%Cpu(s) | CPU使用率 |
0.0 us | 用户空间占用CPU时间的百分比(大部分进程都运行在用户态,通常都是希望用户空间CPU越高越好) |
0.1 sy | 内核空间占用CPU时间的百分比(Linux内核态占用的CPU时间,系统 CPU占用越高,表明系统某部分存在瓶颈。通常这个值越低越好) |
0.0 ni | 占用CPU时间的百分比(ni是nice的缩写,进程用户态的优先级,如果调整过优先级,那么展示的就是调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么ni就显示为0) |
99.9 id | 空闲CPU占用率,等待进程运行 |
0.0 wa | 等待输入输出的CPU时间百分比(CPU的处理速度是很快的,磁盘IO操作是非常慢的。wa表示 CPU 在等待 IO 操作完成所花费的时间。系统不应该花费大量的时间来等待 IO 操作,否则就说明 IO 存在瓶颈) |
0.0 hi | CPU硬中断时间百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息 ) |
0.0 si | CPU软中断时间百分比(软中断是由程序发出的中断 ) |
0.0 st | 被强制等待(involuntary wait)虚拟 CPU 的时间,此时 Hypervisor 在为另一个虚拟处理器服务 |
第四行:
字段 | 含义 |
---|---|
MiB Mem |
内存 |
1867292 total | 物理内存总量 |
86080 free | 空闲内存量 |
587940 used | 已使用的内存量 |
1193272 buff/cache | 用作内核缓存的内存量 |
第五行:
字段 | 含义 |
---|---|
MiB Swap |
交换空间(虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟城内存使用) |
2097148 total | 交换区总量 |
2097148 free | 空闲交换区总量 |
0 used | 使用的交换区总量 |
1045256 avail Mem | 可用于启动一个新应用的内存(物理内存),和free不同,它计算的是可回收的page cache和memory slab |
注:第四行和第五行输出信息,等同于使用free -m命令。
字段解释:
字段 | 含义 |
---|---|
PID |
进程id |
USER | 进程所有者 |
PR | 进程的优先级,越小优先级越高 |
NI | nice值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存,单位是kb |
RES | 进程使用的物理内存,单位kb |
SHR | 进程使用的共享内存,单位kb |
S | 进程状态(S表示休眠,R表示正在运行, Z表示僵死状态,N表示该进程优先值为负数,I表示空闲状态) |
%CPU | 进程占用的CPU使用率 |
%MEM | 进程使用的物理内存和总内存的百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令行 |
注:上述列是top命令的默认显示,还有一些参数可以使用top的交互命令选择显示,按f键,选择需要展示的部分。
格式:top [选项]
选项 | 功能 |
---|---|
-p |
只显示某个进程的信息 |
-d | 设置刷新时间,默认是5s |
-c | 显示产生进程的完整命令,默认是进程名 |
-o | 指定要排序的字段,比如top -o PID 按照PID从大到小,top -o -PID 按照PID从小到大 |
-n | 指定刷新次数,比如 top -n 3,刷新输出3次后退出 |
-b | 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如 top -b -n 3 > /tmp/top.tmp |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的进程 |
-u | 查找特定用户启动的进程 |
top命令在执行过程中可以使用一些交互功能:
按键 | 功能 |
---|---|
h键 |
按下h键,会显示帮助画面 |
c键 | 按下c键,会显示产生进程的完整命令,等同于-c参数,再次按下c键,变为默认显示 |
f键 | 按下f键,可以选择需要展示的项目 |
M键 | 按下M键,根据驻留内存大小(RES)排序 |
P键 | 按下P键,根据CPU使用百分比大小进行排序 |
T键 | 按下T键,根据时间/累计时间进行排序 |
E键 | 按下E键,切换顶部内存显示单位 |
e键 | 按下e键,切换进程内存显示单位 |
l键 | 按下l键,切换显示平均负载和启动时间信息 |
t键 | 按下t键,切换显示CPU状态信息 |
m键 | 按下m键,切换显示内存信息 |
参考文章:top命令详细解读https://blog.csdn.net/m0_72838865/article/details/126482884
输出展示如下:
[root@localhost ~]# cat /proc/meminfo
MemTotal: 1867292 kB
MemFree: 916616 kB
MemAvailable: 1146652 kB
Buffers: 1004 kB
Cached: 353620 kB
SwapCached: 0 kB
Active: 475432 kB
Inactive: 277772 kB
Active(anon): 399436 kB
Inactive(anon): 8956 kB
Active(file): 75996 kB
Inactive(file): 268816 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Dirty: 48 kB
Writeback: 0 kB
AnonPages: 398592 kB
Mapped: 109092 kB
Shmem: 9812 kB
Slab: 88876 kB
SReclaimable: 32668 kB
SUnreclaim: 56208 kB
KernelStack: 8144 kB
PageTables: 22640 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3030792 kB
Committed_AS: 2599896 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 183520 kB
VmallocChunk: 34359310332 kB
HardwareCorrupted: 0 kB
AnonHugePages: 81920 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 98176 kB
DirectMap2M: 1998848 kB
DirectMap1G: 0 kB
输出参数说明:
参数 | 说明 |
---|---|
MemTotal | 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)(HighTotal + LowTotal),系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的 |
MemFree |
LowFree与HighFree的总和,被系统留着未使用的内存,MemFree是说的系统层面 |
MemAvailable | 应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计,MemAvailable是说的应用程序层面 |
Buffers | 用来给文件做缓冲大小 |
Cached | 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ) |
SwapCached | 被高速缓冲存储器(cache memory)用的交换空间的大小,已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口 |
Active | 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用. (Active(anon) + Active(file)) |
Inactive | 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径. (Inactive(anon) + Inactive(file)) |
Active(anon) | 活跃的与文件无关的内存(比如进程的堆栈,用malloc申请的内存)(anonymous pages),anonymous pages在发生换页时,是对交换区进行读/写操作 |
Inactive(anon) | 非活跃的与文件无关的内存(比如进程的堆栈,用malloc申请的内存) |
Active(file) | 活跃的与文件关联的内存(比如程序文件、数据文件所对应的内存页)(file-backed pages) File-backed pages在发生换页(page-in或page-out)时,是从它对应的文件读入或写出 |
Inactive(file) | 非活跃的与文件关联的内存(比如程序文件、数据文件所对应的内存页) |
HighTotal | 高位内存总大小(Highmem是指所有内存高于860MB的物理内存,Highmem区域供用户程序使用,或用于页面缓存。该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存) |
HighFree | 未被使用的高位内存大小 |
LowTotal | 低位内存总大小,低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构 |
LowFree | 未被使用的低位大小 |
SwapTotal | 交换空间的总大小 |
SwapFree | 未被使用交换空间的大小 |
Dirty | 等待被写回到磁盘的内存大小 |
Writeback | 正在被写回到磁盘的内存大小 |
AnonPages | 未映射页的内存大小 |
Mapped | 设备和文件等映射的大小 |
Slab: 59840 | 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗 |
SReclaimable | 可收回Slab的大小 |
SUnreclaim | 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab) |
KernelStack | 常驻内存,每一个用户线程都会分配一个kernel stack(内核栈) |
PageTables | 管理内存分页页面的索引表的大小 |
NFS_Unstable | 不稳定页表的大小 |
CommitLimit: 1053080 kB | 根据超额分配比率('vm.overcommit_ratio'),这是当前在系统上分配可用的内存总量,这个限制只是在模式2('vm.overcommit_memory')时启用。CommitLimit用以下公式计算:CommitLimit =('vm.overcommit_ratio'*物理内存)+交换,例如,在具有1G物理RAM和7G swap的系统上,当`vm.overcommit_ratio` = 30时 CommitLimit =7.3G |
Committed_AS | 目前在系统上分配的内存量。是所有进程申请的内存的总和,即时所有申请的内存没有被完全使用,例如一个进程申请了1G内存,仅仅使用了300M,但是这1G内存的申请已经被 "committed"给了VM虚拟机,进程可以在任何时间使用。如果限制在模式2('vm.overcommit_memory')时启用,分配超出CommitLimit内存将不被允许 |
VmallocTotal | 可以vmalloc虚拟内存大小 |
VmallocUsed | vmalloc已使用的虚拟内存大小 |
VmallocChunk | 最大的连续未被使用的vmalloc区域 |
参考文章:cat /proc/meminfo 各字段详解https://blog.csdn.net/JustDoIt_201603/article/details/106629059
输出展示如下:
[root@localhost ~]# cat /proc/3225/status
Name: abrt-applet
State: S (sleeping)
Tgid: 3225
Ngid: 0
Pid: 3225
PPid: 2774
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 64
Groups: 10 1000
VmPeak: 554100 kB
VmSize: 527480 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 14824 kB
VmRSS: 14812 kB
RssAnon: 5040 kB
RssFile: 9772 kB
RssShmem: 0 kB
VmData: 150932 kB
VmStk: 136 kB
VmExe: 40 kB
VmLib: 33312 kB
VmPTE: 560 kB
VmSwap: 0 kB
Threads: 3
SigQ: 0/7170
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180004000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp: 0
Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list: 0-127
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 187
nonvoluntary_ctxt_switches: 9
输出参数说明:
参数 | 说明 |
---|---|
Name | 可执行程序的名字 |
State | 任务状态,运行/睡眠/僵死 |
Tgid | 线程组号 |
Pid | 进程id |
PPid | 父进程id |
FDSize | 该进程最大文件描述符个数 |
VmPeak | 当前进程运行过程中占用内存的峰值 |
VmSize | 进程现在正在占用的内存 |
VmLck | 进程已经锁住的物理内存大小,锁住的物理内存不能交换到硬盘 |
VmHWM |
程序得到分配到物理内存的峰值 |
VmRSS | 程序现在使用的物理内存 |
VmData | 进程数据段的大小 |
VmStk | 进程堆栈段的大小 |
VmExe | 进程代码段大小 |
VmLib | 进程使用的库映射到虚拟内存空间的大小 |
VmPTE | 进程页表大小 |
Threads | 共享使用该信号描述符的任务个数,在POSIX多线程应用程序中,线程组中的所有线程使用同一个信号描述符 |
本文章根据相关资料以及优秀文章总结了Linux常用性能分析命令,以便根据具体需求选择合适的方式去分析系统性能。