1 问题提出
1.1 概述
提高ArcGIS server并发性能的方法很多,本文讨论在用户硬件足够强大的情况下(主要是内存足够大),使用内存模拟硬盘来提高数据的读取效率,以达到提高ArcGIS server并发性能的目的。
1.2 总体思路
为了提高ArcGIS server并发性能,在假定其他条件都相同的前提下,使用Ramdisk软件,将系统中的内存模拟成硬盘使用,然后将ArcGIS server中发布2个相同的切片服务,其中一个服务的切片迁移至内存盘(即Ramdisk),另外一个服务切片存放位置不变(为普通硬盘),然后在客户端使用压力测试软件测试2个服务的并发性能,最终得出测试结论。
2 环境搭建
2.1 软件环境
软件名称 | 版本号 | 用途 |
ArcGIS | 10.1 | 平台测试,包括server和桌面 |
Windows 2008 | R2(64位) | 操作系统 |
Ramdisk 64 | 1.6 (64位) | 内存虚拟硬盘软件 |
Crystal Disk Mark | 3.0.1(64位) | 硬盘速度测试软件 |
Microsoft Web Application Stress Tool | 1.1.293.1 | 压力测试软件 |
2.2 硬件环境
硬件类别 | 规格 |
CPU | Intel(R) Core(TM) i7 CPU 1.73GHz (8 CPUs) |
内存 | 8G |
硬盘 | Hitachi HTS725050A9A364 ATA Device 500G,7200转 |
显卡 | NVIDIA Quadro FX 880M |
2.3 网络环境
Intel(R) 82577LM Gigabit Network
1 测试过程
1.1 硬盘读写速度测试
使用Ramdisk将1G内存虚拟成硬盘后,得出的数据读写速度截图如下:
虚拟前(普通硬盘)
虚拟后(内存虚拟硬盘)
从内存虚拟前后测试硬盘读写速度的数据来看,内存和硬盘的速度相差大约70倍左右。
1.2 发布切片服务
下面我们使用arcgis server发布2个切片服务,这2个服务除了切片放置的位置不同(一个放在普通硬盘,一个放在内存虚拟的硬盘上),其他都一样。这样我们得到了这2个服务的地址:
http://192.168.32.153:6080/arcgis/rest/services/wychinaRam/MapServer
http://192.168.32.153:6080/arcgis/rest/services/tile/wychinaT/MapServer
1.3 压力测试
由于专业测试软件Load Runner的复杂性,本文使用轻量级测试软件Microsoft Web Application Stress Tool作为压力测试软件。该软件有一个不足的地方,就是只能静态设置一个或者多个测试地址,而不能以一定规则测试某些地址,比如随机选择某行或某列的切片进行测试。本文选取5个固定切片地址作为测试源,500个并发测试1分钟,软件截图如下:
通用测试设置
内存虚拟盘测试设置
普通硬盘测试设置
1.4
测试报告
内存虚拟硬盘测试报告
普通硬盘测试报告
2 结论与思考
从以上测试报告可以看出,使用内存虚拟硬盘后,切片服务的平均响应时间由484.33毫秒下降到386.26毫秒。这个结论并不能完全反应出内存虚拟硬盘对服务性能提高的优势,因为内存的读写速度比普通硬盘提高了70倍左右。那么问题出在哪儿呢?
我们先来看下影响ArcGIS server性能架构的一张图:
影响ArcGIS server性能的各个环节
由上图可以看出,从浏览器发出请求到接收到数据,需要经过大概6个左右的环节,每个环节都有可能成为性能瓶颈,而GIS Server只是这众多环节中的一个。具体到本文当中,由于测试时选取的切片位置相同(比如每次都请求第8层的102行103列的切片),导致该切片在第一次请求时就已经被加入到了系统缓存(内存)中,以后每次请求都会直接从内存中加载而不会到硬盘上读取,这样,切片源是存放在普通硬盘还是内存虚拟出的硬盘中,就不那么重要了。
如果能够以编程的方式定制测试脚本,精确控制每次并发访问的切片都位于不同的级别和行列,可以预见,就可以得到比较好的结论,比如性能上,内存虚拟硬盘能够比普通硬盘的响应时间提高到70倍左右。