top
1.作用
top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
2.格式
top [-] [d delay] [q] [c] [S] [s] [i] [n NUM]
3.主要参数
d:指定每两次屏幕信息刷新之间的时间间隔。(当然用户可以使用s交互命令来改变之)
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子进程的CPU时间累积起来。
s:安全模式。(这将去除交互命令所带来的潜在危险。)
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出top。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况, 类似于Windows的任务管理器。下面详细介绍它的使用方法。
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。 可以通过下面的快捷键来更改显示内容。 按 a-z 即可显示或隐藏对应的列,最后按回车键确定。(我做的时候好像是空格键!) 而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。 而大写的 R 键可以将当前的排序倒转。
从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。 这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。 一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。 【在安全模式中此命令被屏蔽。】 输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新, 从而根本来不及看清显示的情况,而且系统负载也会大大增加。 |
free
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。
2.格式
free [-b|-k|-m][-o] [-s delay] [-t] [-V]
3.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
4.应用实例
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
第一行:
total 物理内存总数320276
used 已经使用的内存数295132
free 空闲的内存数25144
shared 当前已经废弃不用,总是0
buffers 即BufferCache内存数36700
cached 即PageCache内存数166612
关系:total = used + free
第二行:
-/+ buffers/cache的意思相当于:
-buffers/cache 的内存数:91820(等于第1行的 used – buffers – cached),实际上是应用程序所使用的内存。
+buffers/cache 的内存数: 228456(等于第1行的 free + buffers + cached),是对应用程序来说还剩余的内存。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
对操作系统来讲buffers/cached 都是属于被使用,所以它认为free只有25144.
对应用程序来讲是(-/+ buffers/cached).buffers/cached是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
第三行是交换分区swap, 列出已使用、空闲的swap.
[那buffers和cached都是缓存,两者有什么区别呢?]
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。