`

磁盘I/O也能够让程序不正确

阅读更多
       HSQLDB数据库执行SHUTDOWN命令,如果系统磁盘I/O性能不是很好的话,也能够造成程序的错误。
      
       该BUG是因为HSQLDB 数据库执行ShutDown命令之后,由于客户端正在运行BT, Emule这样的程序,使得客户端的磁盘一直都处于I/O状态。因此,在程序调用shutdown命令之后,文件系统并没有在非常短的时间内完成文件操作。

       因此,在程序执行到后面,需要对已经生成的文件进行访问的时候,出现了错误。而出现的错误也是比较怪异。一会儿出现文件不存在;一会儿又出现有其他的进程正在对文件进行访问;一会儿还出现客户端无法加载CLASSES;有些时候又可以正常了。

       通过分析,我断定是因为程序在调用shutdown的时候,文件系统执行shutdown较慢的缘故。
        出现文件不存在,是说:在程序执行的哪一点,hsqldb还没有执行完shutdown命令,也就是说在文件系统中还根本没有这个文件;
        有其他的进程正在访问,也就是说,程序在执行的哪一点,还有HSQLDB的Connection还连接在数据库上,可见数据库要执行shutdown命令还是相当耗时的;
        另外,客户端无法加载Classes,因为我们的applet需要访问的classes都是通过jar文件传输过去的,出现这个问题,明显是由于系统I/O比较异常,系统无法在要求的时间加载到APPLET所需要的JAR包。
      
       可见,程序确实还不是很Strong。我以前还从来没有遇到这个问题。

        判定到这个问题之后,我肯定这个错误在于客户端的磁盘I/O系统。因此,我调查了一些客户端测试的环境。原来,客户端的机器一直都在使用emule和bt软件,这两个软件对系统磁盘I/O的性能影响还是比较大。将客户端的bt和emule关掉之后,发现程序正常:)

       可见,磁盘的I/O也能够让程序运行不正确,不要以为调用了statment.execute("shutdown"); 文件系统中立马就会有hsqldb的.script文件了:)这个是不成立的。另外,我们在调用statment.execute("shutdown")之后,系统并不会等到文件操作完成,该语句才返回。从这个道理来讲,程序和文件系统不是同步的,而是消息的。程序给文件系统发送命令,文件系统响应,返回。但是,文件真正存储到磁盘中,可不是程序可以预知的。

       为了增强程序的健壮性,只好在程序执行的下一点,先Thread.sleep(1000),然后去判断文件是否存在。如果文件不存在,那么报错。

       但是,有多少机会,文件I/O操作是在1s之内完成的呢?只要客户端系统不使用耗I/O的程序,应该都是没有问题的。如果使用了,那多半还是会有问题。不过,sleep 1s也就算了。
分享到:
评论
8 楼 歆渊 2007-04-15  
hiwzg 写道
不是很清楚你说的嵌入模式是什么,看了SCRIPT的说明,不知道是否会,感觉也不太会等待执行完了才返回。




歆渊 写道
不知道用嵌入模式运行, 不用SHUTDOWN, 而是用 SCRIPT TO 如何. 感觉SCRIPT TO 也许会等执行完了再返回.


好像是叫 In-Memory 模式还是什么来的, 就是运行时不写任何磁盘文件, 进程关闭数据就没了那种.
这样就在原本 SHUTDOWN 的地方 SCRIPT 一下, 下次启动的时候再从保存的文件恢复. 不过我也没这么做过, 只是一个想法.
7 楼 hiwzg 2007-04-14  
不是很清楚你说的嵌入模式是什么,看了SCRIPT的说明,不知道是否会,感觉也不太会等待执行完了才返回。




歆渊 写道
不知道用嵌入模式运行, 不用SHUTDOWN, 而是用 SCRIPT TO 如何. 感觉SCRIPT TO 也许会等执行完了再返回.
6 楼 歆渊 2007-04-13  
不知道用嵌入模式运行, 不用SHUTDOWN, 而是用 SCRIPT TO 如何. 感觉SCRIPT TO 也许会等执行完了再返回.
5 楼 hiwzg 2007-04-13  
我也正愁苦呢,没有很好的解决方案。我上面的给出的方法只是简单的再等一段时间,万一在这段时间内不完成的话,还是会出现错误。

有没有更好的解决方案?

rainlife 写道
我也奇怪呢,如果是有时间范围,报异常的话,那也应该是SQLException。 看来应该是I/O一直占用着,造成了一些不确定错误。
4 楼 rainlife 2007-04-13  
我也奇怪呢,如果是有时间范围,报异常的话,那也应该是SQLException。 看来应该是I/O一直占用着,造成了一些不确定错误。
3 楼 Godlikeme 2007-04-13  
写I/O 相关 处理等待、超时这种问题比较多。
2 楼 hiwzg 2007-04-13  
这个命令没有时间片吧。不报异常。如果数据库执行命令,肯定会报SQLException。
这里的问题是数据库执行了shutdown命令,但真正shutdown完却发了很长时间。程序不会等到文件系统把文件I/O操作完才返回。

rainlife 写道
引用
该BUG是因为HSQLDB 数据库执行ShutDown命令之后,由于客户端正在运行BT, Emule这样的程序,使得客户端的磁盘一直都处于I/O状态。因此,在程序调用shutdown命令之后,文件系统并没有在非常短的时间内完成文件操作。

这个命令有一个时间片,如果超出这个时间的话,就报异常?
1 楼 rainlife 2007-04-13  
引用
该BUG是因为HSQLDB 数据库执行ShutDown命令之后,由于客户端正在运行BT, Emule这样的程序,使得客户端的磁盘一直都处于I/O状态。因此,在程序调用shutdown命令之后,文件系统并没有在非常短的时间内完成文件操作。

这个命令有一个时间片,如果超出这个时间的话,就报异常?

相关推荐

    操作系统C是进行资源分配的基本单位

    A) 改进文件目录结构以及检索方法 B) 提高磁盘I/O 速度 C) 提高 CPU的利用率 D) 选择好的文件储存结构 1、下列那种状态不是进程必须用的基本状态( A )。 A) 挂起状态 B) 就绪状态 C) 执行状态 D) 阻塞状态 2、能...

    DISKGEN命令详解

    建议在调整前运行WINDOWS系统的“磁盘扫描程序”检查硬盘错误并纠正,并做好重要文件的备份。不可以在调整过程中强行中断或关机(重新启动)。否则,被调整分区上的数据将会全部丢失。 不过,笔者发现,Disk Genius...

    MySQL_错误代码以及出错信息对照大全

    0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。 0131 试图将文件指针移至文件开头之前。 0132 无法在指定的设备或文件中设置文件指针。 0133 对于包含已连接驱动器的驱动器,不能使用 JOIN ...

    【精品】计算机操作系统作业4(含答案).doc

    对I/O队列中的服务请求进行干预处理有利于提高C-LOOK算法的性能 D.C-SCAN算法适用于磁盘负载较小的系统 12.位示图用于______。 A. 页面置换 B. 磁盘空间管理 C. 文件目录查找 D. 磁盘驱动调度 13. 在下列有关...

    windows 程序设计

    图形接口不仅在外观上更有吸引力,而且还能够让使用者传递高层次的信息。 Windows应用程序不能直接存取屏幕和打印机等图形显示设备硬件。相反,Windows提供一种图形程序语言(称作图形设备接口,或者GDI),使显示...

    下面是一系列蓝屏中可能出现的代码

    34 0x00000022 磁盘驱动器的磁盘不正确。 请将 %2 (Volume Serial Number: %3) 插入磁盘机%1。 36 0x00000024 开启的分享档案数量太多。 38 0x00000026 到达档案结尾。 39 0x00000027 磁盘已满。 50 0x00000032 ...

    二级c未来教育题库破解及资源

    只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。 1.文件类型指针(FILE类型指针)。 2.文件的打开与关闭(fopen,fclose)。 3.文件的读写(fputc,fgetc,...

    09年二级C语言考试大纲

    只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。 1.文件类型指针(FILE类型指针)。 2.文件的打开与关闭(fopen,fclose)。 3.文件的读写(fputc,fgetc,...

    内蒙古工业大学 计算机网络试题A(含答案)

    一、选择题 1、在现代操作系统中引入了(D ),从而使并发和共享成为可能。 A.单道程序 B. 磁盘 C. 对象 D....程序I/O方式 B.中断驱动I/O控制方式 C.直接存储器访问DMA控制方式 D.I/O通道控制方式

    C 程序指导书及实践指导

    (5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了. (6)、把原程序中的while结构改写成do—while结构,再分别按上述...

    windows蓝屏错误代码

    34 0×00000022 磁盘驱动器的磁盘不正确。 请将 %2 (Volume Serial Number: %3) 插入磁盘机%1。 36 0×00000024 开启的分享档案数量太多。 38 0×00000026 到达档案结尾。 39 0×00000027 磁盘已满。 50 0×00000032...

    服务器巡检报告.doc

    系统硬件诊断: 系统板、CPU、内存、I/O板: 正常 不正常 网卡、SCSI卡、SSA卡: 正常 不正常 系统其他扩展卡: ¬ 正常 不正常 硬盘、磁盘阵列: ¬ 正常 不正常 磁带机、磁带库: ¬ 正常 不正常 15.查系统参数...

    《计算机应用基础》第四章课后答案.doc.doc

    题目1 软件的特征不包括 软件是逻辑产品 软件产品的销伟方式不同正确 软件是定制生产 软件的开发成本主要是人工成本 正确答案是:软件产品的销伟方式不同 题目2 ()不正确的程序描述 程序是求解问题逻辑步骤的描述...

    操作系统讨论课及课程ppt.rar

    解:I正确:增大内存可使每个程序得到更多的页面,能减少缺页率,因而减少换入换出过程,可提高CPU的利用率。 II错误:增大磁盘交换区的容量。因为系统实际已处于频繁的换入换出过程中,不是因为磁盘交换区容量不够...

    《计算机应用基础》练习题1.pdf

    A、运算器 B、软件 C、I/O 设备 D、控制器 正确答案: B 6.计算机软件分为系统软件和应用软件两大类,下列各项 中不属于系统软件的是( )。 A、操作系统 B、办公软件 C、数据库管理系统 D、系统支持和服务程序 正确...

    Windows 系统错误代码简单分析

     0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。  0131 试图将文件指针移至文件开头之前。  0132 无法在指定的设备或文件中设置文件指针。  0133 对于包含已连接驱动器的驱动器,不能...

    《计算机操作系统》期末复习指导

    基于程序在运行时不需要一开始都装入内存(局部性原理),更不应该把最近较长一段时间内不用的程序装入内存。 (2)页表的作用是将逻辑页号转换为物理块号。 (3)页面淘汰算法 先进先出算法(FIFO)...

    北交《计算机组成原理》在线作业一-0001.docx

    C:程序的无条件转移 D:程序的条件转移或无条件转移 答案:D 在I/O设备、数据通道、时钟和软件这四项中,可能成为中断源的是________。 A:I/O设备 B:I/O设备和数据通道 C:I/O设备、数据通道和时钟 D:I/O设备、数据...

    操作系统期末试卷与答案

    P1: 10秒CPU操作、20秒I/O操作(设备1)、5秒CPU操作、10秒I/O操作(设备2)、5秒CPU操作、结束 P1: 15秒I/O操作(设备1)、10秒CPU操作、15秒I/O操作(设备2)、10秒CPU操作、结束 (1) 如果进程P1和P2顺序执行,...

Global site tag (gtag.js) - Google Analytics