Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3161828
  • 博文数量: 443
  • 博客积分: 11301
  • 博客等级: 上将
  • 技术积分: 5678
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-08 12:30
个人简介

欢迎加入IT云增值在线QQ交流群:342584734

文章分类

全部博文(443)

文章存档

2022年(1)

2021年(1)

2015年(2)

2014年(1)

2013年(1)

2012年(4)

2011年(19)

2010年(32)

2009年(2)

2008年(4)

2007年(31)

2006年(301)

2005年(42)

2004年(2)

分类:

2006-09-07 20:49:45

 
[描述]:

一台Sun Fire 12K,配置了40 CPU,80GB的物理内存,在Oracle数据库后台有大量I/O读写期间,IPMP报告台下错误,且系统有明显的延迟感和性能下降,在此期间,网络一直工作正常:

Sep 28 02:59:50 alambix in.mpathd[1890]: [ID 822913 daemon.error] Improved failure detection time 24388 ms on (inet ce3)
Sep 28 02:59:50 alambix in.mpathd[1890]: [ID 822913 daemon.error] Improved failure detection time 20000 ms on (inet ce0)
Sep 28 03:08:53 alambix in.mpathd[1890]: [ID 398532 daemon.error] Cannot meet requested failure detection time of 20000 ms on (inet ce0) new failure detection time is 44730 ms

[分析与解决方法]:

IPMP的问题一般是由网络故障所引起,但IPMP在报告上述错误的时候,网络并没有发生任何异常(通过网络调优和网络工具检查,没有发现网络故障),所以排除网络的原因.

考虑到该高端系统配备了大容量内存和多CPU,在IPMP报错期间也有性能上的问题,所以有可能是因为内存中数据的刷写(memory flush)量太大导致系统短暂失去响应,为了验证这个想法,将控制内存刷写的后台进程fsflush停止:

# echo "doiflush/W 0" | mdb -kw
# echo "dopageflush/W 0" | mdb -kw

在fsflush进程停止以后,问题得以解决.所以导致IPMP报错及系统性能下降的原因是因为大量的内存数据刷写导致磁盘活动增加,引起某个CPU过于繁忙,从而使系统暂时处于中断状态.

注意:
切不能在重要的生产环境上手工随意停止fsflush进程,这样做极有可能导致数据不完整甚至丢失.

手工启动fsflush:
echo "doiflush/W 1" | mdb -kw
echo "dopageflush/W 1" | mdb -kw


[背景知识]:

Solaris操作系统中有一个后台内核守护进程,”fsflush”. 它周期性扫描内存并将文件系统高速缓存中已修改的页面写到磁盘。在每次通过 fsflush daemon时,如果文件系统高速缓存中有大量的“脏”页面,那么在将页面写到磁盘时 fsflush 将会引起磁盘活动增加。这将导致磁盘中断增加,从而可能中断 UDP 接器线程。对于配置大内存的系统,最好减少由 fsflush daemon 的文件系统清理引起的干扰.

tune_t_fsflushr参数指定了 fsflush daemon ”醒来”,并将已修改的页面写到磁盘的时间间隔. 缺省值为5秒.

autoup参数决定了fsflush进程每次检查多少文件系统页面.fsflush每次检查并清理的”脏”文件系统页面的大小为:(tune_ts_fsflushr÷autoup×系统总内存大小).autoup值越大,系统每次对脏文件系统页面的处理I/O量就会减少(即写磁盘的I/O大小变小).

autoup值设置原则:物理内存大小(单位为G)的4倍(其缺省值为30秒),例如物理内存为160G,则autoup推荐值为640,其大小至少为”tune_t_fsflushr”大小的6倍.

如上述故障,由于系统的物理内存为80G,默认情况下,系统后台进程fsflush每5秒钟扫描内存中(1/6*80)=13GB大小的页面,并将”脏”页面写入磁盘,而由于Oracle的大量I/O读写导致磁盘活动迅速增加,fsflush不断刷写内存中的大量脏页面到物理磁盘,从而导致系统处时临时中断状态,并进一步影响IPMP的后台进程in.mpathd,该进程默认将隔100ms检查网络的健康状况.

[建议的解决方案]:

由于手工强制将fsflush进程将导致数据不完整或丢失,所以不能通过这种方法去解决问题,根据上述解释,可以将fsflush进程每次刷写内存中的页面大小减小,并加大fsflush进程的工作频率,以此心尽量减少过多的磁盘活动.
在”/etc/system”文件中加入:

set autoup=320 (为物理内存的4倍)
set tune_t_fsflushr=1

则fsflush进程将每秒去扫描(1/320*80)=0.25GB大小的内存页面,这样将大大减少磁盘的活动量,fsflush的活动将大大增加,将对系统带来一定的冲击,但由于系统的CPU较多,这种影响较小.
阅读(5132) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~