信息化 频道

新华社OA系统运行维护的亲身体会

【IT168 信息化】


一、 引言

    随着信息化和网络技术的不断发展,新华社基于内部园区网建设了B/S架构的办公信息化管理系统。经过多年建设的积累,系统应用也不断深入到工作的各个领域,越来越发挥着它的作用。同时,用户对系统功能及性能也提出了越来越高的要求。保障系统稳定运行、功能可靠、性能稳定成了系统管理员的重要职责之一。 

    要保障系统的运行质量,一方面在于软件开发设计是否有着高质量的控制,另一方面要看后期系统的不断深入应用、测试及改进调优过程。尤其作为应用系统,软件开发过程往往无法全面发现问题,必须通过不断测试、改进及推广应用才能逐渐发现。因此,系统测试及调优对于保障系统运行质量起着举足轻重的作用。本文结合新华社办公信息化系统运维中进行的性能测试及调优实践进行论述。

二、 实践背景 

    新华社的办公信息化系统主要实现了社内信息发布、内部邮件、人事、资产管理等方面的信息化管理功能。目前使用范围已覆盖全国,成为新华社内网中用户数及范围最为广泛的B/S架构网络应用系统。随着系统的不断发展及推广应用中,系统逐渐出现如下问题: 

    1、 在上下午工作高峰期,大量用户进行并发系统访问时,系统响应缓慢,最终导致系统服务异常; 
    2、 部分业务发生小的调整,经过软件适应性修改后,系统出现运行不稳定的情况; 
    3、 为解决性能问题曾进行服务器硬件资源的扩充,但没有达到预期的效果; 
    4、 无法预计系统具体可承受用户容量; 

    针对上述问题,为保障系统的运行质量,我们总结出一套采用软件测试技术进行系统诊断,同时,根据测试的结果进行系统调优的系统持续改进的思路。

三、 系统调优测试

    软件测试是程序的一种执行过程,目的是尽可能发现并改正被测软件中的错误,提高软件的可靠性及软件质量。它是软件生命周期中的一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。 

    首先要确定明确的测试目的并制定合理的测试计划。 

    系统测试应根据实际的需求明确测试目的,并根据测试的计划开展测试过程。根据实际需求,我社OA系统属在线生产系统,测试的目的是通过测试以验证系统的功能和性能是否满足需求,进行系统的性能分析,改进系统功能,提高系统软件质量。 

    有了明确的测试目的,需要制定合理的测试计划并作为整个测试工作的赖以展开的基础。测试计划描述着测试的目标、范围、方法、环境和评审标准。完善的测试计划将有效指导着测试工作的有序进行,并有助于测试组及其它相关人员对测试过程的理解及结果的分析。 

    我们在制定测试计划中主要规定了以下内容:

1) 描述了测试需求 

    这一部分主要进行详细的测试需求分析,包括测试背景情况说明、项目概要、测试目的、测试的要点等,经过测试需求的分析进行测试功能项的进一步细化,并定义具体的测试内容。

2) 确定测试的硬件及软件环境 

    确定测试所需的硬件和软件。在测试过程中,你需要建立实际的工作量模型,即与生产环境相近似的模拟环境。在我社OA系统测试过程中,明确采用以下测试软硬件资源。 

    服务器:两台IBM X345 PC服务器采用HA双机热备提供数据库、两台IBM X345 PC服务器作为应用服务器、一台IBM X345 PC服务器作为Apache HTTP 服务器。 

    客户机:2台Windows 2000计算机。 

    数据库:Oracke 9i 2.0.1 

    应用服务器:Websphere 5.0.2 并采用其ND负载均衡机制。 

    其它软件:OA系统软件

3) 测试标准与评审焦点 

    主要定义了在测试过程中的通过与不通过标准。在测试过程中,要评价该软件性能是否达到要求,功能是否符合需求需要确定测试通过与不通过的标准。在测试计划阶段制定了此标准,就可以不受测试过程影响进行更加客观地对照预期值进行结果评估与分析。 

    通过标准一般涉及可接受的响应范围、非常好的预期值等。在我社OA系统测试中具体细化为功能需求点符合度、功能通过与否、预期响应时间、非常好的访应时间、系统访问并发预期通过数、并发访问非常好的通过数、支持用户数等。

4) 测试方法 

    在测试计划中,同时需要进一步确定主要测试方法。软件测试从不同角度及不同阶段可以分为:静态测试与动态测试、白盒测试和黑盒测试、人工测试和自动化测试。在我社OA系统测试过程中,针对系统软件功能点测试,常常采用白盒测试与黑盒测试相结合的方法进行;针对性能测试,我们往往采用自动化的测试工具,并加以基准测试方法进行测试过程与结果的分析。

5) 测试策略 

    在整个测试过程中,测试策略的制定直接关系着测试的成功与否。测试策略包括负荷策略、业务策略、监控策略等。在实际应用系统的测试过程中,测试策略是这些具体测试策略的不同组合,而制定策略的基本依据是用户的需求和测试目标。 

    根据需求设计测试用例。 

    测试用例是软件测试的核心,是对软件产品测试任务的具体描述,体现着测试方案、方法和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等。针对不同的测试目的及不同的软件类别,测试用例也是不同的。 

    测试用例可按功能或测试事件进行设置。在设计测试用例中常常可以采用等价类划分法、边界值分析法、错误推测法、因果图法、覆盖法等基本方法。视软件的不同性质及所处的不同阶段而采用不同的方法。如何采用合适的基本方法来设计可行的测试用例一方面要根据实际的测试需求,另一方面则需靠测试设计人员的经验。 

    在我社OA系统测试用例设计过程中,针对不同的开发阶段,我们采用相应的方法进行了测试用例的设计。而针对我社目前在系统生产运行阶段的性能测试,我们主要采用错误推测法为基本设计方法。由于条件的限制,在进行性能测试中不可能对所有的功能点都进行性能测试。不同的功能点对性能的影响差别较大。在测试中首先应对性能需求进行分析,掌握系统对资源的不同需求。首先我们对系统进行了初步分析,针对目前遇到的问题提出如下猜测: 

    1、 进行系统登录后将首先展示首页,因此并发效率不高可能与首页展示程序性能有关; 
    2、 应用服务器及数据库服务器的参数配置将影响系统的并发执行效率; 
    3、 内部邮件系统收件展示、上载功能、信息阅读等是目前应用较为广泛的功能,对系统性能有较大的影响; 
    4、 应用程序是否合理调度数据库连接并及时关闭直接关系到数据库连接池的使用效率; 

    基于以上的初步分析并结合测试的目的,我们主要设计了以下测试用例: 

    测试目标:评估系统能力、识别系统瓶颈、系统调优、检测软件存在的问题、验证系统稳定性。 

    测试环境:同测试计划所述,部分测试采用生产环境。 

    测试方法:黑盒测试、白盒测试、自动化测试。

    全面分析得到的测试结果。 

    有了详细的测试用例,接下来的工作便是进行测试用例的测试实施工作。在我们的测试过程中,测试日志的记录是非常重要的,测试日志一方面作为测试过程中测试质量监控的一种有效手段,同时也是后测试过程中知识积累的来源与系统调优分析的依据。由于测试过程中产生的数据较多,包括服务器临控文件、客户端临控文件、测试工具产生的结果报告等,涉及的文件种类多,格式也不相同。因此,建议在测试计划阶段做好相应的结果分析规范,采用统一的版本控制方法。这样,得到的测试数据及结果报告才可进行有效的分析与管理。 

    将测试的结果进行分析,性能测试的结果一般包括响应时间、最大/最小并发数、失败次数、正常连续运行的最长/短时间、并发数与失败的关系等。 

    根据我们所设计的测试用例实施,初步得到以下结果: 

    1、 目前在Websphere应用服务器中所部署的roeee、infopub、oabase三个应用的数据库连接参数分别为100、80、80。在初次使用loadrunner软件模拟登录进行并发测试中未达到100的并发用户数,而在测试过程中,通过监控数据库服务器及应用器的CPU及内存指标未超过50%的负载,数据库会话数未达到所设置最大会话数的一半。因此可初步判断数据库会话没有得到很好的利用,可进一步对这三个参数加以调优。 
    2、 针对首页展示功能中通过loadrunner软件模拟并发测试及耐久测试,并进行数据库会话数监控,会话资源持续出现active状态。由于数据库会话的活动状态易产生数据库资源的抢占,因此应核查程序以提高数据库资源的利用率。 
    3、 邮件列表展示、人事信息首页在并发40人测试时,平均响应时间为9秒,需进一步改进程序,提高效率。

四、 根据测试结果的分析并进行系统调优

    有了测试的结果及分析情况,我们需要对系统可能存在的问题加以归类及分析。这时,相关的开发人员、数据库管理员、系统管理员等就需要根据测试分析的意见共同分析确定更细节的内容。针对我们的测试分析结果大致把系统调优分为以下几个方面进行。

1、 调整应用服务器参数 

    在对应用服务器进行性能调整前,首先应了解应用服务器的体系结构及应用部署结构。我社采用Websphere 5.0.2作为应用中间件,部署了集成平台、信息发布、基本OA应用、资产管理等多个应用。我们可运行时性能顾问程序和 Tivoli 性能查看器中的性能顾问程序,结合它的建议进行更改配置以优化WebSphere Application Server 上的性能。主要调整的参数包括WAS数据库连接池最大连接数、各个应用的数据库连接池最大连接数、应用程序服务器中Web 容器的最大内存会话数、Web容器的最大线程池大小。

2、 数据库优化

    数据库优化的讨论可以说是一个永恒的主题。为了改善Oracle数据库的性能,首先需让数据库有一个良好的配置,包括硬件配置、操作系统配置、Oracle参数配置、数据结构组织,然后再考虑具体语句等方面的调整与优化。

    根据我社的系统正于生产阶段的具体情况,在配置方面主要采取参数调优及数据结构组织等操作进行优化。根据测试分析报告结果及系统实时监控情况,再结合statspack工具进行性能瓶颈分析,我们进行了以下参数及结构的调整。 

    1) 内存分配在很大程度上决定着oracle的响应性能。我社oracle数据库总的内存大小为8G,根据数据库管理员的分析建议,将SGA适当调整为1.6G,并进行共享池、缓冲区高速缓存、大型池及java池进行相应的大小分配。 
    2) 根据实时会话的峰值连接情况及操作系统资源使用情况,增加数据库最大连接会话数至700,修改了事务处理参数至850及其它初始化参数。例如我们将sort_area_size由默认32K提升为2M,log_buffer由32K提至2M,optimizer_index_caching由默认0提至90,optimizer_index_cost_adj由默认100设置为50等。 
    3) 分析表和索引,更改优化模式。针对我社应用表查询操作较多的应用特点,一方面建立表关键字索引,另一方面进行表及索引的分析,将optimizer_mode值调整为first_rows,以尽快返回查询结果。 
    4) 针对具体应用中出现百万条记录以上的大数据表进行了时间分区划分,降低单表查询时间。在表设计,将blob字段存储于单独的表中,可减少表行迁移的开销。 

    随应用的深入,系统性能也是随着应用情况发生变化。因此,以上的参数调优及结构调整过程也需进行阶段性的调整及分析。

3、 核查系统程序中数据库连接的关闭与连接代码,核查SQL语句执行效率 

    结合数据库参数及结构的调优,程序代码中数据库连接关闭的处理及SQL语句的执行效率在很大程序上也决定着应用系统的性能。经过测试过程中我们发现数据库会话数已大于在系统高峰期出现的最大连接数,可仍然存在出现多个active状态的会话,在问题严重还将产生用户类型锁。因此我们将每个应用程序进行了数据库连接代码及关闭代码的核查,纠正了部分漏关数据库连接的程序性错误。同时,我们尽量减少数据库会话连接的时间及次数。虽然此部分工作需付出较大工作量,经改进后系统的测试情况分析,有了较明显的改进效果。 

    Oracle SQL调整是Oracle调优中最重要的领域之一,也许您会发现只需要通过一些简单的SQL调优就可以大幅度提升SQL语句的性能。Oracle SQL是个复杂的过程,首先我们可利用oracle 提供的Diagnostic pack 中top SQL 及Tuning pack中SQL Analyze 的SQL 分析工具判断哪些语句执行效率较低及存在改进余地并进行调优。在调优过程中我们总结出以下方法: 

    1) 尽可能消除不必要的大表搜索是减少数据库不必要的I/O的有效方法。例如多次循环对表的查询可更改为采用一次取得结果集再进行对象的逻辑循环处理,便大大减少SQL的执行。 
    2) 合理使用join操作,减少表间级联查询。在有的查询中可采用nested loop join快一些,有些则是hash join快一些,另外一些则是sort_merge join更快。 
    3) 合理利用索引并确保最优的索引使用对于改善查询的速度将起着很重要的作用。 
    4) 在某些SQL语句中,排序方法也是改进执行效率的重要因素。 
    5) 对最经常使用并且记录量较小的数据表查询可采用数据库cache方法或内存数据库提高效率,例如平台单点登录时的用户信息权限表。

4、 改进部分主要影响性能的程序执行效率。 

    结合数据库的改进与调优,根据测试分析的结果。在我社的应用系统中,有10%的功能却占据着主要系统应用,例如信息首页展示、信息上载、邮件收件展示等。针对此部分功能,我们进行了程序逻辑的改进,优化数据库SQL执行效率,减少大对象的操作,增强对象的持久性及复用性。例如在首页展示程序中,我们一方面减少取得的表元素对象,另一方面将原来写在jsp页面中的业务逻辑移至servlet,并优化业务逻辑处理过程,提升了执行效率。经并发测试,由原有的平均响应时间6秒改进为2秒。

5、 根据测试的结果进行系统负载预估与评价。 

    准确的对系统进行负载评估也是进行系统测试及调优的主要目标,同时也是对系统稳定运行评估的重要依据。经过压力测试的模拟过程,得到大量的模拟数据将作为系统负载评估的主要依据。经过一系列的调优过程,系统所能承受的负载也将发生一定的变化。系统负载评估可通过循环的系统测试及生产系统的实时监测进行。

五、 总结 

    软件测试及系统调优是一门技术,是一个从实践至理论再到实践的循环反复的过程。不同的环境、不同的业务模型、不同的对象,采用的测试方法与系统改进手段也都不一致。然后,在实际系统性能调优过程中还是可能会遇到这样那样的问题,甚至会出现经过系统调整导致性能下降的情况。只有通过大量的测试作为调优的补充才可尽量蔽免这样情况的发生。系统调优不是一次性的伟大工程,尤其系统性能参数调优往往需要进行多次测试与反复试验。因此,测试作为调优的依据,调优是测试的动力,测试与调优是的并进的过程,互为补充。 

    结合我社的实践经验,软件测试及系统调优是个持续的过程。根据测试结果的分析,结合有效的调优手段是保证系统不断趋于良性运行的重要手段。以上是我社系统测试及调优的实践总结,供大家交流,互相促进。

0
相关文章