2009-04-30 4 views
2

mapserver를 사용하여 Google지도 API와 함께 표시되는지도를 만듭니다. 공연 관련 문제가 있습니다.MapServer의 성능이 느림

내지도는 모두 shapefile 형식입니다.

지도를 렌더링하는 데 시간이 걸리는 테스트를 실행합니다.

명령 줄을 사용하여 shp2img 도구를 사용하여지도를 렌더링

shp2img -i gif -m C:\myfolder\mymapfile.map -o C:\myfolder\test.gif -all_debug 5 -map_debug 5 

나는 로그 파일에서 다음의 측정 값을 얻을 :

[Thu Apr 30 13:50:19 2009].148000 msLoadMap(): 0.000s 
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Layer 0 (PWorld2), 0.032s 
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Drawing Label Cache, 0.000s 
[Thu Apr 30 13:50:19 2009].180000 msDrawMap() total time: 0.032s 
[Thu Apr 30 13:50:19 2009].195000 msSaveImage() total time: 0.015s 
[Thu Apr 30 13:50:19 2009].195000 msFreeMap(): freeing map at 01595E18. 
[Thu Apr 30 13:50:19 2009].195000 freeLayer(): freeing layer at 0159CD00. 
[Thu Apr 30 13:50:19 2009].195000 shp2img total time: 0.047s 

를 사용하여 맵 서버를 통해 동일한 맵 렌더링
http://localhost/cgi-bin/mapserv.exe?mymapfile.map&layers=&mode=tile&tilemode=gmap&tile=1+1+2 

로그 파일은 다음을 제공합니다.

[Thu Apr 30 13:51:50 2009].664000 CGI Request 1 on process 3520 
[Thu Apr 30 13:51:50 2009].664000 msTileSetExtent (-10013744.792915, 8348.961808) (-5009.377085, 10010405.208192) 
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Layer 0 (PWorld2), 0.359s 
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Drawing Label Cache, 0.000s 
[Thu Apr 30 13:51:51 2009].23000 msDrawMap() total time: 0.359s 
[Thu Apr 30 13:51:51 2009].23000 msSaveImage() total time: 0.000s 
[Thu Apr 30 13:51:51 2009].23000 mapserv request processing time (loadmap not incl.): 0.359s 
[Thu Apr 30 13:51:51 2009].23000 msFreeMap(): freeing map at 01598690. 

동일한 맵의 경우 shp2img 도구가 mapserver보다 10 배 빠릅니다. 더 많은 레이어를 추가하고 Google지도 타일링 모드를 사용할 때 최대 10 초가 될 수 있습니다.

지도 서버가 왜 이렇게 느리게 렌더링하는지 다른 사람이 알고 있습니까? 해결 방법이 있습니까?

답변

2

가 shp2img과 mapserv 요청간에 차이가 몇 있습니다

1) shp2img는 하나의 이미지를 생성하여 mapserv 요청은 타일을 생성합니다. 즉, 1 대신에 samen 경계 상자에 9 개의 타일을 렌더링해야 할 수도 있습니다. 이로 인해 오버 헤드가 발생합니다. 타일 ​​옵션없이 렌더링을 시도하고 테스트를 다시 실행하십시오.

2) 맵 서버의 cgi 요청에 작은 오버 헤드가 있습니다. 3) shp2img가 디스크에 직접 쓰는 동안 Mapserv가 http를 통해 이미지를 푸시합니다. 4) mapserv 요청에서 레이어를 지정하지 않았습니다. 즉, mapserv가 레이어를 찾는다는 의미입니다.

+2

3) FastCGI를 사용하고 확인하십시오. 큰 차이가 있습니다. http://www.slideshare.net/DonnyV/wms-performance-tests-map-server-vs-geo-server –

+0

다시 1) 위에 인용 된 통계는 1 타일에 대해서만 적용되므로 테스트가 유효합니다 – flurbius

0

나는 두 가지 제안을하고 있지만 어려운 대답은 없다. 맵 서버 구성을 많이하지 않았지만 가지고있는 사람들과 일했다.

  1. mapserver에 할 수있는 최적화가 많이 있습니다. 메일 링리스트를 확인합니다.
  2. 맵 파일을 열고 구문 분석하면 맵 서버에 시간이 오래 걸릴 수 있으므로 맵 파일을 가능한 작게 만드십시오.
  3. 미리 모든 타일을 만들고 mapserver를 사용하여 파일을 가져옵니다. 제자리에서 타일을 붙이는 것은 그렇게 빠르지 않습니다.
+0

이미 맵 파일에서 많은 최적화 작업을 수행했습니다. 최적화와 같이 shp2img를 사용하면 렌더링 속도가 빨라지지만 맵 서버는 거의 개선되지 않은 것처럼 보입니다. mapserver가 대략 shp2img 도구보다 빠를 것으로 기대하고있었습니다. 나는 왜 shp2img가 더 빠르는지 이해하지 못한다. – Blue

1

이 읽을 수있는 가장 중요한 포인트의 http://mapserver.org/optimization/index.html

  • 하나는 EPSG 파일에서 사용되지 않는 전망을 제거하는 것입니다. 예 : RedHat 6/usr/share/proj/epsg에서 3 개의 예측이 있습니다.
  • 제거하지 않는 글꼴
  • 맵 파일 파서가 위에서 아래로 파일을 읽고는, 따라서 파일의 상단에 가장 많이 사용되는 레이어를 넣어

모양합니다 (EPSG 파서는 같은 방식으로 작동) 파일에 "동일한 호출자 투영"이 있어야합니다. 그렇지 않으면 Mapserver를 호출자 투영에 재 투영해야합니다.

E.G. 내 OpenLayers 코드 (900913)에서 는 :

var options = { 
    projection: new OpenLayers.Projection('EPSG:900913'), //aka EPSG:3785 
    displayProjection: new OpenLayers.Projection('EPSG:4326'), //geographic 

내 모든 형태의 파일 기반 900913 투사입니다.