我在 mapcache
包中使用 mapcache_seed
来通过向量调用我的 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>
1 回答
因此对于十年之后遇到的人来说,当我这一代人太慢的时候,我正在为空白文件生成太多的GODDAMN SYMLINKS . 首先,mapfile范围不正确 . 其次,我使用的是"WGS84"网格,默认情况下会播放所有范围 . 这意味着我所有瓷砖中有90%只是符号链接到blank.png,它会占用我所有的inode . 我建议使用
mkdir blank; rsync -a --delete blank/ /path/to/cache
快速清除所有混乱 .我通过采用WGS84规范并将范围更改为我在mapfile中指定的范围来修复上述问题 . 现在,只有我的mapfile才会被播种 . 最后,我添加了网格XML元素,如下所示:
使用
restricted_extent
现在肯定只有我的 Map 才能播种 . 我有超过1亿块瓷砖,但它们都是该死的符号链接!否则,我得到了"Ran out of space"或类似的东西 . 即使df
显示该分区不是't full, it'的误导性 . 符号链接占用inode空间,而不是逻辑空间!要查看inode空间,请运行df -hi
. 我在100%的inode空间,但在1TB驱动器上只有1%的逻辑空间 - 充满了该死的符号链接!