人民日报社采编系统oracle服务器性能监控的实现与分析

  • 优秀论文奖
  • 文章作者:中国新闻技术工作者联合会 2021/12/30-04:43 阅读: loading...

    孟庆海 衡永辉 程丽彦

    (人民日报社技术部)

    [摘要] 数据库服务器的性能影响到整个系统的运行效率和用户使用,实现对数据库服务器的监控,有助于运维人员做出有效的优化调整策略。本文详细阐述了在人民日报社采编系统oracle服务器上部署nmon监控工具的过程,并对监控结果进行了重点分析,提出了优化方案,最后对所做工作进行了总结,对下一阶段服务器监控任务提出了展望。[关键词] 数据库 服务器 监控 nmon1. 引言1.1. 人民日报社采编系统数据库服务器概述数据库服务器是企事业单位信息化体系中必不可少的基础设备。人民日报社采编系统数据库服务器是新一代技术支撑体系中的核心设施,运行管理着新一代采编系统的数据库。该服务器采用了服务器虚拟化技术,是在物理服务器上生成的虚拟机,很好地整合了硬件资源,提高了运维效率,降低了成本。在操作系统方面,它采用了目前被业界广泛使用的数据库运行平台——Linux,其系统内核在可靠性和性能方面具有优势,且易于维护。而数据库本身采用了在该领域处于领先地位的oracle产品,具有良好的兼容性、可移植性和高生产率。1.2. 对oracle服务器进行性能监控的意义在实际应用过程中,多种因素都会影响数据库服务器的性能及其稳定性。数据库服务器需要消耗大量系统资源,由于数据库必须能够处理数千个并发用户连接以及海量的数据,需要高级的并行处理能力、大量内存以及超大的I/O带宽和吞吐率。因此,其性能高度依赖于内核管理这些资源的有效程度。上述几个方面的低效率将会导致在内核空间中耗费过多时间,影响到数据库的性能。通过对oracle服务器展开性能监控,我们可以获取影响服务器运行状态和效率的主要性能指标的真实数据及其变化趋势,这些指标通常是理解和改进特定工作负荷性能的重要依据。同时,我们将利用得到的监控数据进行分析判断,推动系统的调整优化工作,使得关键的性能瓶颈得到极大减少或消除。1.3. oracle服务器监控工具的选择为了实现对oracle服务器性能的监控,以便及时发现影响运行的问题,做出优化和维护,我们需要使用合适的监控工具。凭借监控工具,我们可以找到影响系统整体工作负荷的性能瓶颈是哪些因素,并获取具体的统计数据。Nmon(Nigel’s Monitor)是IBM的一款免费软件,用于监控Linux系统与AIX系统的性能。该工具可将服务器系统资源耗用情况收集起来,并输出特定的监控文件。利用Excel分析工具nmon analyser可以进行数据的统计分析。nmon工具获取方便,在服务器上部署的过程也十分简单,并且其占用空间小,运行时消耗资源很少,通常CPU占用率低于百分之二。在统计的信息方面也相当全面,涵盖了与服务器性能相关的各种指标,因此适合用来对oracle服务器进行性能监控。2. nmon在oracle服务器上的部署2.1. nmon在服务器上的安装1.首先通过远程登录软件,用root用户连接到oracle服务器上。使用mkdir命令为nmon工具及相关数据创建一个目录/u01/nmon,如图1所示。

    图1 为nmon创建目录示意图

    2.从IBM官方网站下载nmon工具的安装包,通过ftp将nmon工具安装包上传至oracle服务器的上述目录下,如图2所示。

    图2 上传nmon安装包示意图

    3.在nmon存放目录下,使用rpm命令运行该安装包,如图3所示。

    图3 安装nmon工具示意图

    2.2. 为nmon工具配置监控策略为了让nmon工具每日在服务器上持续运行,收集系统各项资源的变化情况,需要配置该工具的定时监控策略,作为后续系统运维的分析依据。这里设定nmon每天的监控策略为从8:30到次日8:00,每隔60秒对系统资源信息进行一次采样,共监控23.5个小时,并将监控日志文件保存在nmon的安装目录下。1.打开定时任务所在的crontab文件在控制台输入命令:vi /etc/crontab,用vi编辑器打开crontab文件。2.输入定时监控命令,保存退出根据间隔60秒采样一次,共持续23.5小时的需求,计算出每天的采样次数为1410次。在crontab文件中写入命令:30 8 * * * root /usr/bin/nmon -ftm /u01/nmon/ monitoring -s 60 -c 1410,之后保存crontab文件并退出。如图4所示。

    图4 加入定时监控指令示意图

    3.重启crontab服务,查看定时任务

    输入命令:service crond restart,将crontab服务重启,并查看crontab文件,确认配置的监控策略已存在于定时任务中。如图5所示。

    图5 重启crontab服务示意图

    监控策略配置完成并成功运行后,在nmon所在目录下会生成监控信息文件,持续写入资源数据,直至当日所有监控点收集完成。这些监控数据就成为了对服务器进行运维的重要参考。2.3. 监控数据的获取通过每天的定时监控,我们可以得到扩展名为.nmon的监控文件,这些文件记录着系统资源的数据,需要配合nmon分析工具nmon analyser,生成统计图文件,作为监控分析的依据。
    1. 通过FTP工具将nmon目录下生成的监控文件下载到本机,为方便之后对近期的服务器监控数据进行分析,下载近一个月内的监控文件。
    2. 打开nmon分析工具nmonanalyser v313.xls,点击Analyse nmon data按钮,选择要加载的nmon监控文件。
    3. 之后nmon分析工具会生成对系统各项资源的监控统计图文件。将该文件保存为Excel表格,作为服务器性能分析与调优的数据资料。
    3. 监控结果的分析与调优3.1. 主要关注的统计指标由于Oracle服务器的性能与报社采编业务系统的正常运行及工作效率密切相关,因此对该服务器的监控要重点关注其一段时间内的性能参数的变化,具体来说,需要关注系统的CPU利用率、内存使用、磁盘I/O等统计指标。1. 系统性能的主要指标之一是系统对用户的响应速度。因此,CPU资源至关重要,如果出现资源不足,则会导致数据库的查询效率降低。当负载超过服务器CPU的性能之后,数据库的性能就会受到CPU的限制。若服务器的CPU已经处于超负荷运转的状态,那么即使进行调整内存和磁盘I/O的操作,带来的性能改善也只会很有限。2.磁盘通常是整个计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘和CPU的距离最远,并且CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。尽管目前整体的处理器速度、内存大小以及I/O执行速度在不断提高,但I/O操作的吞吐率和延迟性能仍然要比内存访问操作低多个数量级。由于数据库性能十分依赖于高效快速的I/O操作,因此我们也需要对磁盘I/O的表现数据进行分析,以便及时发现问题,做出优化调整。3.由于数据库服务器上的可用内存有限,因此内存的分配方式就相当关键。通过分析内存使用情况的变化,及时调整内存分配,使系统运行状态尽量优化。比如根据空闲内存(memfree)的变化趋势,调整swap区内存的大小。分配过多的swap空间,会导致磁盘空间的浪费;而swap空间不足,又会导致系统出错,例如系统进程发生阻塞、失去响应等等。因此swap区的内存要合理分配,内存这项指标也需重点关注。3.2. CPU使用率为了得到近期Oracle服务器CPU资源的占用情况,并分析现象产生的原因,我们对近一个月的服务器nmon监控统计文件中的CPU使用百分比(CPU_ALL)这项指标进行了对比。根据表现情况的不同,对工作日和周末期间的CPU使用情况分别进行说明。观察获取到的近期工作日的oracle服务器CPU使用率监控图,如下图所示,可以发现,在工作日的每晚22:00左右,用户模式下执行的程序所占用的CPU百分比(user%)都会急剧上升,达到一个峰值。查询表格内记录的具体数值,user%的数值通常在22:00左右达到40%上下,使得CPU总体使用率达到40%以上。由于所有的应用程序都运行在CPU的用户模式下,根据数据推测,22:00左右oracle数据库短暂进入繁忙状态,可能在执行某个任务,导致用户模式下CPU占用率急剧升高。如图6所示。

    图6 工作日CPU使用率示意图

    而对比周末期间的CPU使用率监控图,我们发现,周末的晚上并没有像工作日那样出现CPU使用率急剧上升后又恢复的现象。但在周六、周日的早上6:00左右,CPU使用率会出现一次明显升高,并很快回落。如图7所示。

    图7 周末CPU使用率示意图

    为了得出以上现象产生的原因,我们收集了oracle数据库的alert日志进行分析。在日志中,可以发现周一到周五期间每天的22:00有以下日志信息,如图8所示。

    图8 工作日oracle日志示意图

    而在周六与周日的日志记录中,可以发现在每天早上6:00,存在与上述记录内容相同的日志信息,如图9所示。

    图9 周末oracle日志示意图

    分析该记录内容可知,这是oracle自身的一个SQL分析及优化的任务,属于oracle 11g版本新增的内容,默认安装后会生成此任务,并且运行时间在1分钟左右。每周一到周五,此任务在22:00执行,而周六和周日会在6:00执行,因此在上述时间点,出现了CPU使用率短暂冲高的现象,在该任务执行完以后,CPU使用率也随即回落。考虑到报社采编部门的夜班出报工作是在每晚的20:00之后开始,为了避免上述的oracle维护任务导致服务器负载增加,影响夜班工作期间数据库的响应速度,可以采取将此任务关闭或将任务执行时间调整到中午的解决方案。此外,我们还可以发现每天早上7:00左右,CPU在wait状态的时间所占百分比迅速上升,达到一个峰值。由于该指标反映的是CPU等待磁盘I/O所耗费的时间所占百分比,因此可以判断在该时间点磁盘I/O的数据量也出现了增加。通过查看磁盘I/O的统计,验证了在每天的该时间点磁盘写入速率迅速升高。之后将对这一磁盘写入事件展开分析。3.3. 磁盘I/O在每天的监控数据文件中,观察磁盘I/O概况(DISK_SUMM)的统计,可以明显的发现,在每天早上7:00左右,磁盘写入速率会有一次迅速上升和回落,持续约两分钟。同时结合上述分析中在该时间点CPU等待磁盘I/O所耗时间迅速增加的现象,说明此时存在磁盘写入操作。如图10所示。

    图10 磁盘I/O概况示意图

    继续对oracle日志进行分析,查看到每天早上7:00左右存在这样一条记录:07:01:26 ALTER SYSTEM ARCHIVE LOG该记录表明每天7:00左右oracle会执行一次强制归档,在归档时会向磁盘写入数据,所以从监控文件反映出此时的磁盘写入速率迅速上升。在短暂的归档完成后,磁盘I/O速率马上回到了原先水平。归档操作是正常的定期任务,并且从CPU使用率的分析可知此时CPU等待磁盘I/O所耗时间占比也不高,因此对系统性能未造成影响。3.4. 内存使用对nmon监控文件中的内存指标(MEM)进行查看,可以获得每天各时间点内存总量、空闲内存(memfree)、swap(交换区)内存、cache(高速缓冲区)内存的数值,以及空闲内存剩余情况的统计图。从中可以发现,空闲内存的数值在每天其他时间基本都处于上下小幅度波动的正常状态,但在早上7:00左右会出现一次明显的大幅下降,随后很快又得到释放和恢复,数值出现回升。如图11所示。

    图11 空闲内存示意图

    结合上述对磁盘I/O的分析可知,由于每天在该时间点oracle的归档任务会带来一定量数据写入磁盘的操作,这必然会导致一定量内存的消耗,因此空闲内存会明显减少。在短暂的写操作结束后,内存就会被释放,空闲内存的数值又得以升高。观察表格中记录的数值,可以发现,当系统消耗内存时,会将部分空闲内存转到cache区内存中供使用;当任务结束,内存被释放时,cache区的部分内存会转为空闲内存,可用内存的数量处于正常范围。Linux提供了对物理内存进行合理、高效的访问,以及对潜在的海量虚拟内存进行访问的技术。虚拟内存通常稍多于操作系统实际拥有的内存容量,以便将较少使用的数据卸载到磁盘存储器上,同时可以表现出系统拥有大量物理内存。swap即是Linux下的虚拟内存分区。当物理内存不够用时,内存中的一些数据会被交换到swap分区暂存,在需要的时候再调进内存中运行。内存详情表格(如图12所示)中记录的swapcached项表示的是已被换出到交换空间(swap)中的内存大小。通过观察swapcached数值,可以发现只有极少量的内存(0.1—0.3MB)被交换到了swap区,这表明当前的物理内存数量足够使用,虚拟内存的使用量极少。

    图12 内存详情示意图

    4. 总结与展望通过完成对nmon监控工具的部署,并以CPU使用率、磁盘I/O和内存使用为例,详细分析了现象产生的原因,对可能影响服务器性能的因素提出了调优方案,我们实现了对人民日报社采编系统oracle服务器的常态化监控。这有利于及时发现潜在的性能问题,提高数据库的运行效率,同时我们也可以利用这些性能指标的现有数据,推测出其未来一段时间的运行趋势,作为今后对服务器进行常规维护的重要参考。下一阶段,我们将对报社新一代业务系统的其他服务器开展性能监控任务,同时探索更加方便、有效的服务器监控方式,以提高运维效率,为报社采编和新媒体业务的发展做出有力保障。参考文献[1] Sandra K. Johnson,Gerrit Huizenga,Badari Pulavarty(美)著,韩智文(译).Linux服务器性能调整.北京:清华大学出版社;2009:28-38[2] 赵琛.Oracle服务器性能影响因素分析与优化.数据库与信息管理,2011;20:73 联系方式:孟庆海:18600157841 263777073@qq.com衡永辉:18910838255程丽彦:18618287887 编辑:中国新闻技术工作者联合会

    评论 点击评论