近些年来,我国也充分认识到国产基础软件的重要性。在国家的大力倡导下,很多IT企业开始投入到基础软件的研发当中,原有的国产基础软件厂商也得到了国家在资金和项目上的政策倾斜。应用系统与国产基础软件的集成理论上是可行的,但是,在高并发量、高访问数据量情况下,基于国产基础软件应用系统的性能能否满足需求尚未得到验证。
纵观中国软件的发展,不尽如人意的时代已经成为过去,经历了20多年的专注发展,现在成功站到了台前,三大基础软件在各自领域都向着良好的态势前进发展。尤其近两年国家重视支持国产软件的发展,一系列国家政策的发布以及"核高基"专项的出台,通过政策的引导,完善了国产软件的产业链,为国产基础软件的发展创造了一个良好的生态环境。使更多的用户了解了国产软件,增强了对国产软件的信心,同时也进一步推动了国产软件的改进。现在以基于国产基础软件的医疗信息系统为例,介绍如何测试系统在承受高并发量、高访问数据量情况下的性能,并对影响系统性能的主要因素进行分析,提出了系统的性能优化方案。
1 性能测试
1.1 性能测试方法
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的服务级别的测试。
系统的性能测试方法较多,按照测试目的分类,可以分为负载测试、压力测试、配置测试、并发测试、可靠性测试等。其中,负载测试是通过在被测系统上不断增加负载压力,获得系统在不同负载下的性能表现。压力测试主要测试系统资源在饱和状态时,应用系统能够提供的服务级别。
1.2 性能指标
性能指标是描述系统性能直接的数据,提供了性能度量的标准。性能指标描述如下:
(1)并发用户数,在特定时间内,同时进行会话的用户数。
(2)响应时间,从请求的发出到客户端收到服务器响应所经历的时间延迟。
(3)吞吐量,在单位时间内系统处理客户请求的数量。
(4)资源利用率,系统各种资源的使用状况,比如服务器的CPU、内存和网络带宽等。
2 性能测试实施
2.1 系统分析
医疗信息系统构建于国产基础软件的政务信息化领域平台体系,采用J2EE架构,J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。使用JSP、Strut、Hibernate等技术开发,是以国产基础软件为、低成本的公共服务系统原型和解决方案。医疗信息系统体系结构如图1所示。
医疗信息系统主要面向各大医院,对医院的需求调研与系统分析如表1所示。
性能测试需要模拟大量用户的操作行为,需要测试工具的支持来实现用户的行为模拟、负载的生成、数据采集与分析等。测试基于国产基础软件的医疗信息系统的性能能否满足表1所示的需求。
2.2 测试环境
测试时,使用1台PC机作为负载测试机,1台服务器作为应用服务器和数据库服务器。PC机采用100 Mb/s局域网连接服务器。服务器软件组成方案如表2所示。
2.3 录制测试脚本
测试脚本是一组代码,执行时,可以模拟用户操作对服务器产生的请求数据,或是模拟用户执行操作的过程、用户等待行为等。脚本的录制按照以下步骤执行:
(1)使用LoadRunner录制测试从业务使用频繁程度以及负载量的大小选择新建患者资料、患者资料查询、新增日程功能作为三组测试[4].这三组测试脚本模拟的执行过程为系统登录、业务操作和退出系统。
(2)每个操作定义为一个事务,在事务前后加入随机的思考时间。
(3)在事务前设置集合点,保证用户执行操作的并发。
(4)在用户实际操作的过程中,不同用户提交的数据、系统动态生成的会话标志是不一致的。通过参数化来设定差异值的取值范围、迭代方式,实现数据的变量化,而系统的会话标志如session,则需要设置关联来保存。
2.4 设计测试场景
在性能测试中,常见的错误观点是只设置单一的场景。场景的设计是至关重要的,只有设计的测试场景真实地反映用户的实际场景,性能测试的结果才可靠。
场景的设计需要考虑到系统运行时,不同操作对系统形成的负载差异,需要确定典型的应用场景下不同操作用户的比例[5].医疗信息系统日常执行新建患者资料、查询患者资料、新建日程的比例分别为25%、60%、15%.
在创建的场景中载入已录制的三组测试脚本,并设置执行比例。编辑场景中的计划生产器,设置虚拟用户以一定的间隔时间按比例递增,逐步启动与服务器建立连接。
2.5 分析测试结果
在性能测试的过程中,LoadRunner会收集到大量的测试数据,包括每个性能指标,如事务的错误、警告和通知信息等。并发用户数为200的事务响应时间如表3所示。
在测试过程中出现的问题:(1)大量用户并发时,服务器CPU、内存的资源利用率却很低;(2)事务执行成功率低、成功事务的平均响应时间长,很多事务因为连接超时而失败;(3)出现内存泄露;(4)Tongweb控制台显示连接数据库时出现网络通信异常。
3 系统优化
3.1 系统优化框架
根据Mercury公司的,系统的性能问题由许多因素构成。系统结构、代码的优化程度、网络环境、数据库服务器、应用服务器都会对系统的性能表现造成影响。但是,影响系统优化主要因素是网络环境、应用程序、应用服务器和数据库服务器[6].考虑到这些因素之间的相互依赖关系,采用从高层到低层的优化方法。该方法的特点是先调优高层的环境,然后调优较低层的环境,符合高层实现依赖于低层实现的一般规律。优化层次如图2所示。
(1)网络环境优化
网络是影响系统性能的重要因素之一,其影响主要反映在事务的响应时间与吞吐量上。在测试过程中,如果吞吐量没有随并发用户增多而增大,且事务响应时间比较长时,可以考虑对网络进行优化,改善网络的带宽。
(2)应用程序优化
应用程序优化针对数据访问层,其优化措施主要有以下几方面:(1)优化SQL语句;(2)尽量引入连接池机制,减少频繁打开、关闭数据库连接的操作,控制当前激活的数据库连接总数,防止系统过载;(3)引入缓存机制,以减少磁盘I/O的次数。
(3)应用服务器优化
应用服务器优化集中在连接限制数、内存配置。在大量并发的情况下,应用服务器承受很大的负载压力,过多地连接会很快消耗掉大量系统资源,过低的连接限制会增大连接时延,延长事务响应时间。优化时根据系统资源合理设置应用服务器连接限制数、内存,避免内存泄露现象出现,尽量减少响应时间。
(4)数据库系统优化
数据库系统优化主要是配置数据缓存区大小、并发会话数,为数据库建立合理的索引。设置较大数据缓存区,可以减少数据交换次数,降低系统资源消耗。为大数据量、访问频繁的数据库表建立合理的索引,能够消除对表的顺序存储,从而提高系统的检索性能。
3.2 医疗信息系统的优化方案
本文的性能测试是在局域网中进行,因此可以排除网络带宽对系统性能的影响。通过分析性能测试结果,结合系统优化框架,医疗信息系统的优化措施如下:
(1)应用系统的数据库访问层采用了数据库持久化技术Hibernate.编辑应用程序的配置文件hibernate.cfg.xml,引入第三方的连接池c3p0,设置连接池的连接数为100;在Hibernate中使用二级缓存,设置Hibernate的加载特征为延迟加载。
(2)在应用服务器方面,调整Tongweb的JVM堆栈和内存的值、连接人数。编辑TongWeb4.0/bin/tongserver.sh文件,把JAVA_ARGS="-Djmx.invoke.getters=true"修改为JAVA_ARGS="-Xms256m-XmX750m",调整JVM堆栈和内存的值为750 M,增大Tongweb的JVM虚拟堆栈和内存值后,不再出现内存泄露现象;编辑tongweb4.0/conf/tongweb.xml中socket-back-log由50调为200,调整Tongweb的减少需要等待连接数。
(3)在数据库系统方面,通过对数据表的检查,发现数据库表没有建立索引,为访问频繁的表添加了索引。DM数据库的参数调整如表4所示。
数据库作出这样的修改主要是大量并发时,由于数据量大,一般将数据缓冲区设为物理内存的80%左右;数据库的会话数需要大于应用程序所设置的连接池;CPU仍存在可用资源,可提高工作线程数,减少响应时间。优化后,并发用户数为200的事务响应时间如表5所示。
通过对表3、表5结果对比可以看出,经过系统优化后,大幅提升了系统的性能。系统性能也达到了医疗信息系统的性能总体需求,确保了基于国产基础软件的医疗信息系统能够满足医疗工作及日常办公需求。
本文介绍了基于国产基础软件的医疗信息系统的性能测试方法和过程,并对影响系统性能的主要因素进行了分析,提出了一个系统的性能优化方案。测试结果表明,本文提出的优化方案可以明显改进基于国产基础软件的医疗信息系统的性能,能够满足应用的需求,可以应用于我国的医疗信息化建设中。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。