Java MapScript issues Servlet

Umberto Nicoletti unicoletti at PROMETEO.IT
Mon Feb 28 10:31:42 EST 2005


Quoting "Mario H. Basa" <mhbasa at YAHOO.COM>:

> Hi.
>
> >From my experience, Java Mapscript still has some
> problems with threads, and can still easily bring down
> Tomcat even with the thread compile option is set.
> Please correct me if I am wrong.
>

Yes, that is probably correct, although it is not *that easy*. I have also
stressed mapscript with jmeter and actually not found errors, but I did not
cover querying.
That is why I voted for improved thread safety when the devs showed their wishlists.


> What I did was I synchronized the class that does the
> map processing, and now my test app can survive
> benchmarking with JMeter. Here are my results as
> compared with a simillar PHP CGI program:
>

This is definitely a correct workaround.

> 4 threads (requests) per second, repeated 25 times
>
> PHP Mapscript 1.8 to 1.9 pages per second
> Java Mapscript 2.3 to 2.5 pages per second
>
> I was honestly surprised with the result and it is
> encouraging me to work with Java Mapscript even in a
> synchronized mode.
>

Were you using apache 1.3 or 2.x in the php tests? Apache 1.3 uses a fork based
model, that while being extremely safe and sound is not as fast as a threaded
model. Apache 2.x has threads and should be faster.

Regards,
Umberto

> mario
> yokohama,japan
>
>
> --- Joseph Miller <miller_joseph at BAH.COM> wrote:
>
> > Umberto,
> >
> > 1)I don't think I compiled specifically with
> > multi-threading because it
> > wasn't an option listed in the nmake.opt for
> > Microsoft Visual C++  options
> > file???  The last I heard multithreading was not
> > even on the horizon for
> > mapserver and yet I see it in the Unix build options
> > file?  What do I need
> > to do this?
> >
> > 2)I tried both options you mentioned, I had the
> > problem when passed the
> > same mapObj from request to request and stored it in
> > the session and when I
> > set it to null after every request and instantiated
> > it and assigned
> > attributes based on other variables stored in the
> > requests and sessions?
> > I'm assuming the latter is preferred?
> >
> > Thanks,
> > Joe Miller
> >
> > On Mon, 28 Feb 2005 09:44:21 +0100, Umberto
> > Nicoletti
> > <unicoletti at PROMETEO.IT> wrote:
> >
> > >Did you enable threads support?
> > >Java, and especially servlets, are definitely
> > highly concurrent
> > >environment, so you have to enable thread support
> > when compiling
> > >mapserver and mapscript. One very problematic spot
> > with regards to
> > >threads is in fact the parser of .map files.
> > >
> > >Do you attempt to reuse the same mapObj across
> > multiple requests or just
> > >create one and dispose as soon as you are done
> > within a single request?
> > >
> > >HTH,
> > >Umberto
> > >
> > >
> > >On Mon, 2005-02-28 at 00:53 -0500, Miller Joseph
> > wrote:
> > >> Hi,
> > >> I'm having a baffling problem with a nightly
> > build of Java Mapscript
> > >> from about a month ago that I am running on
> > Windows 2000 with Tomcat
> > >> 5.5.4.
> > >>
> > >> The symptom I see is that I can generate the
> > default image but after the
> > >> fourth or fifth time that I pass a new envelope
> > to change the extent of
> > >> the image I get the following error:
> > >>
> > >> The relevant part of the stack trace:
> > >> java.lang.UnknownError: Failed to draw layer
> > named 'world'.
> > >>         at
> >
> edu.umn.gis.mapscript.mapscriptJNI.mapObj_draw(Native
> > Method)
> > >>         at
> > edu.umn.gis.mapscript.mapObj.draw(mapObj.java:397)
> > >>
> > >> Occasionally I'll get a flex scanner error or
> > tomcat will crash with an
> > >> Exception_Access_Violation memmove error similar
> > to the one referred to
> > >> here:
> > >>
> >
> http://forum.java.sun.com/thread.jspa?forumID=52&messageID=1124599&threa
> > >> dID=286832
> > >>
> > >> All of this happens whether I instatiate new
> > instances of the mapObj and
> > >> set everything to null or if I use the same
> > mapObj throughout and only
> > >> after a few passes, suggesting to me that there
> > is a memory issue
> > >> somewhere.  I can pass on some specific code, but
> > all I am really doing
> > >> is creating new envelopes to store extents and
> > then assigning them to
> > >> the mapObj or extracting the corner coordinates
> > and setting the extent
> > >> with them.
> > >>
> > >> I've been fighting this for a frustrating week
> > now.  Does anyone have
> > >> any advice?
> > >>
> > >> Thanks,
> > >> Joe Miller
> > >--
> > >Umberto Nicoletti
> > <Mercury> At that point it
> > will
> > >+390415701366   unicoletti at prometeo.it
> > compile, but segfault, as
> > it should..
> > >Prometeo S.R.L. The Software Experience
> >
> > Umberto,
> >
> > 1)I don't think I compiled specifically with
> > multi-threading because it
> > wasn't an option listed in the nmake.opt for
> > Microsoft Visual C++  options
> > file???  The last I heard multithreading was not
> > even on the horizon for
> > mapserver and yet I see it in the Unix build options
> > file?  What do I need
> > to do this?
> >
> > 2)I tried both options you mentioned, I had the
> > problem when passed the
> > same mapObj from request to request and stored it in
> > the session and when I
> > set it to null after every request and instantiated
> > it and assigned
> > attributes based on other variables stored in the
> > requests and sessions?
> > I'm assuming the latter is preferred?
> >
> > Thanks,
> > Joe Miller
> >
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Sports - Sign up for Fantasy Baseball.
> http://baseball.fantasysports.yahoo.com/
>



More information about the mapserver-users mailing list