Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182146
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 177
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-26 14:21
个人简介

活在当下

文章分类

全部博文(24)

文章存档

2016年(1)

2014年(7)

2013年(16)

分类: LINUX

2013-10-15 17:17:09

最近在做一个测试,将一个常驻程序部署到在线服上,所以要对性能进行一个评估。
我用的工具是top,iostat
一、用top查看CPU、内存等

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    ****             

第一行:当前时间  系统运行时间 当前登录用户  系统负载(1分钟,5分钟,15分钟平均值)
第二行:161进程总数   1个正在运行的进程  159个睡眠进程  0个停止进程  0个僵尸进程
第三行:用户空间占用CPU百分比12.5% ,系统内核占用1%,用户进程空间内改变过优先级的进程占用CPU0%(目前未涉及到过),空闲CPU占85.9%,等待输入输出的CPU占0.4%,服务于硬中断所耗费的CPU占用0%,服务于软中断所耗费的CPU占用0.2%,Steal Time(目前未涉及到过)
第四行:物理内存总量为8301980KB,使用物理内存总量为7033432KB,空闲内存总量1268548KB,用作内核缓存的内存量为558728KB
第五行:swap交换分区总量为8385760KB,使用的交换分区总量132KB,空闲交换分区总量8385628KB,缓冲的交换区总量5437936KB
(注:内存可以用free看一下,大概内容如下:
    [root@controller ~]#free 
                    total             used           free         shared       buffers      cached
    Mem:       8301980    7690628     611352       0             561800    6089112
    -/+ buffers/cache:      1039716    7262264
    Swap:      8385760     132            8385628
    [root@controller ~]#
    总的物理内存使用量有如下公式:7690628(used) = 561800(buffers) + 6089112(c)
    总的内存总量8301980= 7690628 + 611352=1039716 + 7262264
    free内存量7262264 = 611352 + 561800 +  6089112
  (一般情况下,只关注此内存剩余量即可)
)
第六行:PID为进程ID,USER为进程所有者用户,PR优先级(未研究过),NI 负值表示高优先级正值表示低优先级,VIRT进程需要的虚拟内存总量,RES常驻内存,SHR共享内存大小,S进程状态(  D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止, Z=僵尸进程),%CPU更新到现在CPU占用百分比(也就是单位时间内进程使用的CPU时间/单位时间,如每隔1s,该进程有800ms占用CPU,则该进程占用CPU80%,如果是8核的,8个CPU全部跑满,则CPU占用率为800%),%MEM进程使用的物理内存百分比,TIME+进程使用的CPU时间总和,COMMAND为命令名称

(注:通常我们会关注一个程序占用的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的资源会很多
如果用磁盘缓存,不用内存缓存的话,能够支持断点重传,保证数据的可靠性上传,如突然断电等情况,存入磁盘缓存的数据等到恢复后会依然上传,而不会丢失,但是相对的也会增加读写磁盘的次数,如果数据量比较小,速度还是可以忍受的。

阅读(2701) | 评论(1) | 转发(0) |
0

上一篇:cacti数据备份

下一篇:Linux 下tftp服务部署

给主人留下些什么吧!~~

woaimaidong2013-10-20 00:30:16

很实用的系统性能监控命令。