Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > 其他操作系统 > 案例-在大量I/O读写期间,IPMP报错
【标  题】:案例-在大量I/O读写期间,IPMP报错
【关键字】:I/O,IPMP
【来  源】:http://www.cublog.cn/u/524/showart.php?id=166713

案例-在大量I/O读写期间,IPMP报错

Your Ad Here
转自Simon的BLOG: http://blog.sina.com.cn/u/45d51ebc01000354
 
[描述]:

一台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较多,这种影响较小.
一个能自动、批量上传/下载文件的脚本:【上一篇】
案例-E6900 SSC0/SSC1启动过程中挂起:【下一篇】
【相关文章】
  • Introduction of Blocking and Nonblocking I/O
  • 技巧:Linux I/O重定向的一些小技巧[zz]
  • I/O空间
  • IPMP的配置中物理网卡的处理
  • 输入输出(I/o)
  • A sample that using the completion port I/O model
  • 很幽默的讲解六种Socket I/O模型
  • 磁盘I/O测试工具Bonnie++(转贴)
  • 理解I/O Completion Port(ZT)
  • Configure IPMP on a single host running Solaris
  • 【随机文章】
  • 12月8号CSDN聊天室——SOA技术专场(探讨倍受关注的技术·了解SOA的发展趋势)
  • 第七章:make的内嵌函数
  • ASP.NET负压测试
  • 知识共享/源代码管理
  • 瑞星病毒预警一周播报
  • <0>Kernel panic - not syncing:Attempted to kill...
  • div和span标签的区别
  • C++应用程序开发步骤
  • 线程中抛出未捕捉的异常会如何? [修正版]
  • A 为二维数组,则 *(&A[0] + i)[j] 表示什么?
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.