您的位置:首页 > 数码常识数码常识

linux占用内存(linux内存占用情况)

2025-05-10人已围观

linux占用内存(linux内存占用情况)
  一、free命令free 命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

  linux内存占用情况一、free命令

  1. free 命令语法:

  free 命令选项:

  2. free 命令实例

  v3.2.8

  v3.3.10

  下面先解释一下输出的内容:

  内容含义Mem行(第二行)是内存的使用情况Swap行(第三行)是交换空间的使用情况total总可用物理内存。一般是总物理内存除去一些预留的和操作系统本身的内存占用,是操作系统可以支配的内存大小。这个在v3.2.8和v3.3.10一样。这个值是/proc/meminfo中MemTotal的值。used列表显示已经被使用的物理内存和交换空间。在v3.2.8,这个值是(total - free)得出来的。可以说是系统已经被系统分配,但是实际并不一定正在被真正的使用,其空间是可以被回收再分配的。在v3.3.10,这个值是(total - free - cache - buffers)得出来的,是真正目前正在被使用的内存。free系统还未使用的物理内存。这个值是/proc/meminfo中MemFree的值shared共享内存的空间。这个值是/proc/meminfo中Shmem的值buff/cache列显示被 buffer 和 cache 使用的物理内存大小availablev3.3.10中的项。看起来这个值是可以使用的内存,不过(available + used) < total,也就是available < (free + cache + buffers)。而在v3.2.8中(free + cache + buffers)是一般认为的可用内存,既然在新版本中有这个available数据,应该是更准确的吧。毕竟并不是所有的未使用的内存就一定是可用的。这个值是取的/proc/meminfo中MemAvailable的值,如果meminfo中没有这个值,会依据meminfo中的Active(file),Inactive(file),MemFree,SReclaimable等值计算一个。-/+ buffers/cachev3.2.8有这一行,v3.3.10 没有。其中,used 这一项是(used - buffers - cached)的值,即(total - free - buffers - cached)的值,是真正在使用的内存的值。free 这一项是(free + buffers + cached)的值,是真正未使用的内存的值。个人觉得有 -/+ buffers/cache,这一栏看得挺习惯。。不过新版本v3.3.10的used更明确。相信有不少人和我一样,刚看到v3.2.8里面的used占了这么多内存的时候,有点摸不着头脑。

  内核学习网站:

  Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

  二、vmstat 指令

  vmstat命令是最常见的Linux/Unix监控工具,用于查看系统的内存存储信息,是一个报告虚拟内存统计信息的小工具,属于sysstat包。

  vmstat 命令报告包括:进程、内存、分页、阻塞 IO、中断、磁盘、CPU。

  可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

  这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

  1. 命令格式:

  2. 举例

  一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

  2表示每隔两秒采集一次服务器状态,1表示只采集一次。

  实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

  这表示vmstat每2秒采集数据,按下ctrl + c结束程序,这里采集了3次数据我就结束了程序。

  类别项目含义说明Procs**(进程)**r等待执行的任务数展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。B等待IO的进程数量Memory(内存)swpd正在使用虚拟的内存大小,单位kfree空闲内存大小buff已用的buff大小,对这块设备的读写进行缓冲cache已用的cache大小,文件系统的cacheinact非活跃内存大小,即被标明可回收的内存,区别于free和active具体含义见:概念补充(当使用-a选项时显示)active活跃的内存大小具体含义见:概念补充(当使用-a选项时显示)Swapsi每秒从交换区写入内存的大小(单位:kb/s)so每秒从内存写到交换区的大小IObi每秒读取的块数(读磁盘)块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytesbo每秒写入的块数(写磁盘)块设备每秒发送的块数量,单位是blocksystemin每秒中断数,包括时钟中断这两个值越大,会看到由内核消耗的cpu时间sy会越多 秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目cs每秒上下文切换数CPU**(以百分比表示)**us用户进程执行消耗cpu时间(user time)us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了sy系统进程消耗cpu时间(system time)sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足Id空闲时间(包括IO等待时间)一般来说 us+sy+id=100wa等待IO时间wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。3. 常见问题处理

  常见问题及解决方法

  如果r经常大于4,且id经常少于40,表示cpu的负荷很重。如果pi,po长期不等于0,表示内存不足。如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。1.如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。2.如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。3.如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。

  当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象.

  4. 内存问题现象:

  内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.

  解决办法:

  1.调节applications & servers使得对内存和cache的使用更加有效.2.增加系统的内存.3.Implement priority paging in s in pre solaris 8 versions by adding line "set priority paging=1" in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.

  关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.

  一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。

  r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。

  这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。

  top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

  5. 常见性能问题分析

  IO/CPU/men连锁反应

  内存不足

  io瓶颈

  CPU瓶颈:load,vmstat中r列

  三、/proc/meminfo

  用途:用于从/proc文件系统中提取与内存相关的信息。这些文件包含有 系统和内核的内部信息。其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观。

  1. 查看方法:

  2. 实例及信息解释

  注意这个文件显示的单位是kB而不是KB,1kB=1000B,但是实际上应该是KB,1KB=1024B还可以使用命令 less /proc/meminfo 直接读取该文件。通过使用 less 命令,可以在长长的输出中向上和向下滚动,找到你需要的内容。

  从中我们可以很清晰明了的看出内存中的各种指标情况,例如 MemFree的空闲内存和SwapFree中的交换内存。

  3. 代码实例

  负责输出/proc/meminfo的源代码是:

  四、top 指令

  用途:用于打印系统中的CPU和内存使用情况。输出结果中,可以很清晰的看出已用和可用内存的资源情况。top 最好的地方之一就是发现可能已经失控的服务的进程 ID 号(PID)。有了这些 PID,你可以对有问题的任务进行故障排除(或 kill)。

  语法

  参数说明:

  举例

  第一行,任务队列信息,同 uptime 命令的执行结果

  系统时间:02:19:10运行时间:up 2:26 min,当前登录用户:1 user负载均衡(uptime) load average: 0.00, 0.06, 0.07average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

  第二行,Tasks — 任务(进程)

  总进程:229 total, 运行:1 running, 休眠:163 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

  第三行,cpu状态信息

  0.7%us【user space】— 用户空间占用CPU的百分比。1.0%sy【sysctl】— 内核空间占用CPU的百分比。0.0%ni【】— 改变过优先级的进程占用CPU的百分比97.9%id【idolt】— 空闲CPU百分比0.3%wa【wait】— IO等待占用CPU的百分比0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比0.0%si【Software Interrupts】— 软中断占用CPU的百分比

  第四行,内存状态

  2017504 total, 653616 free, 1154200 used, 209688 buff/cache【缓存的内存量】

  第五行,swap交换分区信息

  998396 total, 771068 free, 227328 used. 635608 avail Mem

  第七行以下:各进程(任务)的状态监控

  PID — 进程idUSER — 进程所有者PR — 进程优先级NI — nice值。负值表示高优先级,正值表示低优先级VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATASHR — 共享内存大小,单位kbS —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程%CPU — 上次更新到现在的CPU时间占用百分比%MEM — 进程使用的物理内存百分比TIME+ — 进程使用的CPU时间总计,单位1/100秒COMMAND — 进程名称(命令名/命令行)

  常用实例显示进程信息

  显示完整命令

  以批处理模式显示程序信息

  以累积模式显示程序信息

  设置信息更新次数

  //表示更新两次后终止更新显示

  设置信息更新时间

  //表示更新周期为3秒

  显示指定的进程信息

  //显示进程号为139的进程信息,CPU、内存占用率等

  显示更新十次后退出

  五、htop 指令

  htop 它类似于 top 命令,但可以让你在垂直和水平方向上滚动,所以你可以看到系统上运行的所有进程,以及他们完整的命令行。

  可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing)。

  htop快照:

  可以使用快捷键

  第1行-第4行:显示CPU当前的运行负载,有几核就有几行,我的是1核

  **Mem:显示内存的使用情况,3887M大概是3.8G,此时的Mem不包含buffers和cached的内存,所以和free -m会不同Swp:**显示交换空间的使用情况,交换空间是当内存不够和其中有一些长期不用的数据时,ubuntu会把这些暂时放到交换空间中

  其他信息可以参考top命令说明。

  PS:如果你终端没安装 htop,先通过指令来安装。sudo apt-get updatesudo apt install htop

  六、查看制定进程的内存

  通过/proc/procid/status查看进程内存

  总结:

  确定内存使用情况是Linux运维工程师必要的技能,尤其是某个应用程序变得异常和占用系统内存时。当发生这种情况时,知道有多种工具可以帮助你进行故障排除十分方便的。

  上面就是小居数码小编今天给大家介绍的关于(linux内存占用情况)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。

  94%的朋友还想知道的:

  ps软件总是说内存教你一招解决(ps软件内存不足怎么回事)

  微信清理内存的正确方法(微信老是占内存怎么办)

  什么情况下用round函数(round函数的作用)

  ps内存不足无法保存怎么办(ps存储不足怎么办)



  153966
 

很赞哦! ()

随机图文