windows上有各种软件可以进行“一键加速”之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习)。而任务管理器也可以很方便地查看各进程使用的内存情况,如下图:
同样地,linux下也有一些方法来查看内存的使用情况。
一、free
对于free命令,可以加上-m参数,使其显示单位为Mb。如下:
[ccx@ubuntu ~]$>free total used free shared buffers cached Mem: 1008504 547364 461140 12836 53984 254508 -/+ buffers/cache: 238872 769632 Swap: 1046524 0 1046524
[ccx@ubuntu ~]$>free -m total used free shared buffers cached Mem: 984 534 450 12 52 248 -/+ buffers/cache: 233 751 Swap: 1021 0 1021
这里出现了一些名词,有些是我不知道的,我专门去查了一下它们所代表的含义。
total | used | free | shared | buffers | cached | |
Mem | 表示物理 内存总量 |
表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用 |
未被分配的内存 | 共享内存 | 系统分配但未被使用的buffers 数量 | 系统分配但未被使用的cache 数量 |
实际使用的buffers 与cache 总量,也是实际使用的内存总量 | 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存 | |||||
Swap |
同样是做为缓存,buffers和cache又有啥区别呢?
于是又查了些资料,发现buffers实际应该是叫“缓冲”,其英文解释是:A buffer is something that has yet to be "written" to disk.
就是说,buffers是将要写入硬盘中的数据缓存。
而cache的英文解释:A cache is something that has been "read" from the disk and stored for later use.
就是说,cache是从硬盘或者存储设备读进计算机后缓存在内存中的数据。
想起看《计算机组成原理》的时候,有看到因特尔的cpu与内存之间有cache,这之间好像有什么区别的样子。
继续查资料,发现了page cache 和 buffer cache。简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
对于cache和buffer,cached是cpu与内存间的,buffer是内存与磁盘间的,都是为了解决速度不对等的问题。
在free中,buffer 是buffer cache的内存,是块设备的读写缓冲区;cache是page cache的内存, 文件系统的cache。
关于buffer与chche,这里就不多说了,最后的链接5里讲得挺清楚了。
这里还有一个名词,Swap,即虚拟内存。当物理内存不够用的时候,就要释放掉一部分空间,以供当前运行程序使用。这些被释放掉的内存的数据就被临时保存在虚拟内存中。但是,并非所有的数据都全被保存,只有那些使用malloc或new生成的对象,他们在文件中并没有相应的“储备”文件,被称为匿名内存数据,需要临时地存进Swap。故Swap又称匿名数据交换空间。在链接3中有其说明。
至于shared,暂时没查到与之相关的资料,只是在某链接里提了一下其不常用。
学习时参考的链接:
1、http://www.splaybow.com/post/linuxmemusage.html
2、http://ludihua.blog.51cto.com/4601284/1569816
3、http://www.cnblogs.com/my_life/articles/4629555.html
4、http://www.jb51.net/LINUXjishu/10945.html
5、http://www.cnblogs.com/chenpingzhao/p/5161844.html
二、top命令
top命令就好像是“linux下的任务管理器”:
其中,第一行的内容与uptime命令的结果是一样的
[ccx@ubuntu ~]$>uptime 10:05:01 up 34 min, 1 user, load average: 0.00, 0.11, 0.16
第二行的名词也比较好理解,就是进程总数与处于R、S、T、Z状态下的进程数:
Tasks | total | running | sleeping | stopped | zombie |
总数 | 执行 | 等待(睡眠) | 暂停 | 僵尸 | |
181 | 2 | 179 | 0 | 0 |
第三行就是CPU的使用情况了,如下:
%Cpu(s) | |
us | 用户空间占用CPU百分比 |
sy | 内核空间占用CPU百分比 |
ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
id | 空闲CPU百分比 |
wa | 等待输入输出的CPU时间百分比 |
hi | CPU服务于硬件中断所耗费的时间总额 |
si | CPU服务软中断所耗费的时间总额 |
st | Steal Time |
第四、五行就是内存的使用情况了,和free命令里相似。
然后是列表的含义:
PID | 进程ID |
USER | 进程所有者 |
PR | 优先级 |
NI | nice值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量 |
RES | 进程使用的、未被换出的物理内存大小 |
SHR | 共享内存大小 |
S | 进程状态 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用CPU总时间 |
COMMAND | 命令名、命令行 |
默认情况下只显示这些比较重要的信息。在TOP界面下,按f可以修改显示的内容。这个界面我并不是很懂,就不叙述了。
学习时参考的链接:
http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=1684&fromuid=34304
http://jingyan.baidu.com/article/4d58d5412917cb9dd4e9c0ed.html
三、vmstat命令
[ccx@ubuntu ~]$>vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 76 187932 154112 372228 0 0 143 32 36 90 1 1 94 3 0
具体参数如下表:
r | The number of processes waiting for run time. | 处于运行队列中的内核线程数目(进程数)。 |
b | The number of processes in uninterruptible sleep. | 置于等待队列(等待资源、等待输入/输出)的内核线程数目。 处于block队列中不可中断的进程数 |
swpd | the amount of virtual memory used. | 可用的虚拟交换内存 |
free | the amount of idle memory. | 空闲内存 |
buff | the amount of memory used as buffers. | 已用缓冲数目 |
cache | the amount of memory used as cache. | 已用缓存数目 |
si | Amount of memory swapped in from disk (/s). | 从磁盘到内存的交换页数目 (单位/S) |
so | Amount of memory swapped to disk (/s). | 从交换内存到磁盘的交换页数目(单位/S) |
bi | Blocks received from a block device (blocks/s). | 接收到块设备的块数(块/秒) |
bo | Blocks sent to a block device (blocks/s). | 发送到块设备的块数(块/秒) |
in | The number of interrupts per second, including the clock. | 每秒中断数,包括时钟中断 |
cs | The number of context switches per second. | 每秒上下文切换数 |
us | Time spent running non-kernel code. (user time, including nice time) | 用户时间,处于用户模式的时间百分比 |
sy | Time spent running kernel code. (system time) | 系统时间,处于内核模式的时间百分比 |
id | Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time. | CPU空闲时间,空闲时间百分比 |
wa | Time spent waiting for IO. Prior to Linux 2.5.41, included in idle. | CPU 空闲时间,在此期间系统有未完成的磁盘/NFS I/O 请求 |
wt | Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown. | 来自于虚拟机偷取的CPU所占的百分比(这个不会翻译...) |
学习时参考的链接:
http://blog.csdn.net/zhuying_linux/article/details/7336869
http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html