用Mapserver加速“Mapcache_seed”

问题描述 投票:0回答:1

我在mapcache_seed包中使用mapcache来创建一个大的图像缓存来调用我的mapserver WMS,用向量。

目前,这是我正在使用的命令:

sudo -u www-data mapcache_seed -c mapcache.xml -g WGS84 -n 8 -t Test -e\ [Foo,Bar,Baz,Fwee] -M 8,8 -z 12,13 --thread-delay 0 --rate-limit 10000

其中www-data是我的Nginx系统用户,mapcache.xml是我的配置,WGS84是我的SRS,-n 8是我的逻辑线程数(在3200 MHz的i7-6700HQ上),-z 12,13是一个需要播种的缩放级别,线程延迟关闭,并且平铺速率创建设置为10000。

但是,我只(最大)获得50%的总CPU利用率,大多数时候只有一个核心超过50%。平均每秒500个磁贴 - 与我指定的线程或进程数无关。在过去的几天里,我一直试图获得所有变焦等级(4到27)的种子,但是我只能通过4到12,然后在仅仅3GB的情侣下严重瓶颈百万瓦。

对于mapcache_seed,8GB PC4-2133的内存利用率稳定在2.4%(WMS为0.5)。写入速度为100 MB / s,无缓冲区写入也为100 MB / s,而SATA III 1TB HDD上的缓冲+高速缓存为6.7-8.7 GB / s。我的机器上有另一个SSD驱动器,写入速度为6 GB / s,读取速度为8 GB / s,但它对于存储来说太小了,而且我担心因太多写入而导致驱动器故障。

缓存的瓷砖每个大约4KB,这意味着我每秒钟可以获得大约2MB的瓷砖。他们中的大多数甚至不是瓷砖,而是符号链接到空白瓷砖的全部空白瓷砖。

我将如何加快这一进程?通过mapcache_seed与线程和限制混淆,没有任何明显的区别。这也是在Debian Wheezy机器上。

这也是通过fast-cgi,使用256x256 px图像和限制范围的磁盘缓存运行到一个国家(否则mapcache开始只生成符号链接到空白磁贴,因为世界上90%以上的空白!)

Mapserver mapfile(编辑):

MAP
   NAME         "MAP"
   SIZE         1200 800
   EXTENT       Foo Bar Baz Fwee
   UNITS        DD
   SHAPEPATH        "."
   IMAGECOLOR   255 255 255
   IMAGETYPE        PNG
   WEB
     IMAGEPATH  "/path/to/image"
     IMAGEURL   "/path/to/imageurl"
     METADATA
        "wms_title"                     "MAP"
        "wms_onlineresource"            "http://localhost/cgi-bin/mapserv?MAP=/path/to/map.map"
        "wms_srs"                       "EPSG:4326"
        "wms_feature_info_mime_type"    "text/plain"
        "wms_abstract"                  "Lorem ipsum"
        "ows_enable_request"            "*"
        "wms_enable_request"            "*"
     END
   END

PROJECTION
  "init=epsg:4326"
END

   LAYER
     NAME       base
     TYPE       POLYGON
     STATUS     OFF
     DATA       polygon.shp
     CLASS
        NAME        "Polygon"
        STYLE
          COLOR     0 0 0
          OUTLINECOLOR  255 255 255
        END
     END
   END

   LAYER
     NAME       outline
     TYPE       LINE
     STATUS     OFF
     DATA       line.shp
     CLASS
       NAME     "Line"
       STYLE
         OUTLINECOLOR   255 255 255
       END
     END
   END  
END

mapcache.xml(编辑):

<?xml version="1.0" encoding="UTF-8"?>

<mapcache>
<source name="ms4wserver" type="wms">
<getmap>
  <params>
    <LAYERS>base</LAYERS>
        <MAP>/path/to/map.map</MAP>
  </params>
</getmap>
<http>
  <url>http://localhost/wms/</url>
</http>
  </source>

<cache name="disk" type="disk">
<base>/path/to/cache/</base>
<symlink_blank/>
  </cache>

  <tileset name="test">
<source>ms4wserver</source>
<cache>disk</cache>
<format>PNG</format>
<grid>WGS84</grid>
<metatile>5 5</metatile>
<metabuffer>10</metabuffer>
<expires>3600</expires>
  </tileset>

   <default_format>JPEG</default_format>

   <service type="wms" enabled="true">
 <full_wms>assemble</full_wms>
  <resample_mode>bilinear</resample_mode>
  <format>JPEG</format>
  <maxsize>4096</maxsize>
   </service>
   <service type="wmts" enabled="false"/>
   <service type="tms" enabled="false"/>
   <service type="kml" enabled="false"/>
   <service type="gmaps" enabled="false"/>
   <service type="ve" enabled="false"/>
   <service type="mapguide" enabled="false"/>
   <service type="demo" enabled="false"/>

   <errors>report</errors>
   <locker type="disk">
 <directory>/path/</directory>
 <timeout>300</timeout>
</locker>

</mapcache>
caching gis mapserver
1个回答
0
投票

因此对于十年后遇到的人来说,当这些工具的小文档遗留下来的时候,我已经把我的mapcache和mapfile设置搞得一团糟了。这不是我的一代太慢,而是我为空白文件生成了太多的GODDAMN SYMLINKS。首先,mapfile范围不正确。其次,我使用的是“WGS84”网格,默认情况下会播放所有范围。这意味着我所有瓷砖中有90%只是符号链接到blank.png,它会占用我所有的inode。我建议使用mkdir blank; rsync -a --delete blank/ /path/to/cache快速清除所有混乱。

我通过采用WGS84规范并将范围更改为我在mapfile中指定的范围来修复上述问题。现在,只有我的mapfile才会被播种。最后,我添加了网格XML元素,如下所示:

<grid restricted_extent="MAP FILE EXTENT HERE">GRIDNAME</grid>

现在有了restricted_extent,我确定只有我的地图才能播种。我有超过1亿块瓷砖,但它们都是该死的符号链接!否则,我得到了“太空中的冉冉”或某种类似的东西。即使df显示分区未满,也会产生误导。符号链接占用inode空间,而不是逻辑空间!要查看inode空间,请运行df -hi。我在100%的inode空间,但在1TB驱动器上只有1%的逻辑空间 - 充满了该死的符号链接!

© www.soinside.com 2019 - 2024. All rights reserved.