linux 服务器性能评估与优化

29
1 南南南南 2009 南 6 南 21 南

Upload: oleg

Post on 21-Jan-2016

176 views

Category:

Documents


3 download

DESCRIPTION

Linux 服务器性能评估与优化. 南非蚂蚁 2009 年 6 月 21 日. 个人简介. 高俊峰,网名:南非蚂蚁 IXPUB “ 存储设备与容灾技术”及“ Linux 与开源世界”版主。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linux 服务器性能评估与优化

1

南非蚂蚁

2009 年 6 月 21 日

Page 2: Linux 服务器性能评估与优化

高俊峰,网名:南非蚂蚁IXPUB “ 存储设备与容灾技术”及“ Linux 与开源世界”版主。喜欢 oracle 和 Unix/Linux 技术,平时主要活动在 ITPUB.net﹑IXPUB.net ChinaUnix.net﹑ 等大型技术社区,一直致力与 oracle数据库﹑ Unix/Linux 操作系统管理﹑优化领域,现在主要从事oracle 数据库管理和项目规划设计工作,擅长 oracle 数据库的备份恢复,性能调优,对 Unix/Linux 集群应用也有一定的研究。

通过如下方式可以联系到我:MSN : [email protected]:397824870Email:[email protected]

2

Page 3: Linux 服务器性能评估与优化

影响 Linux 性能的因素

系统性能评估标准

系统性能分析工具

性能评估与优化过程

Oracle 在 Linux 下的性能优化

Page 4: Linux 服务器性能评估与优化

CPU 内存 磁盘 I/O 带宽 网络 I/O 带宽

4

一 影响一 影响 LinuxLinux 服务器性能的因素服务器性能的因素操作系统级

程序应用级

Page 5: Linux 服务器性能评估与优化

55

影响性能因素 评判标准好 坏 糟糕

CPU user% + sys%< 70%

user% + sys%= 85% user% + sys% >=90%

内存 Swap In ( si)=0Swap Out ( so)= 0

Per CPU with 10 page/s More Swap In & Swap Out

磁盘 iowait % < 20% iowait % =35% iowait % >= 50%

其中:%user:表示 CPU 处在用户模式下的时间百分比。%sys :表示 CPU 处在系统模式下的时间百分比。%iowait :表示 CPU 等待输入输出完成时间的百分比。swap in:即 si,表示虚拟内存的页导入,即从 SWAP DISK 交换到 RAMswap out:即 so,表示虚拟内存的页导出,即从 RAM 交换到 SWAP DISK 。

Page 6: Linux 服务器性能评估与优化

三 系统性能分析工具三 系统性能分析工具

Vmstat 、 sar 、 iostat 、 netstat 、 free 、 ps 、 top等

常用系统命令

常用组合方式

• 用 vmstat 、 sar 、 iostat 检测是否是 CPU 瓶颈

• 用 free 、 vmstat 检测是否是内存瓶颈

• 用 iostat 检测是否是磁盘 I/O 瓶颈

• 用 netstat 检测是否是网络带宽瓶颈

Page 7: Linux 服务器性能评估与优化

7

四 四 LinuxLinux 性能评估与优化性能评估与优化

1 :系统整体性能评估( uptime 命令)

[root@web1 ~]# uptime16:38:00 up 118 days, 3:01, 5 users, load average: 1.22, 1.02, 0.91

这里需要注意的是: load average 这个输出值,这三个值的大小一般不能大于系统 CPU 的个数,例如,本输出中系统有 8 个 CPU, 如果 load average 的三个值长期大于 8 时,说明 CPU 很繁忙,负载很高,可能会影响系统性能,但是偶尔大于 8 时,倒不用担心,一般不会影响系统性能。相反,如果 load average 的输出值小于 CPU 的个数,则表示 CPU 还有空闲的时间片,比如本例中的输出, CPU 是非常空闲的。

Page 8: Linux 服务器性能评估与优化

( 1 )利用 vmstat 命令监控系统 CPU 该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看 CPU 一个负载情

况。 下面是 vmstat 命令在某个系统的输出结果: [root@node1 ~]# vmstat 2 3procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0 0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0 0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0Procs

r 列表示运行和等待 cpu 时间片的进程数,这个值如果长期大于系统 CPU 的个数,说明 CPU 不足,需要增加 CPU 。

b 列表示在等待资源的进程数,比如正在等待 I/O 、或者内存交换等。Cpu

us 列显示了用户进程消耗的 CPU 时间百分比。 us 的值比较高时,说明用户进程消耗的 cpu 时间多,但是如果长期大于 50% ,就需要考虑优化程序或算法。

sy 列显示了内核进程消耗的 CPU 时间百分比。 Sy 的值较高时,说明内核消耗的 CPU 资源很多。 根据经验, us+sy 的参考值为 80% ,如果 us+sy 大于 80% 说明可能存在 CPU 资源不足。

Page 9: Linux 服务器性能评估与优化

( 2 ) 利用 sar 命令监控系统 CPU

sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用 sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。 下面是 sar命令对某个系统的 CPU统计输出:

[root@webserver ~]# sar -u 3 5Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)11:41:24 AM CPU %user %nice %system %iowait %steal %idle11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.8311:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.5011:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.9211:41:36 AM all 90.08 0.00 0.13 0.16 0.00 9.6311:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41Average: all 0.34 0.00 0.16 0.05 0.00 99.45

对上面每项的输出解释如下:%user列显示了用户进程消耗的 CPU 时间百分比。%nice列显示了运行正常进程所消耗的 CPU 时间百分比。%system列显示了系统进程消耗的 CPU时间百分比。%iowait列显示了 IO等待所占用的 CPU时间百分比%steal列显示了在内存相对紧张的环境下 pagein 强制对不同的页面进行的 steal 操作 。%idle列显示了 CPU处在空闲状态的时间百分比。

Page 10: Linux 服务器性能评估与优化

你是否遇到过系统 CPU 整体利用率不高,而应用缓慢的现象?

在一个多 CPU 的系统中,如果程序使用了单线程,会出现这么一个现象, CPU 的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个 CPU ,导致这个 CPU 占用率为 100% ,无法处理其它请求,而其它的 CPU 却闲置,这就导致了整体 CPU 使用率不高,而应用缓慢现象的发生。

Page 11: Linux 服务器性能评估与优化

(( 11 )利用)利用 freefree 指令监控内存指令监控内存

free 是监控 linux 内存使用状况最常用的指令,看下面的一个输出:

[root@webserver ~]# free -m total used free shared buffers cachedMem: 8111 7185 926 0 243 6299-/+ buffers/cache: 643 7468Swap: 8189 0 8189

一般有这样一个经验公式:应用程序可用内存 / 系统物理内存 >70% 时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存 / 系统物理内存 <20% 时,表示系统内存资源紧缺,需要增加系统内存, 20%< 应用程序可用内存 / 系统物理内存 <70% 时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。

Page 12: Linux 服务器性能评估与优化

(( 22 ) 利用) 利用 vmstatvmstat 命令监控内存命令监控内存

[root@node1 ~]# vmstat 2 3procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0 0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0 0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0

memoryswpd 列表示切换到内存交换区的内存数量(以 k 为单位)。如果 swpd 的值不为 0 ,

或者比较大,只要 si 、 so 的值长期为 0 ,这种情况下一般不用担心,不会影响系统性能。free 列表示当前空闲的物理内存数量(以 k 为单位)buff 列表示 buffers cache 的内存数量,一般对块设备的读写才需要缓冲。 cache 列表示 page cached 的内存数量,一般作为文件系统 cached ,频繁访问的文

件都会被 cached ,如果 cache 值较大,说明 cached 的文件数较多,如果此时 IO 中 bi 比较小,说明文件系统效率比较好。swap

si 列表示由磁盘调入内存,也就是内存进入内存交换区的数量。so 列表示由内存调入磁盘,也就是内存交换区进入内存的数量。

一般情况下, si 、 so 的值都为 0 ,如果 si 、 so 的值长期不为 0 ,则表示系统内存不足。需要增加系统内存。

Page 13: Linux 服务器性能评估与优化

(( 11 )磁盘存储基础)磁盘存储基础

熟悉 RAID 存储方式,可以根据应用的不同,选择不同的 RAID方式。 尽可能用内存的读写代替直接磁盘 I/O ,使频繁访问的文件或数据放入内存中进行操作处理,因为内存读写操作比直接磁盘读写的效率要高千倍。 将经常进行读写的文件与长期不变的文件独立出来,分别放置到不同的磁盘设备上。 对于写操作频繁的数据,可以考虑使用裸设备代替文件系统。

使用裸设备的优点有: 数据可以直接读写,不需要经过操作系统级的缓存,节省了内存资源,避免了内存资源争用。 避免了文件系统级的维护开销,比如文件系统需要维护超级块、 I-node 等。 避免了操作系统的 cache预读功能,减少了 I/O 请求。

使用裸设备的缺点是: 数据管理、空间管理不灵活,需要很专业的人来操作。

Page 14: Linux 服务器性能评估与优化

14

(( 22 )利用)利用 iostatiostat 评估磁盘性能评估磁盘性能[root@webserver ~]# iostat -d 2 3Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU) Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 1.87 2.58 114.12 6479462 286537372 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 0.00 0.00 0.00 0 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 1.00 0.00 12.00 0 24

对上面每项的输出解释如下:Blk_read/s 表示每秒读取的数据块数。Blk_wrtn/s 表示每秒写入的数据块数。Blk_read 表示读取的所有块数。Blk_wrtn 表示写入的所有块数。 可以通过 Blk_read/s 和 Blk_wrtn/s 的值对磁盘的读写性能有一个基本的了解,如果 Blk_wrtn/s 值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果 Blk_read/s 值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。 对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。

Page 15: Linux 服务器性能评估与优化

15

(( 33 )利用)利用 sarsar 评估磁盘性能评估磁盘性能 通过“ sar –d”组合,可以对系统的磁盘 IO做一个基本的统计,请看下面的一个输出:

[root@webserver ~]# sar -d 2 3Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU) 11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00 11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %utilAverage: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02

需要关注的几个参数含义:await 表示平均每次设备 I/O 操作的等待时间(以毫秒为单位)。svctm 表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。%util 表示一秒中有百分之几的时间用于 I/O 操作。

Page 16: Linux 服务器性能评估与优化

16

(( 33 )利用)利用 sarsar 评估磁盘性能评估磁盘性能

对以磁盘 IO 性能,一般有如下评判标准:

正常情况下 svctm 应该是小于 await 值的,而 svctm 的大小和磁盘性能有关, CPU 、内存的负荷也会对 svctm 值造成影响,过多的请求也会间接的导致svctm 值的增加。

await 值的大小一般取决与 svctm 的值和 I/O队列长度以及 I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果await 的值远高于 svctm 的值,则表示 I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。

%util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util接近 100% ,表示磁盘产生的 I/O 请求太多, I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。

Page 17: Linux 服务器性能评估与优化

( 1 )通过 ping 命令检测网络的连通性

( 2 )通过 netstat –i 组合检测网络接口状况

( 3 )通过 netstat –r 组合检测系统的路由表信息

( 4 )通过 sar –n 组合显示系统的网络运行状态

Page 18: Linux 服务器性能评估与优化

Oracle 数据库内存参数的优化 与 oracle 相关的系统内核参数 SGA 、 PGA 参数设置

Oracle 下磁盘存储性能优化 文件系统的选择( ext2/ext3 、 xfs 、 ocfs2 ) Oracle ASM 存储

Page 19: Linux 服务器性能评估与优化
Page 20: Linux 服务器性能评估与优化

(( 11 )系统内核参数)系统内核参数

修改 /etc/sysctl.conf 这个文件,加入以下的语句:

kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.shmall = 2097152kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000

参数依次为:Kernel.shmmax:共享内存段的最大尺寸(以字节为单位)。Kernel.shmmni :系统中共享内存段的最大数量。Kernel.shmall :共享内存总量,以页为单位。fs.file-max :文件句柄数,表示在 Linux 系统中可以打开的文件数量。net.ipv4.ip_local_port_range :应用程序可使用的 IPv4端口范围。

Page 21: Linux 服务器性能评估与优化

关于 Kernel.shmmaxOracle SGA 由共享内存组成,如果错误设置 SHMMAX 可能会限制 SGA 的大

小, SHMMAX 设置不足可能会导致以下问题: ORA-27123:unable to attach to shared memory segment ,如果该参数设置小于 Oracle SGA 设置,那么 SGA 就会被分配多个共享内存段。这在繁忙的系统中可能成为性能负担,带来系统问题。

Oracle建议 Kernel.shmmax最好大于 sga ,以让 oracle共享内存区 SGA 在一个共享内存段中,从而提高性能。

关于 Kernel.shmall 表示系统共享内存总大小,以页为单位。一个 32位的 Linux 系统, 8G 的内存,可以设置 kernel.shmall = 2097152 ,即为:

2097152*4k/1024/1024 = 8G 就是说可用共享内存一共 8G ,这里的 4K 是 32位操作系统一页的大小,即 4096字节。

关于 Kernel.shmmni 表示系统中共享内存段的最大数量。系统默认是 4096,一般无需修改,在 SUN

OS下还有 Kernel.shmmin 参数,表示共享内存段最小尺寸,勿要混肴!

Page 22: Linux 服务器性能评估与优化

A.A. OracleOracle 在在内存管理方面的改进内存管理方面的改进

Oracle 9i通过参数 PGA_AGGREGATE_TARGET 参数实现 PGA自动管理Oracle 10g通过参数 SGA_TARGET 参数实现了 SGA 的自动管理,

Oracle 11g实现了数据库所有内存块的全自动化管理,使得动态管理 SGA 和PGA 成为现实。

自动内存管理的两个参数:MEMORY_TARGET :表示整个 ORACLE实例所能使用的内存大小,包括PGA 和 SGA 的整体大小,即这个参数是动态的,可以动态控制 SGA 和 PGA的大小。MEMORY_MAX_TARGET :这个参数定义了 MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET 值,默认等于 MEMORY_TARGET 的值。使用动态内存管理时, SGA_TARGET 和 PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让 Oracle 完全控制内存管理,这两个参数应该设置为 0 。

Page 23: Linux 服务器性能评估与优化

自动内存管理 , 即 AMM (Automatic Memory Management )

自动共享内存管理,即 ASMM ( Automatic Shared Memory Management )

手动共享内存管理

自动 PGA 管理

手动 PGA 管理

Page 24: Linux 服务器性能评估与优化

默认安装 oracle11g 的实例就是 AMM方式。通过如下查看:

示例如下:SQL> show parameters target NAME TYPE VALUE------------ --------------------- ------------------ ---------------------- archive_lag_target integer 0db_flashback_retention_target integer 1860fast_start_io_target integer 0fast_start_mttr_target integer 0memory_max_target big integer 1400Mmemory_target big integer 1400Mpga_aggregate_target big integer 0sga_target big integer 0

注意:如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。

Page 25: Linux 服务器性能评估与优化

自动共享内存管理是 oracle10g引进的,如果要使用自动共享内存管理,只需设置 MEMORY_TARGET=0 ,然后显式指定 SGA_TARGET 即可。

示例如下:

SQL> alter system set memory_target=0 scope=both;System altered.SQL> alter system set sga_target=1024m scope=both;System altered.SQL>

Page 26: Linux 服务器性能评估与优化

Oracle9i 以及以前版本,只能手工设置共享内存管理,如果要使用手动共享内存管理,首先需要设置 SGA_TARGET 与 MEMORY_TARGET为 0 。

SGA包含主要参数有:

share_pool_size :共享池大小,建议 300-500M 之间。Log_buffer :日志缓冲区大小,建议 1-3M 之间。Large_pool_size :大缓冲池大小,非 MTS 系统,建议在 20-30M 之间。Java_pool_size : java池大小,没有 java 应用时,建议 10-20M 之间。db_cache_size :数据缓冲区大小,根据可使用内存大小,尽可能大。

Page 27: Linux 服务器性能评估与优化

Oracle9i 版本引入了自动 PGA 管理,如果使用的是 AMM 管理方式,则无需担心 PGA 的配置,但是如果对对 AMM 管理不放心的话,可以设置自动PGA 管理,设置

WORKAREA_SIZE_POLICY = AUTO然后指定 PGA_AGGREGATE_TARGET 大小即可。,

如果要做到精确的控制 PGA ,还可以设置手动管理 PGA ,设置WORKAREA_SIZE_POLICY = manual

然后分别指定 PGA 相关参数即可:PGA 相关参数有:SORT_AREA_SIZESORT_AREA_RETAINED_SIZE ,

Page 28: Linux 服务器性能评估与优化

①① 选择文件系统存取数据选择文件系统存取数据

文件系统的选择单一文件系统( ext2 、 ext3 、 xfs 等)集群文件系统( gfs 、 ocfs2 )

文件系统存储优缺点:优点:管理维护方便。缺点:数据读写要经过操作系统级的缓存,效率不是很高。

②② ASMASM (( Automatic Storage ManagementAutomatic Storage Management ))

ASM 优点:数据可直接读写,无需经过操作系统存取效率很高,读写效率与直接的原始设备基本相同。Oracle提供了专门的管理和维护工具

Page 29: Linux 服务器性能评估与优化

29