<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:v = 
"urn:schemas-microsoft-com:vml" xmlns:o = 
"urn:schemas-microsoft-com:office:office" xmlns:w = 
"urn:schemas-microsoft-com:office:word" xmlns:x = 
"urn:schemas-microsoft-com:office:excel" xmlns:m = 
"http://schemas.microsoft.com/office/2004/12/omml"><HEAD><TITLE>RE: [UMN_MAPSERVER-USERS] System Configuration</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3059" name=GENERATOR>
<STYLE>@font-face {
        font-family: Wingdings;
}
@font-face {
        font-family: Wingdings;
}
@font-face {
        font-family: Calibri;
}
@font-face {
        font-family: Tahoma;
}
@page Section1 {size: 8.5in 11.0in; margin: 1.0in 1.0in 1.0in 1.0in; }
P.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman","serif"
}
LI.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman","serif"
}
DIV.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman","serif"
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline; mso-style-priority: 99
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline; mso-style-priority: 99
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline; mso-style-priority: 99
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline; mso-style-priority: 99
}
P {
        FONT-SIZE: 12pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; FONT-FAMILY: "Times New Roman","serif"; mso-style-priority: 99; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto
}
P.MsoListParagraph {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: "Times New Roman","serif"; mso-style-priority: 34
}
LI.MsoListParagraph {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: "Times New Roman","serif"; mso-style-priority: 34
}
DIV.MsoListParagraph {
        FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: "Times New Roman","serif"; mso-style-priority: 34
}
SPAN.EmailStyle18 {
        COLOR: #1f497d; FONT-FAMILY: "Calibri","sans-serif"; mso-style-type: personal-reply
}
.MsoChpDefault {
        FONT-SIZE: 10pt; mso-style-type: export-only
}
DIV.Section1 {
        page: Section1
}
OL {
        MARGIN-BOTTOM: 0in
}
UL {
        MARGIN-BOTTOM: 0in
}
</STYLE>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]--></HEAD>
<BODY lang=EN-US vLink=purple link=blue>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>Ed,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>I very much appreciate your help.&nbsp; Very 
insightful.&nbsp;</FONT></SPAN>Yes expectations are 50,000 users at least at the 
same time.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>Disk subsystem RAID 10 and NTFS.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>Changing the mode sounds like a very good idea and I am 
guilty as charged&nbsp; - I am writing to temporary files on the server.&nbsp;I 
have a gut feel that this is the big slowdown in our application. &nbsp;I could 
not find where to change the mode that you talk about. Somehow slipping through 
the fingers . . .&nbsp;</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>I must have to alter this process that I am 
using:&nbsp;</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>1. Image generated using&nbsp;PHP with calls 
$map-&gt;draw() and $image-&gt;saveWebImage()&nbsp;</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>2.&nbsp;Definition of&nbsp;storage location in the mapfile 
by properties&nbsp;ImagePath and ImageURL</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>3. The&nbsp;image name and path&nbsp;are substituted in my 
HTML code generation by referencing the name generated in 1 
above.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>What part am I missing?&nbsp; Can I somehow have the image 
generated and saved on the users machine directly&nbsp;and reference that 
instead?&nbsp; Now I am showing some&nbsp;lack of understanding&nbsp;for 
sure.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2>All your suggestions are&nbsp;great. Makes perfect sense, 
anything&nbsp;that can use&nbsp;direct access instead of having to filter and 
process improves the speed.&nbsp;&nbsp; </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=431133222-08112007></SPAN><SPAN 
class=431133222-08112007></SPAN><SPAN class=431133222-08112007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN class=431133222-08112007>Thanks 
again.</SPAN></FONT></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Dutch801 Rm BT" size=2>Bruce Cheney</FONT></DIV>
<DIV align=left><FONT face=Arial color=#000080 size=2><STRONG>Gateway Mapping, 
Inc</STRONG></FONT></DIV>
<DIV align=left><FONT face=Arial color=#0080ff size=2><A 
href="http://www.gatewaymapping.com/">www.gatewaymapping.com</A></FONT></DIV>
<DIV align=left><FONT face=Arial color=#808080 
size=2><EM>801.221.7656</EM></FONT></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT>&nbsp;</DIV><EM><FONT 
face=Arial color=#808080 size=2></FONT></EM><EM><FONT face=Arial color=#808080 
size=2></FONT></EM><EM><FONT face=Arial color=#808080 
size=2></FONT></EM><EM><FONT face=Arial color=#808080 
size=2></FONT></EM><EM><FONT face=Arial color=#808080 size=2></FONT></EM><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> Ed McNierney [mailto:ed@topozone.com] 
<BR><B>Sent:</B> Thursday, November 08, 2007 2:59 PM<BR><B>To:</B> Bruce Cheney; 
MAPSERVER-USERS@LISTS.UMN.EDU<BR><B>Subject:</B> RE: [UMN_MAPSERVER-USERS] 
System Configuration - [SPAM] Email found in subject<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV class=Section1>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Bruce 
&#8211;<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Thanks; 
that&#8217;s a good start.&nbsp; 5,000 requests at a time is a lot.&nbsp; If your 
estimate the average user will look at a map for 10 seconds before requesting 
another one, you&#8217;re talking about 50,000 simultaneous human 
users.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Thanks 
for posting the map file &#8211; that helps.&nbsp; There is one huge thing you should 
be aware of and think about right away &#8211; the difference between mode=browse and 
mode=map.&nbsp; If you are using browse mode with an HTML template (as it 
appears you are) you should reconsider that decision.&nbsp; When you use 
MapServer in browse mode, it needs to generate the map image, legend image, etc. 
and then <I>write them all to a local disk</I> before returning an HTML template 
to the client with the URLs of those images embedded in it.&nbsp; Writing to 
disk is the slowest thing you can do on your server.&nbsp; Having 5,000 
simultaneous disk writes, with simultaneous reads to the same disk, is very 
nearly pure evil.&nbsp; That is a huge drag on performance.&nbsp; You really 
can&#8217;t sustain nearly as many users on a given machine in browse mode as you 
could in map mode.&nbsp; What kind of disk subsystem is being used for the temp 
files?<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Map 
mode (mode=map) is a simple HTTP request for an image, and the image, after 
being built, is sent directly to the client with no disk I/O involved.&nbsp; 
<I>Much</I> nicer.&nbsp; <I>Much</I> faster.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">If 
you must use browse mode, then I&#8217;d suggest you create a RAM disk to hold the 
temp images, with appropriate monitoring to clean out old files promptly.&nbsp; 
But can you pre-build a set of legends, etc. so you can just embed those and not 
crank them out every time?&nbsp; You can also get some benefit from storing our 
input shapefiles on a RAM disk, but don&#8217;t devote any RAM to that purpose if 
you&#8217;re still writing temp files to hard disk.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Let 
me first toss off a few generic suggestions that probably won&#8217;t help much but 
are worth doing:<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoListParagraph 
style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo2"><![if !supportLists]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><SPAN 
style="mso-list: Ignore">1.<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN></SPAN><![endif]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Get 
rid of unused fonts in your font file.&nbsp; MapServer will reach out and touch 
each one for each map request.<o:p></o:p></SPAN></P>
<P class=MsoListParagraph 
style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo2"><![if !supportLists]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><SPAN 
style="mso-list: Ignore">2.<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN></SPAN><![endif]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">If 
your shapefiles don&#8217;t change often, preprocess them to create a separate 
shapefile for each CLASS, so you don&#8217;t have to filter as 
much.<o:p></o:p></SPAN></P>
<P class=MsoListParagraph 
style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo2"><![if !supportLists]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><SPAN 
style="mso-list: Ignore">3.<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN></SPAN><![endif]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">If 
you must use CLASSes, organize them so the most commonly-used class comes first 
in each LAYER.<o:p></o:p></SPAN></P>
<P class=MsoListParagraph 
style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo2"><![if !supportLists]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><SPAN 
style="mso-list: Ignore">4.<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN></SPAN><![endif]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">If 
you have a certain number of combinations of shapefiles used in a given request, 
create multiple map files with only those layers.&nbsp; For example, if your 12 
layers are one set of 4 base layers that are always used, and then 8 more layers 
only one of which is displayed at a time, create 8 map files, each with only 5 
layers instead of 12 &#8211; the four base layers and one specific overlay 
layer.&nbsp; Then use your application code to figure out which map file to 
select.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">And 
make sure you&#8217;re using shptree to generate spatial indexes for all your 
shapefiles!<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">This 
looks like it should be an application capable of running pretty darn 
quickly.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoListParagraph 
style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4"><![if !supportLists]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><SPAN 
style="mso-list: Ignore">-<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN></SPAN><![endif]><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Ed<o:p></o:p></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 0.75in"><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Ed 
McNierney<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Chief 
Mapmaker<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Demand 
Media / TopoZone.com<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">73 
Princeton Street, Suite 305<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">North 
Chelmsford, MA&nbsp; 01863<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><A 
href="mailto:ed@topozone.com">ed@topozone.com</A><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Phone: 
+1 (978) 251-4242<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">Fax: 
+1 (978) 251-1396<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN 
style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"><o:p>&nbsp;</o:p></SPAN></P>
<DIV>
<DIV 
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; PADDING-TOP: 3pt; BORDER-BOTTOM: medium none">
<P class=MsoNormal><B><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma','sans-serif'">From:</SPAN></B><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma','sans-serif'"> UMN MapServer Users 
List [mailto:MAPSERVER-USERS@LISTS.UMN.EDU] <B>On Behalf Of </B>Bruce 
Cheney<BR><B>Sent:</B> Thursday, November 08, 2007 12:17 PM<BR><B>To:</B> 
MAPSERVER-USERS@LISTS.UMN.EDU<BR><B>Subject:</B> Re: [UMN_MAPSERVER-USERS] 
System Configuration<o:p></o:p></SPAN></P></DIV></DIV>
<P class=MsoNormal><o:p>&nbsp;</o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Many good 
questions. I will see if I can catch them all. A bit on the nature of the 
application.</SPAN> <o:p></o:p></P>
<UL type=disc>
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">We are only using 
  vector data (we assumed that the raster would slow it down).</SPAN><o:p></o:p> 

  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">We are serving many 
  different maps stored separately with the same composition of layers. Each map 
  has 6 layers (4 polygon and 2 point layers for labeling). </SPAN><o:p></o:p>
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Each of the 
  different map sets has differing quantities of features.&nbsp; For the most 
  significant layers they average around 10,000 features but may be as high as 
  100,000. </SPAN><o:p></o:p>
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">A majority of the 
  requests are to display a small area of one of the maps so the rendering 
  focuses in to a few features.&nbsp; The user will query a database which will 
  allow for viewing the map that is zoomed to the area of 
  interest.</SPAN><o:p></o:p> 
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">No layer 
  reprojecting (we assumed this would also slow it down).</SPAN><o:p></o:p> 
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">The output map is 
  PNG with dimensions 419 X 403.</SPAN><o:p></o:p> 
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">We are using 
  PHP_mapscript to generate the requests.&nbsp; The parameters for the map 
  generation come from a database and the user requested location.&nbsp; So 
  there are a few lines of code to find the location on the map and generate the 
  images.</SPAN><o:p></o:p> 
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">The mapfile 
  contains about 12 layers.&nbsp; Several layers to display the primary polygon 
  layer thematically and a couple extra to show the polygons with outlines. 
  </SPAN><o:p></o:p>
  <LI class=MsoNormal 
  style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Data is stored in 
  Shapefiles</SPAN><o:p></o:p> </LI></UL>
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><o:p>&nbsp;</o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">I made 
attempts to stream-line the use of extra features to ensure the speed.&nbsp; I 
certainly may be using items that hurt instead of help.&nbsp; Here is the 
mapfile.&nbsp; Now that I look at the mapfile there may be a couple items that I 
originally had intended to use but are now just relics and time 
wasters.</SPAN><o:p></o:p></P>
<P><SPAN 
style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'">&lt;&lt;postforwebforum.map&gt;&gt; 
</SPAN><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Now 
as for the users.&nbsp; We are assuming 5000 simultaneous - all at the same 
instant. This would assume a substantially larger group of users accessing the 
site at the same time.&nbsp;&nbsp; We assume this to be the peak stress for 
Stage 1 of the app.&nbsp; </SPAN><o:p></o:p></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 12pt"><BR><BR><BR><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Bruce 
-</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">My 
channeling sensors went off when Frank rang &lt;g&gt;.</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">It is 
certainly true that a bit of experience and contemplation can help you discover 
optimization opportunities that aren't immediately self-evident.&nbsp; Can you 
describe the nature of your map application?&nbsp; Are you using raster data, 
vector data, or both?&nbsp; What size is your data, in numbers of features 
and/or files?&nbsp; What kind of disk subsystem is being used?&nbsp; Is there 
layer reprojection going on?</SPAN><o:p></o:p></P>
<P><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Generalizations are 
rarely helpful (except for this one).&nbsp; It's like being told the average man 
is 5' 7" tall - it tells you nothing about how tall I am.&nbsp; MapServer 
performance depends on a number of factors, but the best place to start is a 
detailed understanding of what exactly you're trying to do with 
MapServer.</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">It would be 
most helpful to us if you could post your map file and a sample URL request, 
preferably one that is externally (publicly) visible.&nbsp; And can you define 
what you mean by "simultaneous" users?&nbsp; Do you mean 5,000 map requests all 
being generated at exactly the same time?&nbsp; Or do you mean 5,000 human users 
asking for a new map every X seconds or so?&nbsp; And if the latter, what value 
are you using for X?</SPAN><o:p></o:p></P>
<P><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp; 
- Ed</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Ed 
McNierney</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Chief Mapmaker</SPAN> 
<BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Demand 
Media / TopoZone.com</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">73 Princeton Street, 
Suite 305</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">North Chelmsford, 
MA&nbsp; 01863</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Phone: 978-251-4242, 
Fax: 978-251-1396</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">ed@topozone.com</SPAN> 
<o:p></o:p></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 12pt"><o:p>&nbsp;</o:p></P>
<P><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">-----Original 
Message-----</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">From: UMN MapServer 
Users List [</SPAN><A href="mailto:MAPSERVER-USERS@LISTS.UMN.EDU"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">mailto:MAPSERVER-USERS@LISTS.UMN.EDU</SPAN></A><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">] On Behalf Of Frank 
Warmerdam</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Sent: Wednesday, 
November 07, 2007 8:26 PM</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">To: 
MAPSERVER-USERS@LISTS.UMN.EDU</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Subject: Re: 
[UMN_MAPSERVER-USERS] System Configuration</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Bruce Cheney 
wrote:</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; We have been 
given a requirement to support 5000 simultaneous users.&nbsp;&nbsp; 
</SPAN><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; 
What we are finding is that MapServer bogs down around 400 </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; simultaneous 
users on a test machine.&nbsp; It looks like it is likely </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; slowing because 
of the threading issue.&nbsp; We haven't tested on a </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; production 
machine but are estimating that it should support double </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; what are test 
machine could handle (double the processor and RAM).&nbsp; So </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; at least 800 
simultaneous users.&nbsp; Divide that out with the 5000 and we </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; need a minimum 
of 6-7 web servers supporting MapServer.&nbsp; We will </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; certainly scale 
this as is needed but I do need some idea going in as to what is going to be 
required.</SPAN> <o:p></o:p></P>
<P><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Bruce,</SPAN> 
<o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">I'm curious 
how many map requests per minute you expect 800 simultaneous users to 
generate.</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; Does 
this sound like results that others expect or is this quantity </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; above what 
others have tested?&nbsp; Also Does anyone know of a solution in 
</SPAN><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; 
the works to run make mapserver thread safe and/or up the overall 
</SPAN><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; 
speed?&nbsp; I am not complaining about the speed just wondering what is in 
</SPAN><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&gt; 
the works.</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">In various 
aspects MapServer is already thread safe though there are also known "unsafe" 
components, and some components are wrapped by big locks that significantly 
reduce the value of multiple threads.</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Progress 
occurs by fits and starts, largely based on support from user organizations 
depending on multi-threading.&nbsp; For instance, in 5.0 I implement locking 
around OGR for a client of mine in Australia.</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">(This is a 
subtle way of suggesting you hire someone to make this happen if it is what you 
want!)</SPAN> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">All this 
aside, by default MapServer is *massively multi-threaded*.</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">I say this since the 
default operation is to start a new cgi instance for each request - each is 
essentially an independent thread.</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Of course, 
the downside of whole-process cgi style multithreading is that very little 
context is preserved from request to request.&nbsp; Map files, data file 
headers, etc all need to be reparsed for each request.</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">My point 
here is that you need to think carefully about the application flow to take much 
advantage of multiple threading within a single process.</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Also, if I 
may channel Ed, if you wanted to squeeze more performance out of mapserver, you 
really need to start by figuring out what it is spending it's time doing.&nbsp; 
Where is it spending it's time?</SPAN><o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&nbsp; o 
waiting for disk?&nbsp; (perhaps you are reading more data than you 
need?)</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&nbsp; o rendering 
(perhaps your data is overdense, or you are using expensive</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; 
rendering options?)</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">&nbsp; o parsing 
mapfiles (perhaps you mapfile has too many unused layers?) etc.</SPAN> 
<o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">Best 
regards,</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">-- </SPAN><BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">---------------------------------------+--------------------------------</SPAN> 
<BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">---------------------------------------+------</SPAN> 
<BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">I set the 
clouds in motion - turn up&nbsp;&nbsp; | Frank Warmerdam, 
warmerdam@pobox.com</SPAN> <BR><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">light and sound - 
activate the windows | </SPAN><A href="http://pobox.com/~warmerdam"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">http://pobox.com/~warmerdam</SPAN></A> 
<BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">and watch 
the world go round - Rush&nbsp;&nbsp;&nbsp; | President OSGeo, </SPAN><A 
href="http://osgeo.org"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'">http://osgeo.org</SPAN></A> 
<o:p></o:p></P></DIV></BODY></HTML>