Linux 负载分析

来源:互联网 发布:c语言for循环执行顺序 编辑:程序博客网 时间:2024/06/01 10:39
Linux 在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

  在Linux下有很多系统性能分析工具,比较常见的有topfreepstimetimexuptime等。下文将介绍几个较为重要的性能分析工具vmstatiostatsar及其使用。

 用vmstat监视内存使用情况

  vmstatVirtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

  vmstat的语法如下:

  vmstat [-V] [-n] [delay [count]]

  其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。

iostat监视I/O子系统情况

  iostatI/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

  iostat的语法如下:

iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]

  其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。

   

vmstat 命令报告虚拟内存统计信息和CPU负荷:页面调度,交换,任务交换,CPU利用率。命令的语法是:

vmstat [-cisS] [d1 d2 d3 d4] [interval [count]]

当不用选项时,vmstat显示一条曲线表示自从系统启动后活动的信息。如果指定interval(时间间隔),接下来的线是重复显示最后的interval期间活动的情况,直到用户中断命令执行。当同时提供计数器时,统计信息按时间计数来显示。

如果指定了一个磁盘名(如d1d2,等等。),这些磁盘得到优先显示。通常,系统上的前4个磁盘设备是显示的,因为只有四个设备能在一线条上显示,这个选项允许性能分析员修改缺省显示选项。(*磁盘名通常随idsdxd,xy (取决于类型和I/0界面)加一个数字,如id0sd2xd1等等命名而定。)

vmstat 命令显示若干字段信息:

 

mstat命令用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况。

输出项

类别项目含义说明Procsr等待执行的任务数展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了 b  Memoryswpd正在使用的swap大小单位K  free空闲的内存空间  buff已使用的buff大小,对块设备的读写进行缓冲  cache已使用的cache大小,文件系统的cache  inact   active  Swapsi交换内存使用,由磁盘调入内存  so交换内存使用,由内存调入磁盘 IObi从块设备读入的数据总量(读磁盘) (KB/s),  bo写入到块设备的数据总理(写磁盘) (KB/s) Systemin每秒产生的中断次数  cs每秒产生的上下文切换次数上面这2个值越大,会看到由内核消耗的CPU时间会越多CPUus用户进程消耗的CPU时间百分比us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了 sy内核进程消耗的CPU时间百分比sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。 id空闲  waIO等待消耗的CPU时间百分比wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。通常使用vmstat 5 5(表示在5秒时间内进行5次采样)命令测试。将得到一个数据汇总他能够反映真正的系统情况。
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b   swpd   free   buff cache   si   so    bi    bo   in    cs us sy id wa
1 0 62792   3460   9116 88092    6   30   189    89 1061   569 17 28 54 2
0 0 62792   3400   9124 88092    0    00    14 884   434 4 14 81 0
0 0 62792   3400   9132 88092    0    00    14 877   424 4 15 81 0
1 0 62792   3400   9140 88092    0    00    14 868   418 6 20 74 0
1 0 62792   3400   9148 88092    0    00    15 847   400 9 25 67 0
Linux 内存监控vmstat命令输出分成六个部分:


(1)进程procs: 
r:在运行队列中等待的进程数 。
b:在等待io的进程数 。


(2)Linux 内存监控内存memoy: 
swpd:现时可用的交换内存(单位KB)。 
free:空闲的内存(单位KB)。
buff: 缓冲去中的内存数(单位:KB)。
cache:被用来做为高速缓存的内存数(单位:KB)。


(3) Linux 内存监控swap交换页面 
si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
so: 从内存交换到磁盘的交换页数量,单位:KB/秒。


(4)Linux 内存监控 io块设备:
bi: 发送到块设备的块数,单位:块/秒。
bo: 从块设备接收到的块数,单位:块/秒。


(5)Linux 内存监控system系统: 
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)转换次数。


(6)Linux 内存监控cpu中央处理器:
cs:用户进程使用的时间 。以百分比表示。
sy:系统进程使用的时间。 以百分比表示。
id:中央处理器的空闲时间 。以百分比表示。


如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。

如果bi,b长期不等于0,表示内存不足。

如果disk 经常不等于0 且在 b中的队列 大于3 表示 io性能不好。


vmstat看服务器

说明:由于STATSPACK并不能获取全面分析性能问题所需要的所有信息,所以需要扩展其收集服务器的统计信息。(本文环境REDHAT Linux7.2)

VMSTAT介绍

通过STATSPACK收集服务器信息,主要通过收集VMSTAT的信息来展现服务器状况。VMSTAT工具是最常见的UNIX监控工具,可以展现给定时间间隔的服务器的状态值。

一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。如:

[oracle@brucelau oracle]$ vmstat 1 2

procs memory swap io system  CPU

r b w swpd free buff cache  si so bi bo in cs us sy id

1 0 0 0 271844 186052 255852 0 0 2 6 102 10 0 0 100

0 0 0 0 271844 186052 255852 0 0 0 0 104 11 0 0 100

(注:目前系统几乎空闲,并且不同操作系统VMSTAT输出内容有所不同)

目前说来,对于服务器监控有用处的度量主要有:

r(运行队列)

pi(页导入)

us(用户CPU

sy(系统CPU

id(空闲)

通过VMSTAT识别CPU瓶颈

r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了。

获得CPU个数的命令(LINUX环境)

cat /proc/cpuinfo|grep processor|wc -l

r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:

1. 最简单的就是增加CPU个数

2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务

3. 调整已有任务的优先级

通过VMSTAT识别CPU满负荷

首先需要声明一点的是,vmstatCPU的度量是百分比的。当ussy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。

通过VMSTAT识别RAM瓶颈

数据库服务器都只有有限的RAM,出现内存争用现象是Oracle的常见问题。

首先察看RAM的数量,命令如下(LINUX环境):

[root@brucelau root]#free

total used free shared buffers cached

Mem: 1027348 873312 154036 185736 187496 293964

-/+ buffers/cache: 391852 635496

Swap: 2096440 0 2096440

当然可以使用top等其他命令来显示RAM

当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了,页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。

解决的办法有几种:

1. 最简单的,加大RAM

2. 改小SGA,使得对RAM需求减少

3. 减少RAM的需求(如:减少PGA

我们基本的了解了VMSTAT工作,下面是STATSPACK通过vmstat统计收集服务器性能数据。

STATSPACK通过vmstat收集服务器信息

首先在perfstat用户下建一个存储服务器信息的表:如

建表:

create table stats$vmstat

(

start_date date, --系统时间

duration date, --时间间隔

server_name varchar2(20), --服务器名称

runque_waits number, --运行队列数据

page_in number, --页导入数据

page_out number, --页导出数据

user_cpu number, --用户cpu数据

system_cpu number, --系统cpu数据

idle_cpu number, --空闲cpu数据

wait_cpu number -等待cpu数据(只是aix存在)

)

tablespace perfstat;

然后,通过UNIX/LINUXshell变成,利用vmstat的结果来获取相应的服务器信息,并且存放到表中。


原创粉丝点击