lunixlinux mem swapp和mem是什么意思

2013年4月 Linux/Unix社区大版内专家分月排行榜第三2012年12月 Linux/Unix社区大版内专家分月排行榜第三
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。玩转 Linux 之:磁盘分区、挂载知多少?
我的图书馆
玩转 Linux 之:磁盘分区、挂载知多少?
上周在做日志机扩容的时候,发现运维同学将一块硬盘的挂载点没有同以前的日志机保持一致,考虑到这会给日后的维护带来麻烦,于是尝试着手修改,在修改的同时,review 了下之前日志机的挂载配置,发现居然存在随时掉坑的可能。。。至于什么坑,我会在文末说明。
so,感觉这事儿虽然简单,也许一条命令就搞定的事情,但是,很多童鞋可能不明就里,纯复制粘贴网上的命令,这很容易给人挖坑埋雷,今天就来聊聊 linux 下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普吧~
1、Linux 分区简介
1.1 主分区 vs 扩展分区
硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extended partition),主分区可以马上被使用但不能再分区,扩展分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩展分区再分下去的是什么呢?它就是逻辑分区(Logical Partion),逻辑分区没有数量上限制。&
1.2 驱动器标示的含义
对习惯于使用Dos或Windows的同学来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。然而对Red Hat Linux新手来说,可就有点恼人了。因为对Linux用户来说无论有几个分区,都得分给目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。Red Hat Linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区就在linux的存储空间的某个目录下获得。 下面我们先来看看Red Hat Linux的驱动器是如何标识的。 对于IDE硬盘,驱动器标识符为“hdx1”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“1”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。对于SCSI硬盘则标识为“sdx1”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样,不再赘述。 我们从上面可以看到,Red Hat Linux的分区是不同于其它操作系统分区的,它的分区格式常用的有Ext3和Swap两种,Ext3用于存放系统文件,Swap则作为Red Hat Linux的交换分区(相当于windows中的虚拟内存文件)。那么现在我们就可以知道Red Hat Linux至少需要两个专门的分区(Linux Native(本地)和Linux Swap(交换))。由于不能将Red Hat Linux安装在Dos/Windows分区。一般来说我们将Red Hat Linux安装一个或多个类型为“Linux Native”的硬盘分区,但是在Red Hat Linux的每一个分区都必须要指定一个“Mount Point”(挂载点),告诉Red Hat Linux在启动时,这个目录要给哪个分区使用。对“Swap”分区来说, 一般也定义一个,且它不必要定义载入点。 下面我们先对“Linux Native”和“Linux Swap”有个初步的了解。
SWAP分区是LINUX暂时存储数据的交换分区,它主要是把主内存上暂时不用得数据存起来,在需要的时候再调进内存内,且作为SWAP使用的分区不用指定“Mout Point”(载入点),既然它作为交换分区,我们理所当然应给它指定大小,它至少要等于系统上实际内存的量,一般来说它的大小是内存的一至两倍。另外你也可以创建和使用一个以上的交换分区,最多16个。
Linux Native是存放系统文件的地方,一般用EXT3的分区类型,对Red Hat Linux来说,有了较大的选择余地,可以把系统文件分几个区来装(必须要说明挂载点),也可以就装在同一个分区中(挂载点是“/”)。
1.3&为什么要自定义多个分区?
分多个区有以下几个目的:
在不损失数据的情况下重装系统,比如独立设置/home挂载点,重装系统的时候直接标记回/home,数据不会有任何损失。
针对不同挂载点的特性分配合适的文件系统以合理发挥性能,比如对/var使用reiserfs,对/home使用xfs,对/使用ext4。
针对不同的挂载点开启不同的挂载选项,如是否需要即时同步,是否开启日志,是否启用压缩。
大硬盘搜索范围大,效率低
磁盘配额只能对分区做设定
/home、/var、/usr/local 经常是单独分区,因为经常会操作,容易产生碎片
2、挂载点目录简介
2.1 常见的挂载目录结构
每块硬盘都分为若干个分区,每个分区都有自己的文件系统。Windows为这些文件系统各自指定了一个字母。不过 GNU/Linux 使用唯一的树形结构来管理文件,而每个文件系统都挂载于树形结构的某个位置。 正如 Windows 需要有 C: 驱动器一样,GNU/Linux 必须能够将根文件系统挂载于文件树的根(/)上。当根挂载完成之后,您就可以将其它文件系统挂载于树形结构各种挂载点上。根结构下的任何目录都可以作为挂载点,而您也可以将同一文件系统同时挂载于不同的挂载点上。 挂载点实际上就是linux中的磁盘文件系统的入口目录
2.2 常见的挂载目录说明
目录 & &内容&
/   根目录,存放系统命令和用户数据等(如果下面挂载点没有单独的分区,它们都将在根目录的分区中) & /boot & &boot loader 的静态链接文件,存放与Linux启动相关的程序 /home & &用户目录,存放普通用户的数据 /tmp & &临时文件 /usr & &是Red Hat Linux系统存放软件的地方,如有可能应将最大空间分给它 /usr/local 自已安装程序安装在此 /var & &不断变化的数据,服务器的一些服务、日志放在下面。 /opt & &(Option可选的)附加的应用程序软件包&
/bin & &基本命令执行文件& /dev & &设备文件& /etc & &主机特定的系统配置& /lib & &基本共享库以及内核模块& /media & &用于移动介质的挂载点& /mnt & &用于临时挂载文件系统或者别的硬件设备(如光驱、软驱)& /proc & &系统信息的虚拟目录(2.4 和 2.6 内核),这些信息是在内存中,由系统自己产生的。& /root & &root 用户的目录& /sbin & &基本系统命令执行文件& /sys & &系统信息的虚拟目录(2.6 内核)& /srv & &系统提供的用于 service 的数据 /usr/X1186 & & & & X-Windows目录,存放一些X-Windows的配置文件 /usr/include & & &系统头文件,存储一些C语言的头文件 /usr/src & & & & & Linux内核源代码,Linux系统所安装的内核源代码都保存在此 /usr/bin & & & & &对/bin目录的一些补充 /usr/sbin & & & &对/sbin目录的一些补充 /lost+found 这个目录在大多数情况下都是空的。但是如果你正在工作突然停电,或是没有用正常方式关机,在你重新启动机器的时候,有些文件就会找不到应该存放的地方,对于这些文件,系统将他们放在这个目录下。 /boot: 必须总是物理地包含 /etc、/bin、/sbin、/lib 和 /dev,否则您将不能启动系统。 /home:每个用户将放置他的私有数据到这个目录的子目录下。 /tmp: 程序创建的临时数据大都存到这个目录。 /usr:包含所有的用户程序(/usr/bin),库文件(/usr/lib),文档(/usr/share/doc),等等。 /var:所有的可变数据,如新闻组文章、电子邮件、网站、数据库、软件包系统的缓存等等,将被放入这个目录。这个目录的大小取决于您计算机的用途,但是对大多数人来说,将主要用于软件包系统的管理工具。如果做服务器的话空间应尽量大。我的服务器的实际分法及实际使用的大小,还没有实际投入使用。所以/var目录没有用那么多。一般WEB存放网页的目录是/var/www,postfix邮件的存放邮件的目录是:/var/mail,var/log,是系统日志记录分区, /var/spool:存放一些邮件、新闻、打印队列等。 /opt:存放可选的安装的软件。
上面介绍了几个挂载点,一般来说我们最少需要两个分区(当然只要一个 / 分区也可以),需要一个SWAP分区,和一个“/”分区,但把一些常用、重要的挂载点分到其它分区,这样便于管理。一般一个/分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这没有什么规定,完全是依照需要来定的。我们可以使用Red Hat Linux提供的硬盘管理工具Disk Druid来完成分区和挂载点设置。
对照上图和目录简介,可以把Linux系统的挂载点想象成一棵大树 / 为大树的树根 / 衍生的其他挂载点为这颗大树的树枝 挂载点下的文件为树叶
2.3 为什么 linux 的分区需要有挂载这个动作呢?
如果你看过我之前写的 Linux 系列文章,那么应该记得我曾经标红过一句话:linux 下一切皆文件!换言之就是linux操作系统将系统中的一切都作为文件来管理。在windows中我们常见的硬件设备(打印机、网卡、声卡...)、磁盘分区等,在linux中统统都被视作文件,对设备、分区的访问就是读写对应的文件。
3、实战分区挂载
3.1 临时挂载
举个栗子,原来分区情况如下:
[root@sg-sl-data]# df -h
Filesystem
Used Avail Use% Mounted on
0% /dev/shm
3.1.1 先卸载分区:
umount /disk1 umount /data
3.1.2 再重新挂起来:
mount /dev/sda5 /data mount /dev/sda6 /disk1 注意:如前所述,不能2个分区同时挂载到/data
3.2 永久挂载:开机自动挂载
上面步骤中的方法只是临时工干的活儿,开机后磁盘分区会不可见或者还是挂载之前的模样,要想永久生效,还需要修改/etc/fstab,将
LABEL=/data & & & & & & /data & & & & & & & & & ext3 & &defaults & & & &1 2 LABEL=/disk1 & & & & & &/disk1 & & & & & & & & &ext3 & &defaults & & & &1 2 修改为: /dev/sda5 & & & & & & /data & & & & & & & & & ext3 & &defaults & & & &1 2 /dev/sda6 & & & & & &/disk1 & & & & & & & & &ext3 & &defaults & & & &1 2
说明:fstab 是文件系统分配表的配置文件,该文件有着严格的语法格式限制,类似 crontab 一样,保存时也会对你的输入格式进行校验,请慎重使用,否则会有意想不到的问题发生。其一共有 6 个字段,空格分隔,具体每个字段的含义请参考这里,不再赘述:
3.3 以下是添加硬盘&分区&挂载(高危操作,新手慎用!)
友情提示:分区操作是高危操作,尤其是新手同学请勿在生产环境随意尝试,否则后果自负!&
更为详细的分区教程请参见:
linux磁盘分区fdisk命令详解 &
fdisk /dev/sdb
输入m---n---p---1--回车---回车---p---w
mkfs.ext3 /dev/sdb1
mkdir /disk2
mount /dev/sdb1 /disk2/
在/etc/fstab中添加:
4、通过 fstab 设置开机挂载的坑
fstab 文件大家都很熟悉,Linux 在启动的时候通过 fstab 中的信息挂载各个分区,一个典型的分区条目就像这样:
/dev/sdb4 /mnt/usb vfat utf8,umask=0 0 0
/dev/sda4 为需要挂载的分区,sda4 是 Linux 检测硬盘时按顺序给分区的命名,一般来讲,这个名称并不会变化,但是如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。
因此上面 3.2 小节中的配置直接写&/dev/sda6 是有很大的隐患的,重启后硬盘的顺序可能发生变化,比如 你把 nginx 的用户日志放在一个单独的分区上,那么重启后虽然设置了 fstab,但是由于顺序变了相同的分区号可能代表不同的硬盘分区了,这样就会导致某些分区上的数据服务不可用了。
(PS:文章开头说过在 review 以前同学的挂载配置的时候发现了埋下的一个雷,正是上面的问题。)
这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。
在 fstab 中用 UUID 挂载分区,看起来向这样: UUID= /mnt/usb vfat utf8,umask=0 0 0 在 UUID= 后面填入分区相应的 UUID 值,就可以正确挂载分区了。 那么,我们如何知道一个分区的 UUID 呢? 有 3 种方法:
4.1 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息
# ls -l /dev/disk/by-uuid/ ------ lrwxrwxrwx 1 root root 10 10-13 09:14 B -& ../../sdb5 lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-b-b5a8a0a93645 -& ../../sda4 .....&
4.2 通过 vol_id 命令
# vol_id /dev/sdb5 ID_FS_USAGE=filesystem ID_FS_TYPE=vfat ID_FS_VERSION=FAT32 ID_FS_UUID=B ID_FS_UUID_ENC=B ID_FS_LABEL=SWAP ID_FS_LABEL_ENC=SWAP ID_FS_LABEL_SAFE=SWAP
4.3 通过 blkid 命令
# blkid /dev/sdb5 /dev/sdb5: LABEL="SWAP" UUID="B" TYPE="vfat" 通过这三种方法都可以获得分区的 UUID,UUID 依据分区不同,长度和格式都不相同。
比如我最后把&/dev/sdb 挂载在了&/data1 目录下(不放心的话重启或者生成文件测试下,看挂载分区的空间被占用没):
可用 已用% 挂载点
0% /dev/shm
grep -v '#' /etc/fstab |column -t
UUID=0c685e8b-dbb3-4a1c-a106-3f1716ab34dd
defaults,noatime
UUID=2d7f1bcf-06d1-486e-87df-404ba670fcd9
defaults,noatime
UUID=248e7a99-b459-4800-bbd3-354047e49a2f
defaults,noatime
defaults,nosuid,noexec,nodev
gid=5,mode=620
UUID=870ebaf6-727f-48d3-b60c-fac
defaults,noatime
挂载点必须是一个目录。
一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样,卸载后,目录以前的文件都还在,不会有任何丢失。
目录只占磁盘里的一个inode,存放文件属性等信息。
任何一个分区都必须挂载到某个目录上。
目录是逻辑上的区分。分区是物理上的区分。
磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
一个分区可以挂在多个目录,但反过来一个目录只能是一个分区的挂载点。
[1]&Linux入门笔记之一:系统分区及挂载点 &
[2]&挂载点 &
[3]&什么叫“挂载”,“挂载点”?linux文件系统中的概念 &
[4]&Linux文件系统简介 &
[5]&第八章、Linux 磁盘与文件系统管理 &
[6]&/etc/fstab 详解 && & & & &
[7]&如何在CentOS下使用fdisk添加新硬盘 &
[8] 多硬盘分区管理fdisk &
TA的最新馆藏
喜欢该文的人也喜欢声明:现大部分文章为寻找问题时在网上相互转载,在此博客中做个记录,方便自己也方便有类似问题的朋友,故原出处已不好查到,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。
业务思维、结果导向、成本意识
随笔- 467&
&&&&&&&&&&&
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
  可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:  $ top -u oracle
内容解释:
  PID:进程的ID  USER:进程所有者  PR:进程的优先级别,越小越优先被执行  NInice:值  VIRT:进程占用的虚拟内存  RES:进程占用的物理内存  SHR:进程使用的共享内存  S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数  %CPU:进程占用CPU的使用率  %MEM:进程使用的物理内存和总内存的百分比  TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。  COMMAND:进程启动命令名称
  操作实例:
  在命令行中输入 &top&
  即可启动 top
  top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。
  第一部分 -- 最上部的 系统信息栏 :
  第一行(top):
    &00:11:04&为系统当前时刻;
    &3:35&为系统启动后到现在的运作时间;
    &2 users&为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
    &load average&为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;
  第二行(Tasks):
    &59 total&为当前系统进程总数;
    &1 running&为当前运行中的进程数;
    &58 sleeping&为当前处于等待状态中的进程数;
    &0 stoped&为被停止的系统进程数;
    &0 zombie&为被复原的进程数;
  第三行(Cpus):
    分别表示了 CPU 当前的使用率;
  第四行(Mem):
    分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;
  第五行(Swap):
    表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
  第二部分 -- 中间部分的内部命令提示栏:
  top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:
  - 改变画面更新频率
  l - 关闭或开启第一部分第一行 top 信息的表示
  t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
  m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
  N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)
  P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)
  M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)
  h - 显示帮助
  n - 设置在进程列表所显示进程的数量
  q - 退出 top
  改变画面更新周期
  第三部分 -- 最下部分的进程列表栏:
  以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式
可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:  $ pmap -d 5647
  如下例所示:  $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'& 其中rsz是是实际内存  $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle |& sort -nrk
  其中rsz为实际内存,上例实现按内存排序,由大到小
在Linux下查看内存我们一般用free命令:[root@scs-2 tmp]# free&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&& 3266180&&& 3250004&&&&& 16176&&&&&&&&& 0&&&& 110652&&& 2668236-/+ buffers/cache:&&&& 471116&&& 2795064Swap:&&&&& 2048276&&&&& 80160&&& 1968116
下面是对这些数值的解释:total:总计物理内存的大小。used:已使用多大。free:可用有多少。Shared:多个进程共享的内存总额。Buffers/cached:磁盘缓存的大小。第三行(-/+ buffers/cached):used:已使用多大。free:可用有多少。第四行就不多解释了。区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。如上例:76+8236
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。如何看额定值:cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfoMemTotal:&&&&& 3266180 kBMemFree:&&&&&&&& 17456 kBBuffers:&&&&&&& 111328 kBCached:&&&&&&& 2664024 kBSwapCached:&&&&&&&&& 0 kBActive:&&&&&&&& 467236 kBInactive:&&&&& 2644928 kBHighTotal:&&&&&&&&&& 0 kBHighFree:&&&&&&&&&&& 0 kBLowTotal:&&&&& 3266180 kBLowFree:&&&&&&&& 17456 kBSwapTotal:&&&& 2048276 kBSwapFree:&&&&& 1968116 kBDirty:&&&&&&&&&&&&&& 8 kBWriteback:&&&&&&&&&& 0 kBMapped:&&&&&&&& 345360 kBSlab:&&&&&&&&&& 112344 kBCommitted_AS:&& 535292 kBPageTables:&&&&&& 2340 kBVmallocTotal:
kBVmallocUsed:&&& 272696 kBVmallocChunk:
kBHugePages_Total:&&&& 0HugePages_Free:&&&&& 0Hugepagesize:&&&& 2048 kB
用free -m查看的结果:[root@scs-2 tmp]# free -m &&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&&&&& 3189&&&&&& 3173&&&&&&&& 16&&&&&&&&& 0&&&&&&& 107&&&&&& 2605-/+ buffers/cache:&&&&&&& 460&&&&&& 2729Swap:&&&&&&&& 2000&&&&&&&& 78&&&&&& 1921
查看/proc/kcore文件的大小(内存镜像):[root@scs-2 tmp]# ll -h /proc/kcore -r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
占用内存的测量
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 04
查看机器可用内存
/proc/28248/&free
total used free shared buffers cached
Mem: 400 668 503688
-/+ buffers/cache: 744
Swap: 08 1870312
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used
top命令 是Linux下常用的性能 分析工具 ,能够实时显示系统 中各个进程的资源占用状况,类似于Windows的任务管理 器。下面详细介绍它的使用方法。
top - 02:53:32 up 16 days,& 6:34, 17 users,& load average: 0.24, 0.21, 0.24Tasks: 481 total,&& 3 running, 474 sleeping,&& 0 stopped,&& 4 zombieCpu(s): 10.3%us,& 1.8%sy,& 0.0%ni, 86.6%id,& 0.5%wa,& 0.2%hi,& 0.6%si,& 0.0%stMem:&& 4042764k total,& 4001096k used,&&& 41668k free,&& 383536k buffersSwap:& 2104472k total,&&&& 7900k used,& 2096572k free,& 1557040k cached
& PID USER&&&&& PR& NI& VIRT& RES& SHR S %CPU %MEM&&& TIME+& COMMAND32497 jacky&&&& 20&& 0& 669m 222m& 31m R&& 10& 5.6&&&&&& 29:27.62 firefox&4788 yiuwing&& 20&& 0& 257m& 18m& 13m S&&& 5& 0.5&&&&&&&&& 5:42.44 konsole&5657 Liuxiaof& 20&& 0& 585m 159m& 30m S&&& 4& 4.0&&&&&&&&& 5:25.06 firefox&4455 xiefc&&&&& 20&& 0& 542m& 124m& 30m R&&& 4& 3.1&&&&&&&& 7:23.03 firefox&6188 Liuxiaof& 20&& 0& 191m&& 17m& 13m S&&& 4& 0.5&&&&&&&&& 0:01.16 konsole&
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime& 命令的执行结果。其内容如下:
01:06:48& 当前时间& up 1:22& 系统运行 时间,格式为时:分& 1 user& 当前登录用户 数& load average: 0.06, 0.60, 0.48& 系统负载 ,即任务队列的平均长度。&&&&&&&&&&& 三个数值分别为& 1分钟、5分钟、15分钟前到现在的平均值。&
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total& 进程总数& 1 running& 正在运行的进程数& 28 sleeping& 睡眠的进程数& 0 stopped& 停止的进程数& 0 zombie& 僵尸进程数& Cpu(s): 0.3% us& 用户空间占用CPU百分比& 1.0% sy& 内核 空间占用CPU百分比& 0.0% ni& 用户进程空间内改变过优先级的进程占用CPU百分比& 98.7% id& 空闲CPU百分比& 0.0% wa& 等待输入输出的CPU时间百分比& 0.0% hi&&&& 0.0% si&&&&
最后两行为内存 信息。内容如下:
Mem: 191272k total& 物理内存总量& 173656k used& 使用的物理内存总量& 17616k free& 空闲内存总量& 22052k buffers& 用作内核缓存 的内存量& Swap: 192772k total& 交换区总量& 0k used& 使用的交换区总量& 192772k free& 空闲交换区总量& 123988k cached& 缓冲的交换区总量。&&&&&&&&&&& 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,&&&&&&&&&&& 该数值即为这些内容已存在于内存中 的交换区的大小。&&&&&&&&&&& 相应的内存再次被换出时可不必再对交换区写入。&
进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号& 列名& 含义& a& PID& 进程id& b& PPID& 父进程id& c& RUSER& Real user name& d& UID& 进程所有者的用户id& e& USER& 进程所有者的用户名& f& GROUP& 进程所有者的组名& g& TTY& 启动进程的终端名。不是从终端启动的进程则显示为 ?& h& PR& 优先级& i& NI& nice值。负值表示高优先级,正值表示低优先级& j& P& 最后使用的CPU,仅在多CPU环境 下有意义& k& %CPU& 上次更新到现在的CPU时间占用百分比& l& TIME& 进程使用的CPU时间总计,单位秒& m& TIME+& 进程使用的CPU时间总计,单位1/100秒& n& %MEM& 进程使用的物理内存 百分比& o& VIRT& 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES& p& SWAP& 进程使用的虚拟内存中,被换出的大小,单位kb。& q& RES& 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA& r& CODE& 可执行代码占用的物理 内存大小,单位kb& s& DATA& 可执行代码以外的部分(数据 段+栈)占用的物理 内存大小,单位kb& t& SHR& 共享内存大小,单位kb& u& nFLT& 页面错误次数& v& nDRT& 最后一次写入到现在,被修改过的页面数。& w& S& 进程状态。&&&&&&&&&&& D =不可中断的睡眠状态&&&&&&&&&&& R =运行&&&&&&&&&&& S =睡眠&&&&&&&&&&& T =跟踪/停止&&&&&&&&&&& Z =僵尸进程& x& COMMAND& 命令名/命令行& y& WCHAN& 若该进程在睡眠,则显示睡眠中的系统函数名& z& Flags& 任务标志,参考 sched.h&
默认情况下仅显示比较重要的& PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND& 列。可以通过下面的快捷键来更改显示内容。更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z& 即可显示或隐藏对应的列,最后按回车键确定。按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z& 可以将相应的列向左移动。最后按回车键确定。按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的& R 键可以将当前的排序倒转。
==============================
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。<空格>:立刻刷新。P:根据CPU使用大小进行排序。T:根据时间、累计时间排序。q:退出top命令。m:切换显示内存信息。t:切换显示进程和CPU状态信息。c:切换显示命令名称和完整命令行。M:根据使用内存大小进行排序。W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。
&应用实例 使用top命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按&U&键,然后输入用户名,系统就会切换为指定用户的进程运行界面。a.作用free命令用来显示内存的使用情况,使用权限是所有用户。b.格式free [-b -k -m] [-o] [-s delay] [-t] [-V]c.主要参数-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。-s delay:显示每隔多少秒数来显示一次内存使用情况。-t:显示内存总和列。-o:不显示缓冲区调节列。d.应用实例free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。#free -b -s5使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
阅读(...) 评论()
声明:现大部分文章为寻找问题时在网上相互转载,在此博客中做个记录,方便自己也方便有类似问题的朋友,故原出处已不好查到,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。}

我要回帖

更多关于 swap是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信