Linux性能分析

linux 性能分析
点评:公司有个测试服务器,上面跑了几个应用和一个DB。 DB被这个几个应用使用。 最近老是被挂掉。 CPU 使用率100%。 搞到最后大家都不能用。敲个命令都没反应。 TOP命令显示的是一些Oracle session占用CPU资源太多。 杯具的是在服务器上连sqlplus 都进不去了,命令都没反应。 只好把服务器重启了。 重启之后再看了一下,是一个同事测试的SQL 有问题。 一条SQL 占用CPU 就30%。       

在研究这个问题的时候,也google到了一些Linux 下的监控事项,整理如下。
一.  Linux 性能监控的概述
       系统由若干子系统构成,通常修改一个子系统有可能影响到另外一个子系统,甚至会导致整个系统不稳定、崩溃。所以说优化、监测、测试通常是连在一起的,而且是一个循环而且长期的过程,通常监测的子系统有以下这些:
(1).      CPU
(2).      Memory
(3).      IO
(4).      Network
       这些子系统互相依赖,了解这些子系统的特性,监测这些子系统的性能参数以及及时发现可能会出现的瓶颈对系统优化很有帮助。
1.1  应用类型
       不同的系统用途也不同,要找到性能瓶颈需要知道系统跑的是什么应用、有些什么特点,比如 web server 对系统的要求肯定和 file server 不一样,所以分清不同系统的应用类型很重要,通常应用可以分为两种类型:
       (1)IO 相关,IO 相关的应用通常用来处理大量数据,需要大量内存和存储,频繁 IO 操作读写数据,而对 CPU 的要求则较少,大部分时候 CPU 都在等待硬盘,比如,数据库服务器、文件服务器等。
       (2)CPU 相关,CPU 相关的应用需要使用大量 CPU,比如高并发的 web/mail 服务器、图像/视频处理、科学计算等都可被视作 CPU 相关的应用。
看看实际中的例子,第1个是文件服务器拷贝一个大文件时表现出来的特征:
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  4    140 1962724 335516 4852308  0    0   388 65024 1442  563  0  2 47 52  0
0  4    140 1961816 335516 4853868  0    0   768 65536 1434  522  0  1 50 48  0
0  4    140 1960788 335516 4855300  0    0   768 48640 1412  573  0  1 50 49  0
0  4    140 1958528 335516 4857280  0    0  1024 65536 1415  521  0  1 41 57  0
0  5    140 1957488 335516 4858884  0    0   768 81412 1504  609  0  2 50 49  0
 
第2个是 CPU 做大量计算时表现出来的特征:
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
4  0    140 3625096 334256 3266584  0    0     0    16 1054  470 100 0  0  0  0
4  0    140 3625220 334264 3266576  0    0     0    12 1037  448 100 0  0  0  0
4  0    140 3624468 334264 3266580  0    0     0   148 1160  632 100 0  0  0  0
4  0    140 3624468 334264 3266580  0    0     0     0 1078  527 100 0  0  0  0
4  0    140 3624712 334264 3266580  0    0     0    80 1053  501 100 0  0  0  0
       上面两个例子最明显的差别就是 id 一栏,代表 CPU 的空闲率,拷贝文件时候 id 维持在 50% 左右,CPU 大量计算的时候 id 基本为 0。
1.2  底线
       事先建立一个底线,如果性能监测得到的统计数据跨过这条线,我们就可以说这个系统性能差,如果数据能保持在线内我们就说性能好。建立这样底线需要知道一些理论、额外的负载测试和系统管理员多年的经验。如果自己没有多年的经验,有一个简单划底线的办法就是:把这个底线建立在自己对系统的期望上。自己期望这个系统有个什么样的性能,这是一个底线,如果没有达到这个要求就是性能差。
1.3  监测工具
工具
简单介绍
top
查看进程活动状态以及一些系统状况
vmstat
查看系统状态、硬件和系统信息等
iostat
查看CPU 负载,硬盘状况
sar
综合工具,查看系统状况
mpstat
查看多处理器状况
netstat
查看网络状况
iptraf
实时网络状况监测
tcpdump
抓取网络数据包,详细分析
mpstat
查看多处理器状况
tcptrace
数据包分析工具
netperf
网络带宽工具
dstat
综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息

你可能感兴趣的:(性能测试)