1.CPU&进程
1.1 top命令
top - 20:07:00 up 186 days, 3:47, 3 users, load average: 0.01, 0.02, 0.00
Tasks: 82 total, 1 running, 80 sleeping, 1 stopped, 0 zombie
Cpu(s): 3.7% us, 0.0% sy, 0.0% ni, 96.3% id, 0.0% wa, 0.0% hi, 0.0% si
第1行 load average
系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第2行 进程情况
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
第3行 cpu利用情况
多颗cpu的系统按"1"查看每颗cpu利用率
Cpu(s):
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待输入输出的CPU时间百分比
hi 硬件中断
si 软件中断
后面两个参数我没有深入了解过,也不是很明白.
关于top命令的详细情况,请查阅top命令详解文章
2.Memory
2.1 top 命令
Mem: 4149144k total, 3832668k used, 316476k free, 277592k buffers
Swap: 2096440k total, 144k used, 2096296k free, 2397028k cached
Mem:内存利用率
total 物理内存总量
used 使用的物理内存总量
free 空闲内存总量
buffers 用作内核缓存的内存量
Swap:内存交换区利用率Swap
total 交换区总量
used 使用的交换区总量
free 空闲交换区总量
cached 缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
2.2 free
free -m 内存信息按照M单位显示
total used free shared buffers cached
Mem: 4051 3744 307 0 271 2340
-/+ buffers/cache: 1132 2919
Swap: 2047 0 2047
total: 内存总数
used: 已经使用的内存数
free: 空闲的内存数
shared: 当前已经废弃不用,总是0
buffers: Buffer缓存内存数,是块设备的读写缓冲区
cached: Page缓存内存数,文件系统的cache
关系:total=used+free
第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:(指的第一部分Mem行中的used - buffers-cached)
(+buffers/cache) free内存数: (指的第一部分Mem行中的free + buffers+cached)
-buffers/cache反映的是被程序实实在在吃掉的内存
+buffers/cache反映的是可以挪用的内存总数
对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
关于buffer与cache的区别
A buffer is something that has yet to be "written" to disk
buffer为有待写入磁盘的数据的缓冲区(供块设备访问,即随机访问数据片的设备)
A cache is something that has been "read" from the disk and stored for later use
cache为已经被从磁盘读取和存储有待使用的缓冲区
第三部分为虚拟内存缓冲区(swap),与windows不同的是,linux在物理内存没有耗尽的情况下,swap是不使用的.我曾经在做性能测试的过程中监控,发现服务器物理free内存只剩下
15m时候,swap换入换出都仍然为0
2.3 vmstat n 动态监控内存使用情况(n为采样间隔时间)
在性能测试过程中,n最好不设置过小,以免耗费不必要的系统资源影响测试结果.
procs -----------memory------------- -----swap--- ----io---- --system-- ------cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 144 312628 277612 2397268 0 0 1 9 1 0 2 0 98 0
0 0 144 312628 277628 2397252 0 0 0 19 1006 869 5 0 95 0
procs:
r:在运行队列中等待的进程数
b:在等待io的进程数
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大(比如超过了100m),代表曾经使用虚拟内存的数量,只要si、so的值长期为0,说明数据从磁盘到内存无换入换出,系统性能还是正常的.
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量(k),一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
io
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
以上两项数值高,表示磁盘读写频繁,排除是否程序在大量读取文件。可以使用iostat进一步观察磁盘情况
system系统:
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)切换次数。
如以上两项数值持续走高,说明程序引起的cpu调度出现问题,考虑程序处理逻辑的问题
cpu
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)