当前位置:首页 > 内存 > 正文

linux虚拟内存占用过高

  • 内存
  • 2024-09-06 13:10:51
  • 1792

一、Linux中虚拟内存查看命令vmstat的使用教程

vmstat是一个查看虚拟内存使用情况的工具。可以查看服务器使用情况、内存使用情况、虚拟内存交换、IO读写情况,可以查看整台机器的CPU、内存、IO情况。

默认情况下,vmstat命令需要安装sysstat软件包,其中包含vmstat程序。

这个常用该命令后面跟着两个数字参数。第一个参数是采样时间间隔(以秒为单位),第二个参数是采样数量。

默认参数:

vmstat[-a][-n][-t][-Sunit][delay[count]]
[-a]:显示活动和非活动内存
[-n]:仅在开头输入一次字段名称多次展示、采集信息时,输出更加人性化。
[-t]:在每条信息的末尾,表示信息采集的时间
[-Sunit]:以指定单位显示。参数为k、K、m、M,分别代表1000、1024、1000000、1048576字节。基本单位为K(1024字节)
[delay[count]]:delay为信息采集间隔,count为信息采集次数

vmstat[-s][-n][-Sunit]
[-s]:显示内存相关统计信息
vmstat[-m][-n][delay[count]]
[-m]:显示slabinfo。labinfo信息写入/proc/slabinfo文件。Slab是Linux的内存分配机制。
vmstat[-d][-n][delay[count]]
[-d]:显示相关磁盘的统计信息
注:这是-与p以下的差异以及统计信息的差异有关。-p为子分区。

vmstat[-pdiskpartition][-n][delay[count]][-pdiskpartition]:显示磁盘子分区的统计信息。这不像iostat信息那么有用。

vmstat[-f]
[-f]:自启动以来的分支数量注意:这里的分支必须是内核的fork()函数。从父进程分支返回新创建子进程的进程ID。

vmstat[-V]
[-V]:版本信息


复制代码

代码为:

root@192.168.22.54:~#vmstat210
进程-------------内存---------------交换-----io------系统--------cpu----
rbswpdfreebuffcachesisobiboincsussyidwast
13005426043235121235605200020017186500
4200552500323512123561120000186694990342451400
7200563416323512123561320000183944989541431600
7300570924323512123561640000196665167837412200
130058120832351212356204000280189904954143431500
18005871483235121235622800032193604920337392400
270052001632351212356292000020423528653940
1800527512323512123563360000196135305242431600
2300538608323512123563760000188605064541421800
8000548608323512123564440000197815091741421700

根据上面的例子,字段描述为:
Procs

r:表示:这是运行队列的进程数,即实际分配给CPU的进程数。由于服务器配置了8核CPU,所以这个值超过了这个数字。CPU较少和ID较小会导致CPU瓶颈。如果运行队列过大,说明CPU占用率很高。

b:等待io的进程数。

内存

swpd:虚拟内存使用量;单位KB

free:空闲内存

buff:用作缓冲区的内存大小,部分内存,不能通过交换移动的程序代码缓存。

cache:用作缓存、数据缓存、要移交给允许交换的交换的内存大小

si:每从磁盘到内存、磁盘到虚拟内存交换的交换页数第二如果Size(本例中)值读取的页数大于0,则表示物理内存不足或存在内存泄漏。

所以:交换的交换页数每秒从内存到磁盘写入磁盘的虚拟内存大小。如果该值大于0,则表示物理内存不足或存在内存泄漏。

bi:Blocksreceivedfromablockdevice(blocks/s)。。每秒从块设备接收的块数。读取块设备。

bo:块发送到块设备(块/秒)。每秒传输到块设备的块数,即写入块设备的块数。

System

in:每秒中断次数,包括时钟中断。

cs:每秒上下文切换次数:值越小越好。例如,每当您调用系统函数并切换线程时,您的代码都会进入内核空间并发生上下文切换。如果这种情况发生得太频繁,则大部分CPU将浪费在上下文切换上,从而使CPU完全未得到充分利用。

CPU(以百分比表示)

us:用户进程执行时间,用户CPU占用率、运算计算等

sy:系统进程执行时间、系统CPU使用率、硬盘读取、硬件活动等

id:空闲时间(包括IO延迟)

wa:IO延迟


二、我linux释放物理内存但不释放虚拟内存1、释放内存前使用sync命令进行同步,保证文件系统的完整性。将所有未写入的系统缓冲区(包括修改的映射文件)写入磁盘。否则,未保存的文件将在缓存释放过程中丢失。
2。通过编辑proc系统dropcaches清除可用缓存。
3。释放内存后,恢复,让系统重新自动分配内存。