APP下载

基于日志来动态调整的服务器性能优化的研究

2018-11-22何平

微型电脑应用 2018年11期
关键词:日志结构化调整

何平

(襄阳职业技术学院 电子信息工程学院,襄阳 441050)

0 引言

在目前大多数的应用开发过程中,人们往往侧重于实现系统的功能而忽略其性能问题。J2EE多层应用框架在提高软件的重用性和分解问题的复杂性的同时,也使得代码庞大,层与层之间的控制关系复杂,在性能、负载、效率、数据的一致性与组件的可扩充性上总是存在一定的矛盾。这种不规范的开发模式和开发过程是产生J2EE应用系统性能问题的主要因素。系统开发初期,对架构模式的不合理使用,很多系统在设计时就已经产生了性能盲区,这些问题应该在开发周期中尽早解决,但是往往得不到开发人员的重视。系统开发过程中,由于开发人员自身知识的局限,对各种影响性能的因素考虑不足,例如:网络连接、数据库、应用服务器部署及代码优化编写等。系统开发完成后,缺乏全面的性能测试及压力测试,不能准确而快速的查找性能瓶颈并及时解决,这些都严重影响了J2EE系统的性能。

1 系统性能优化的解决方案

随着软件系统的功能越来越多,应用服务器的CPU使用率、内存占用率、吞吐量、响应时间等问题,都无疑是系统性能测定的重要指标。因此针对ODPS软件系统架构中的支持多客户端同时访问数据库而导致应用服务器响应时间过长甚至死机的问题,提出采用数据库连接池技术。解决方案所涉及的工作流程示意图,如图1所示。

图1 系统功能结构

1.1 基于连接池技术的工作流程

客户端用户提出请求,由Web层服务器响应,通过过滤器过滤,请求分派管理器的分派,由XML视图绑定器进行绑定,发送给应用服务器业务逻辑管理者(BO Factory),BO Factory采用业务分派机制来指派处理文档信息的业务对象(BO),再从数据库连接池中取出连接,实现对相应资源文件的访问。

1.2 文件访问服务的工作流程

(1)Web服务器通过调用应用服务器的逻辑,得到结构化信息,结构化信息中记录了允许访问的非结构化信息的访问路径信息;

(2)Web服务器将这些允许访问的非结构化信息的访问路径信息缓存起来,然后把结构化信息交给客户层处理;

(3)客户层拿到结构化信息之后,当需要处理非结构化信息时,把Session信息及非结构化信息的访问路径信息提交到文件访问服务;

(4)文件访问服务将这些信息传递给Web服务器进行访问权限校验,并将校验信息返回给文件访问服务;

(5)若校验成功,文件访问服务到文件服务或者数据库服务器中取得非结构化信息,由文件访问服务包装成Http协议信息传递给客户层用户,反之亦然。

2 连接池的实现

2.1 问题的提出

对数据库连接资源的管理是提高应用系统性能的有效手段,而连接池技术作为一种成熟的连接管理方式,提供了一套连接的建立、配置、分配策略。虽然数据库连接池技术己经得到了广泛的使用,其技术也比较成熟,但无论是应用服务器提供的连接池机制,还是现有连接池技术的设计方式,都存在这个问题:连接池的静态的参数配置策略。在参数配置表设置连接池参数值,这些参数设置好后就不能再修改,初始的参数配置基本上决定了连接池的性能,所以需要经过多次的实际测试,确定连接池初始配置参数。不能根据应用需求的变化而适时地调整参数值,有时候访问用户很少,但还有大量未被分配而处于空闲状态的连接,大大的浪费了服务器的内存和CPU资源。

针对以上分析,论文采用动态调整参数的方法来改进连接池。其基本思路是:根据用户的需求来配置连接池参数,采用基于XML格式的参数配置表;调整连接池时将信息写入XML格式的日志文件,根据设置的运行日志来动态调整连接池配置参数。

2.2 连接池的相关算法

数据库连接池主要由两部分组成:连接池管理和连接管理。连接池管理负责整个连接池的资源管理及调度策略管理,根据日志文件动态调整连接池配置参数,这是连接池技术的核心;连接管理实现连接复用,提高资源利用率,连接复用的思想是对引用次数较少的连接进行复用。其组成结构,如图2所示。

图2 数据库连接池的组成结构

2.3 动态调整参数

连接池首次启动是根据用户配置的初始参数来实现的,这些参数可以通过多次实际测试并根据实际项目的需求来确定。利用Java中的数据结构对象(如:Vector,Hashtable,Stack等)来构建连接池,通过JDOM读取连接池的XML配置文件,完成驱动程序注册和连接池初始化。

2.1 XML配置文件

连接池改进的思想就是通过动态调整配置参数来实现的,首先必须配置文件CoonPoolConfig. XML的格式如下:

<数据库连接池>

<属性>

<连接>

<身份认证><身份认证>

2.2 问题分析

如何保证连接池快速有效的运行,满足不同时段请求的需要,必须对连接池进行动态调整,连接池的调整发生的情况可能有:调整周期到,这是连接池调整的例行工作;有新用户请求,而缓存没有空余资源,但有可剥夺连接且新请求的优先级高于此可被剥夺连接的优先级。

由于不同时段的访问量决定了对数据的存取呈曲线变化,如图4所示。

波峰时说明用户访问量较大,为了减少资源浪费,这就要求对连接池的容量进行动态的放大;而波谷时说明用户访问量较小,则有必要对连接池容量进行适当的缩小,并回收可用的资源,淘汰那些不再使用或者是最不可能在将来使用的资源。

图4 访问量模型图

调整的条件(maxConn表示最大连接数;ConnTi表示在时间Ti时的访问量;minConn表示最小连接数):

当maxConn < ConnTi< minConn时,访问量处于正常状态,不需要调整;

当ConnTi< minConn时,需要对连接池容量进行收缩处理;

或者ConnTi> maxConn时,需要对连接池进行适当的放大处理;

用Δc表示连接池容量收缩、放大的幅度,以放大处理为例:如果Δc过大,则会造成系统资源浪费;如果幅度过小,则满足不了访问请求,需要频繁的调整连接池容量。因此,如何合适的确定Δc的值,是动态调整的关键。

连接池初始参数的确定需要进行实际应用的模拟,进而来选定参数值。本系统根据实际项目需求,采用压力测试工具LoadRunner来进行实际应用的模拟,经过多次测试,得出有关连接数的一系列数值,包括最大连接数、最小连接数等,通过求平均值得出平均最大连接数Avg(maxConn)和平均最小连接数Avg(minConn),作为连接池的初始配置参数,如图5所示。

图5 连接数分析图

假如Ti时刻为连接数最大峰值ConnTi,可以取式(1)。

Δc= ConnTi-Avg(maxConn)

(1)

Tj时刻有连接数最小值ConnTj,可以取式(2)。

Δc=Avg(minConn)-ConnTj

(2)

确定了Δc的取值,即确定了连接池调整的幅度,可以根据实际情况对连接池进行动态调整。

2.3 对最大连接数maxConn和最小连接数minConn的调整

(1)对连接池进行放大处理

当用户访问量过大时,即当ConnTi> maxConn时,需要对连接池容量进行适当的放大处理,对原有配置参数最大连接数maxConn进行更新,以maxConn +Δc作为调整后的最大连接数,而minConn仍为原来的值。

(2)对连接池进行缩小处理

当用户访问量减少时,即当ConnTi< minConn时,需要对连接池容量进行收缩处理,对原有配置参数最小连接数maxConn进行更新,以maxConn-Δc作为调整后的最大连接数,而minConn仍为原来的值。

由于连接池的调整是结合应用服务器实现的,所以调整过程中其他线程的操作,都将由应用服务器来实现。

关闭所有连接释放驱动程序时,对连接池进行分析,调整配置参数。配置文件设置连接ID号,ID号是根据连接申请的先后顺序进行配置,而写日志操作记录的是连接的起始时间和终止时间,所以可以遍历连接池中的连接,根据所求连接的终止时间和其余连接的起始时间的关系,求出该连接的并发连接数,进而求出最大并发连接数和最小并发连接数,作为最大连接数和最小连接数写入配置文件,实现配置参数的更新。

连接池的改进主要是通过写入日志的形式来实现动态调整的,连接池将数据访问的情况记录到日志中,在一定时候把日志评价的结果写回到连接池的配置文件中。连接池首次启动是根据用户配置的初始参数来实现的,这些参数可以通过多次实际测试来确定,以后的每次启动时装入上次日志的运行结果来动态调整池参数的值,从而有效的避免了用户盲目的设置连接池参数。

3 总结

本文针对ODPS系统的需求,提出性能优化的解决方案。论文取得的成果体现在通过日志管理获取连接池的配置参数,通过对参数的动态更新,实现了对连接池的动态管理,达到了更加有效的利用系统资源的目的。

猜你喜欢

日志结构化调整
一名老党员的工作日志
夏季午睡越睡越困该如何调整
促进知识结构化的主题式复习初探
改进的非结构化对等网络动态搜索算法
扶贫日志
结构化面试方法在研究生复试中的应用
工位大调整
左顾右盼 瞻前顾后 融会贯通——基于数学结构化的深度学习
雅皮的心情日志
沪指快速回落 调整中可增持白马