`
zhaoshijie
  • 浏览: 2242266 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

教你认识Linux内存管理方式,分析Swap被程序占用情况

 
阅读更多
关键字:教你认识Linux内存管理方式,分析Swap被程序占用情况

一、先了解一下linux对内存的管理方式:
在Linux里(别的系统也差不多),内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。很多人会把虚拟内存和Swap混为一谈,实际上Swap只是虚拟内存引申出的一种技术而已:操作系统一旦物理内存不足,为了腾出内存空间存放新内容,就会把当前物理内存中的内容放到交换分区里,稍后用到的时候再取回来,需要注意的是,Swap的使用可能会带来性能问题,偶尔为之无需紧张,糟糕的是物理内存和交换分区频繁的发生数据交换,这被称之为Swap颠簸,一旦发生这种情况,先要明确是什么原因造成的,如果是内存不足就好办了,加内存就可以解决,不过有的时候即使内存充足也可能会出现这种问题,比如MySQL就有可能出现这样的情况,解决方法是限制使用Swap:

shell> sysctl -w vm.swappiness=0 查看内存情况最常用的是free命令:
shell> free -m

             total       used       free     shared    buffers     cached
Mem:         32101      29377       2723          0        239      25880
-/+ buffers/cache:       3258      28842
Swap:         2047          0       2047

新手看到used一栏数值偏大,free一栏数值偏小,往往会认为内存要用光了。其实并非如此,之所以这样是因为每当我们操作文件的时候,Linux都会尽可能的把文件缓存到内存里,这样下次访问的时候,就可以直接从内存中取结果,所以cached一栏的数值非常的大,不过不用担心,这部分内存是可回收的,操作系统会按照LRU算法淘汰冷数据。除了cached,还有一个buffers,它和cached类似,也是可回收的,不过它的侧重点在于缓解不同设备的操作速度不一致造成的阻塞,这里就不多做解释了。
知道了原理,我们就可以推算出系统可用的内存是free + buffers + cached:
shell> echo "2723 + 239 + 25880" | bc -l
28842

至于系统实际使用的内存是used –buffers –cached:

shell> echo "29377 - 239 - 25880" | bc -l

3258
除了free命令,还可以使用sar命令:
shell> sar -r

kbmemfree kbmemused  %memused kbbuffers  kbcached

  3224392  29647732     90.19    246116  26070160

  3116324  29755800     90.52    245992  26157372

  2959520  29912604     91.00    245556  26316396

  2792248  30079876     91.51    245680  26485672

  2718260  30153864     91.73    245684  26563540

shell> sar -W
pswpin/s pswpout/s

    0.00      0.00

    0.00      0.00

    0.00      0.00

    0.00      0.00

    0.00      0.00

二、简单命令方式查看swap被那些进程占用:

简单脚本递归,列出swap使用pid ,top 10
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10

查看指定进程所使用的swap命令:
awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps 

三、查看所有进程占用情况swap的脚本:

    #!/bin/bash 
    # Get current swap usage for all running processes 
    # writted by xly 
     
    function getswap { 
    SUM=0 
    OVERALL=0 
    for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do 
    PID=`echo $DIR | cut -d / -f 3` 
    PROGNAME=`ps -p $PID -o comm --no-headers` 
    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` 
    do 
    let SUM=$SUM+$SWAP 
    done 
    echo "PID=$PID - Swap used: $SUM - ($PROGNAME )" 
    let OVERALL=$OVERALL+$SUM 
    SUM=0 
     
    done 
    echo "Overall swap used: $OVERALL" 
    } 
     
    getswap 
    #getswap|egrep -v "Swap used: 0" 





分享到:
评论

相关推荐

    LINUX 查看进程占用swap

    用于查看LINUX下进程占用SWAP大小

    Linux服务器配置与管理:swap交换分区管理.pptx

    在Linux系统中,swap交换分区的作用类似于Windows系统中“虚拟内存”,当有程序被调入内存后,但是该程序又不是常被CPU所取用时,那么这些不常被使用的程序将会被放到硬盘的swap交换分区当中,而将速度较快的内存空间释放...

    linux可用内存足够为什么还用swap.docx

    linux可用内存足够为什么还用swap.docx

    Linux系统Swap交换区

    那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间 中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换...

    Linux修改Swap大小.

    Linux修改Swap大小.

    linux 扩展SWAP分区

    linux扩展linux swap分区和根目录空间不足

    关于内存swap在实际开发中的分析

    Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。Android是基于Linux的操作系统,所以也可以使用Swap分区来提升系统...

    Linux内存中Swap和Buffer Cache机制

    Linux的产生与发展,更多的应用与服务器,那么对于Linux的各个管理机制要非常清 楚,一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几方面组成。本文将为大家介绍Linux内存中Swap和Buffer ...

    Linux新建和增加swap分区

    linux系统中新建和增加swap分区的方法,用于swap分区不足时使用。

    Linux应用技术:Linux磁盘分区管理.pptx

    使用Linux命令管理文件系统;使用Linux命令管理文件系统;课堂练习1;课堂练习1;课堂练习2;课堂练习3;修改分区类型 ;课堂练习4;使用Linux命令管理文件系统;课堂练习5;使用Linux命令管理文件系统;拓展:检查分区;使用...

    Linux操作系统的内存使用机制研究

    Linux支持虚拟内存(Virtual Mmemory),虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运 行的那样...

    内存管理内存管理内存管理

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    详细解读linux下swap分区的作用

    主要介绍了详细解读linux下swap分区的作用,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Linux下的存储管理-swap分区和磁盘配额(RHEL8.0)

    文章目录一.swap分区1.swap作用2.swap分区大小建议3.swap管理二.磁盘配额1.磁盘配额作用2.磁盘配额设定方法 一.swap分区 1.swap作用 程序在运行时所有数据是在RAM。当RAM使用量超过了限额,为了使系统更加稳定,我们...

    Linux 内核中Demand paging 与swap 机制的源码分析

    Linux 内核中Demand paging 与swap 机制的源码分析

    Linux下增加Swap

    Linux下增加Swap

    Linuxswap扩展

    Linux 操作系统 ,下如何扩展操作系统的虚拟内存空间。

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    Linux之如何在系统使用过程中配置SWAP分区

    Linux之如何在系统使用过程中配置SWAP分区

    centos7配置swap交换内存空间

    centos7配置swap交换内存空间 centos7配置swap交换内存空间 centos7配置swap交换内存空间

Global site tag (gtag.js) - Google Analytics