活在当下
分类: LINUX
2013-10-15 17:17:09
1、top - 11:59:57 up 202 days, 18:36, 3 users, load average: 1.65, 1.59, 1.58
2、Tasks: 161 total, 1 running, 159 sleeping, 0 stopped, 0 zombie
3、Cpu(s): 12.5%us, 1.0%sy, 0.0%ni, 85.9%id, 0.4%wa, 0.0%hi, 0.2%si, 0.0%st
4、Mem: 8301980k total, 7033432k used, 1268548k free, 558728k buffers
5、Swap: 8385760k total, 132k used, 8385628k free, 5437936k cached
6PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7256 ****** 18 0 162m 9944 5460 S 98.9 0.1 4754:10 ****
29307 **** 19 0 208m 82m 15m S 19.8 1.0 312:24.65 ****
24564 **** 15 0 584m 230m 6208 S 5.9 2.8 63:18.72 ****
23350 **** 15 0 2192 960 716 R 2.0 0.0 0:00.01 ****
24563 **** 15 0 584m 230m 6172 S 2.0 2.8 55:33.32 ****
(注:通常我们会关注一个程序占用的CPU和内存的大小,即%CPU和VIRT。以下是VIRT、RES、SHR的解释:
VIRT:virtual memory usage
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
VIRT=SWAP+RES
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的
)
二、iostat查看io情况
查看TPS和吞吐量信息
[root@controller ~]#iostat -d -k 1 10
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 19.00 0.00 112.00 0 112
sda1 0.00 0.00 0.00 0 0
sda2 0.00 0.00 0.00 0 0
sda3 0.00 0.00 0.00 0 0
sda4 0.00 0.00 0.00 0 0
sda5 3.00 0.00 16.00 0 16
sda6 0.00 0.00 0.00 0 0
sda7 16.00 0.00 96.00 0 96
tps:该设备每秒的传输次数,一次传输的意思是“一次I/O请求”
kB_read/s:每秒从设备读取的数据量
kB_wrtn/s :每秒向设备写入的数据量
kB_read :读取的总数据量
kB_wrtn :写入的总数量数据量
使用-x获得更多信息
查看设备使用率(%util)、响应时间(await)
[root@controller ~]#iostat -d -x -k 1 10
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 22.00 0.00 18.00 0.00 160.00 17.78 0.07 3.78 3.78 6.80
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda3 0.00 15.00 0.00 2.00 0.00 68.00 68.00 0.01 6.50 6.50 1.30
sda4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda7 0.00 7.00 0.00 16.00 0.00 92.00 11.50 0.06 3.44 3.44 5.50
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
rsec/s: 每秒读扇区数.即 delta(rsect)/s
wsec/s: 每秒写扇区数.即 delta(wsect)/s
rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度.即 delta(aveq)/s/(因为aveq的单位为毫秒).
await: 平均每次设备I/O操作的等待时间(毫秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的.即 delta(use)/s/1000 (因为use的单位为毫秒)
(如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈.
%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
)
部署一个程序时(我测试的是一个实时上传日志的程序),对系统的cpu、内存、io等都要有所考虑,保证系统高效的运行。
如果程序本身处理的包特别小,事件很多,压力大且没有间隔的话,占用CPU的资源会很多
如果用磁盘缓存,不用内存缓存的话,能够支持断点重传,保证数据的可靠性上传,如突然断电等情况,存入磁盘缓存的数据等到恢复后会依然上传,而不会丢失,但是相对的也会增加读写磁盘的次数,如果数据量比较小,速度还是可以忍受的。