Низкая производительность от MapServer - PullRequest
2 голосов
/ 30 апреля 2009

Я использую mapserver для создания карты, которая будет отображаться с API Google Map. У меня проблемы с выступлениями.

Все мои карты в формате шейп-файла.

Я запускаю тесты, чтобы получить время на рендеринг карт.

При рендеринге карты с помощью инструмента 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

При рендеринге той же карты через mapserver, используя

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 рендерит карту в 10 раз быстрее, чем mapserver. При добавлении нескольких слоев и использовании режима листов для карты Google может потребоваться до 10 секунд.

Кто-нибудь знает, почему mapserver рендерит так медленно? Есть ли обходной путь?

Ответы [ 3 ]

2 голосов
/ 22 июля 2009

Есть несколько различий между shp2img и запросом mapserv:

1) shp2img создает одно изображение, ваш запрос mapserv генерирует плитки. Это означает, что для ограничивающей рамки samen может потребоваться 9 плиток вместо 1. Это создает накладные расходы. Попробуйте выполнить рендеринг без установленного параметра плиток и повторите тест.

2) У вас небольшие накладные расходы на запрос cgi в mapserv 3) Mapserv передает изображение по http, в то время как shp2img пишет прямо на диск. 4) Вы не указали слой в запросе mapserv, что означает, что mapserv ищет слои.

1 голос
/ 02 декабря 2011

Вы можете прочитать это: http://mapserver.org/optimization/index.html

  • Одним из наиболее важных моментов является удаление неиспользуемых проекций в файле EPSG. Например. под RedHat 6 / usr / share / proj / epsg у меня 3 проекции.
  • Удалить неиспользуемые шрифты
  • Синтаксический анализатор mapfile считывает файл сверху вниз, поэтому наиболее часто используемые слои помещаются вверху файла (анализатор EPSG работает аналогично)

Файлы форм "должны иметь" одну и ту же проекцию вызывающего абонента, в противном случае Mapserver должен перепроектировать их на лету.

например. Из моего кода OpenLayers (900913):

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

Все мои файлы форм основаны на проекциях 900913.

0 голосов
/ 30 апреля 2009

У меня есть пара предложений, но нет точных ответов, я не сделал много настроек для картсервера, но я работал с людьми, которые имеют.

  1. Существует множество оптимизаций, которые вы можете сделать для mapserver, я бы проверил список рассылки.
  2. Сделайте файл карты настолько маленьким, насколько это возможно, так как открытие и анализ файла карты может занять много времени для сервера карт.
  3. Создайте все плитки заранее и просто используйте mapserver, чтобы получить файлы. Черепица на лету не очень быстрая.
...