zoukankan      html  css  js  c++  java
  • 对MapGuide/AIMS进行压力测试StressTest并进行性能优化

    你按照缺省配置部署AIMS或者MapGuide时也许发现,这个系统的性能并不是很好,并发用户稍微多一点就MapGuide Server就死掉了。这是因为MapGuide的缺省配置只是比较安全的一个设置,能确保在大多数机器配置下能够运行而已,但如果把这个缺省配置应用到正式生产环境中,性能就会出现问题,我们必须根据实际情况对MapGuide Server的配置进行优化。相关设置可以在serverConfig.ini里面调整,这个文件缺省在C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Bin目录下。

    那么更改那些参数,改为多少合适呢? 为了更有针对性的对MapGuide中serverConfig.ini中的参数修改来达到性能优化,我们可以先通过压力测试一下,看看那个环节出问题。压力测试有不少工具,比如Grinder,LoadRunner,Microsoft Web Application Stress Tool等等,你可以选用你自己熟悉的工具。

    下面我用Grinder来对我的AIMS站点来做个测试。Grinder是个开源的压力测试工具,可以从这里下载。我对Sheboyon示例数据做一下压力测试,这里有一个别人写好的测试脚本,这个脚本对下面8种常用操作做了压力测试,包括加载map viewer,要素查询,漫游,缩放,选择和清除选择等等,具体请参考测试脚本Script_BasicNet2010.py。

    先说一下我的测试环境,我的笔记本:

    Intel Core i7 Q820@1.73G

    8G 内存 开始测试时已用内存3.2G,我开了一些常用的程序,包括现在正在用来写博客的LiveWriter。

    Windows 7 64位

    Autodesk Infrastructure Map Server 2013 64位

    image

    下面是测试方法:

    1. 安装测试环境

    Grinder是基于Java编写的,首先你需要配好Java环境,这里不细说,网上一搜一大堆。

    下载Grinder

    下载测试脚本,并解压。

    2. 修改测试脚本参数

    Grinder的MapGuide压力测试脚本修改,由于这段脚本是针对Sheboygan示例数据进行测试的,如果你没有这个示例数据,可以从OSGeo来下载,当然如果你需要测试你自己的数据,那么需要对测脚本进行更改,我这里先对Sheboygon数据来测试。

    脚本缺省的设置http://localhost/mapguide 上的PHP版本的MapGuide做1个用户的测试。我安装的是Autodesk Infrastructure Map Server 2013的.net 版本,所以需要更改一下参数。

    打开scripts/grinder.properties,更改为:

    grinder.script = sheboyganNet.py             测试.net版本的AIMS
    grinder.processes = 10                           10个并发用户
    grinder.threads = 1
    grinder.runs = 0 

    然后打开SheboyganNet.py,更改RARAM_BaseUrl 为 http://localhost/mapserver2013/


     

    execfile('.\scripts\Params_Basic2010.py')
    execfile('.\scripts\Params_SheboyganCommon.py')

    #Mapguide Server url
    PARAM_BaseUrl = "http://localhost/mapserver2013/"

    PARAM_WebLayout = "Library://Samples/Sheboygan/Layouts/SheboyganAsp.WebLayout"
    PARAM_MapDefinition = "Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition"
    PARAM_MapName = "Sheboygan"

    PARAM_InitialLegendLayers = ["Library://Samples/Sheboygan/Layers/Islands.LayerDefinition",
        "Library://Samples/Sheboygan/Layers/Hydrography.LayerDefinition",
        "Library://Samples/Sheboygan/Layers/CityLimits.LayerDefinition",
        "Library://Samples/Sheboygan/Layers/Districts.LayerDefinition",
        "Library://Samples/Sheboygan/Layers/Parcels.LayerDefinition"]
       
    execfile('.\scripts\Script_BasicNet2010.py')

    3 运行测试

    如果你是第一次运行Grinder,首先运行一下SetClasspath.bat把Grinder的相关库加入到classpath中去,运行一次就可以了。

    双击StartConsole.bat 启动控制台

    双击StartAgent.bat启动代理

    然后的控制台中,通过Action菜单,启动进程start the process,这里有个关于grinder 控制台的文档

     image

    对AIMS 2013的缺省安装设置进行10个并发用户的压力测试,不一会儿在Error.log里就出现了下面的错误,表明不能在创建新的的会话session了。

    <2012-08-30T16:00:53>     74620        127.0.0.1    Administrator
    Error: Cannot create repository: Session:d20be822-f278-11e1-8000-1cc1de9ea86d_en_MTI3LjAuMC4x0AF20AF10AF0//
    StackTrace:
      - MgSiteServiceHandler.ProcessOperation() line 83 file d:\build\ims2013\build_52.8\ent\os\server\src\services\site\SiteServiceHandler.cpp
      - MgOpCreateSession.Execute() line 109 file d:\build\ims2013\build_52.8\ent\os\server\src\services\site\OpCreateSession.cpp
      - MgServerSiteService.CreateSession() line 762 file d:\build\ims2013\build_52.8\ent\os\server\src\services\site\ServerSiteService.cpp
      - MgServerResourceService.CreateRepository() line 491 file d:\build\ims2013\build_52.8\ent\os\server\src\services\resource\ServerResourceService.cpp   
    <2012-08-30T16:00:53>     74820        127.0.0.1    Administrator
    Error: Cannot create repository: Session:d203d196-f278-11e1-8000-1cc1de9ea86d_en_MTI3LjAuMC4x0AF20AF10AF0//
    StackTrace:
      - MgSiteServiceHandler.ProcessOperation() line 83 file d:\build\ims2013\build_52.8\ent\os\server\src\services\site\SiteServiceHandler.cpp
      - MgOpCreateSession.Execute() line 109 file d:\build\ims2013\build_52.8\ent\os\server\src\services\site\OpCreateSession.cpp
      - MgServerSiteService.CreateSession() line 762 file d:\build\ims2013\build_52.8\ent\os\server\src\services\site\ServerSiteService.cpp
      - MgServerResourceService.CreateRepository() line 491 file d:\build\ims2013\build_52.8\ent\os\server\src\services\resource\ServerResourceService.cpp   

    那么如何优化呢?我进入到serverConfig.ini里面,修改参数配置如下,请注意高亮的部分。

    [ResourceServiceProperties]
    # *****************************************************************************
    # R E S O U R C E  S E R V I C E
    #
    # Property Name                    Description
    # -----------------------------------------------------------------------------
    # LibraryRepositoryPath            Path where the Library repository is stored
    # LibraryResourceDataFilePath      Path where the Library resource data files
    #                                  are stored
    # PackagesPath                     Path where the resource packages can be found
    # RepositoryCheckpointsTimerInterval Time duration in seconds for when the server
    #                                  performs checkpoints for all the repositories
    #                                       0 < Value <= 2147483647
    # ResourceChangeTimerInterval      Time duration in seconds for when the server
    #                                  dispatches resource change notifications
    #                                       0 < Value <= 2147483647
    # ResourceDataFileTrashFolderName  Folder where the repository trash files are
    #                                  stored
    # ResourcePermissionCacheSize      Max # of resources with permission
    #                                  information to be cached
    #                                       0 <= Value <= 2147483647
    # ResourceSchemaFilePath           Path where the resource schema files are
    #                                  stored
    # SessionRepositoriesConfig        Sets whether to use a single file session
    #                                  repository or a session repository file per session.
    #                                       SingleFile or FilePerSession
    # SessionRepositoriesLimit         The total number of active session files allowed.
    #                                  This setting only works when FilePerSession
    #                                  is used.

    # SessionRepositoryPath            Path where the Session repository is stored
    # SessionResourceDataFilePath      Path where the Session resource data files
    #                                  are stored
    # SiteRepositoryPath               Path where the Site repository is stored
    # *****************************************************************************
    LibraryRepositoryPath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Repositories\Library\
    LibraryResourceDataFilePath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Repositories\Library\DataFiles\
    PackagesPath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Packages\
    RepositoryCheckpointsTimerInterval = 600
    ResourceChangeTimerInterval = 5
    ResourceDataFileTrashFolderName = Trash
    ResourcePermissionCacheSize = 1000
    ResourceSchemaFilePath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Schema\
    SessionRepositoriesConfig = FilePerSession
    SessionRepositoriesLimit = 2000
    SessionRepositoryPath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Repositories\Session\
    SessionResourceDataFilePath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Repositories\Session\DataFiles\
    SiteRepositoryPath = C:\Program Files\Autodesk\Autodesk Infrastructure Map Server 2013\Repositories\Site\

    [SiteServiceProperties]
    # *****************************************************************************
    # S I T E  S E R V I C E
    #
    # Property Name                    Description
    # -----------------------------------------------------------------------------
    # SessionTimeout                   Time duration in seconds for when an idle
    #                                  session is expired
    #                                       0 < Value <= 86400
    # SessionTimerInterval             Time interval in seconds for when the server
    #                                  checks for idle sessions
    #                                       0 < Value <= 2147483647
    # *****************************************************************************
    SessionTimeout = 400
    SessionTimerInterval = 200

    其中SessionRepositoriesLimit的值表示允许创建的活动会话Session的个数,缺省值是200,这个太小了,我把这个值增大为2000. 下面还对SessionTimeout  和 SessionTimerInterval 的值进行了更改,SessionTimeout表示session过期的时间,SessionTimerInterval 表示隔多长时间来检查session是否过期。在session过期时MapGuide Server就会释放掉相应的内存,这里把session过期时间缩短和检查间隔缩短,以便MapGuide Server能及时清理不用的Session。经过这样的设置之后,我上面的错误信息消失了。

    下面是100个并发用户的压力测试截图,没有任何错误信息:

    image

    image

    image

    CPU及内存使用情况:

    image

    根据前一篇博客Counting the active session number and tune up concurrent performance of MapGuide/AIMS中介绍的Session计算方法,大约有700个活动的会话。

    image

    活动session数是和你的可用内存息息相关的,可能话尽量多配内存,并使用64位版本,另外增加配置文件中的允许session数并缩短session时间和过期检查事件以便及时清理掉不用的session。

    好了,看到这里,你对MapGuide的性能有信心吗?

  • 相关阅读:
    MFC程序自动生成dump Windbg文件
    .net 播放音频(使用winmm.dll)
    media player 网页代码属性
    标记ATL控件为安全控件
    js方法重写
    cab包inf文件配置
    凌阳单片机(61板)USB下载线原理与制作
    html 智能检查,修复
    差异性发展 浙江工商局长郑宇民“智斗”央视女主持董倩
    什么是有效高效的沟通
  • 原文地址:https://www.cnblogs.com/junqilian/p/2664231.html
Copyright © 2011-2022 走看看