uniq:
uniq 命令只过滤相邻的重复行,如果要去掉所有重复行,需要先排序,或者使用uniq -u
例子:
$ cat tmp.txt
aa
aa
bb
bb
bb
cc
cc
aa
cc
bb
$ cat tmp.txt | sort | uniq
aa
bb
cc
$ cat tmp.txt | uniq -u
aa
cc
bb
free:
free [参数]:查看系统的内存使用和空闲情况。
参数:-b、-k、-m、-g,分别表示以 byte、kb、Mb、Gb 单位输出,-s <间隔秒数>,指定输出时间间隔。
例子:
$ free -m
total used free shared buffers cached
Mem: 1000 855 145 0 28 296
-/+ buffers/cache: 530 470
Swap: 2015 0 2015
列输出:
数值单位均为 M
totel: 物理内存的总大小
used: 已经使用的物理内存大小
free: 空闲的物理内存大小
shared:多个进程共享的内存总大小
buffers:Buffer Cache 的内存大小
cached:Page Cache 的内存大小
行输出:
(1)Mem: 物理内存使用情况,根据该行可以得到:物理内存的总大小(totel) = 已经使用的物理内存(used) + 空闲的物理内存(free)
(2)-/+ buffers/cache: 分为两部分看,- 代表都减去,+ 代表都加上
-buffers/cache: - 时,只看 used 列的值,已经使用的物理内存大小 = Mem 行中 used - buffers - cache,可能有细微差别,可忽略。
+buffers/cache: + 时,只看 free 列的值,空闲的物理内存大小 = Mem 行中 free + buffers + cache,可能有细微差别,可忽略。
详细解释:
第一行 Mem 输出是按照系统角度来看内存的使用情况,此时 buffers 和 cached 均被认为是使用了的内存,因为这两部分内存已经被
分配了。
第二行按照应用进程的角度来看内存的使用情况,此时 buffers 和 cached 均被认为是可以使用的内存,因为它们可以缓存应用进程的
数据,提升读写 IO 的性能。
因此第二行的 used 才是实际上应用进程使用了的内存大小,free 才是空闲的内存大小。
(3)Swap: Swap 空间的内存使用情况,根据该行可以得到:Swap 空间的总大小(totel) = 已经使用的 Swap 空间大小(used) + 空闲的 Swap 空间大小(free)
补充相关知识:
Linux 系统为了高效读写,设计实现了两种 Cache:Buffer Cache 和 Page Cache,前者针对磁盘块的读写,后者针对文件
的读写,这些 Cache 能有效缩短了 I/O 系统调用(比如read、write)的时间。
vmstat:
vmstat delay count: 查看机器的 CPU、Memory、进程、Swap 空间的使用情况以及 IO 的读写情况。
参数:delay 代表每 delay 秒刷新一次,count 代表共刷新 count 次,当不指定次数时会每 delay 秒输出一次并一直输出
-S:使用指定单位显示,参数有 k 、K 、m 、M ,分别代表 1000 byte、Kb、1000000 byte、Mb,默认单位为 Kb。
例子
$ vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0
procs:
r:运行队列中的进程数量,包括正在执行和等待 CPU 资源的进程个数,当这个值超过了 CPU 个数时说明 CPU 资源不足
b:正在等待 IO 操作返回而阻塞的进程数量
memory:
swpd:已经使用的 Swap 空间大小,如果大于 0 ,说明物理内存吃紧不够用了
free:空闲的内存大小
buff:Buffer Cache 的内存大小
cache:Page Cache 的内存大小
swap:
si:每秒从 Swap 空间换入的内存大小
so:每秒换出到 Swap 空间的内存大小,如果这两个值大于 0,说明在发生 Swap 换入换出,表示物理内存吃紧不够用了
io:
bi:每秒从块设备接收到的块数,即读块设备。
bo:每秒发送到块设备的块数,即写块设备,bi 和 bo一般都要接近 0,不然就是 IO 过于频繁,需要调整
system:
in:系统每秒中断次数,包括时钟中断
cs:CPU 每秒上下文切换的次数,也就是用户态和内核态之间的转换
cpu:
us:即 user,用户态进程执行消耗的 CPU 时间,百分比表示
sy:即 sys,内核态进程执行消耗的 CPU 时间,百分比表示
id:即 idle,CPU 空闲时间,包括 IO 等待时间,百分比表示,一般来说,us + sy + id = 100
wa:即 wait,IO 等待时间,百分比表示
pmap:查看进程内每个内存映像的相关信息,比如占用的虚拟内存大小、驻留内存大小、映像文件等。
内存映像也就是进程内哪些内存地址分配了对象,以及整个对象占用大小、映像文件等信息。
pmap [参数] pid
参数:
-x:增加一个标题行,同时显示每个内存映像的驻留内存,以及脏页的大小,单位为 Kb
-d:增加一个标题行,同时显示内存映射文件的偏移值,以及存储设备的主次设备号等附加信息
例子:
$ pmap -x 1936
Address Kbytes RSS Mode Mapping
00934000 88 88 - r-x-- ld-2.3.4.so
0094a000 4 4 - r---- ld-2.3.4.so
0094b000 4 4 - rw--- ld-2.3.4.so
0094e000 1188 1100 - r-x-- libc-2.3.4.so
00a7b000 8 8 - rw--- [ anon ]
bffee000 72 72 - rw--- [ stack ]
Address:内存映像的虚拟空间起始地址
Kbytes:内存映像大小,也就是占用的虚拟内存大小
RSS:驻留内存大小
Dirty:脏页大小
Mode:读写访问权限
Mapping: 内存映像文件,可能为实际的文件名,[anon] 为已分配内存,[stack] 为程序堆栈
Offset:内存映像文件偏移值
Device:存储设备的主次设备号
网友评论