I've been experimenting with GeoServer 1.7.4 as a possible alternative to an expensive, proprietary product.
I've set up a WMS service with 4 polygon layers inside it, nothing particularly complicated and simple rendering. Data is served from (DataStore) ArcSDE, with the feature classes in the web mercator projection. I making requests for EPSG:900913. I'm trying to get the source projection and requested projection to be the same to avoid reprojecting on-the-fly, but I'm not sure that I'm succeeding at that.
I'm using Tomcat 6.0 and JDK 1.6 on a four-processor, 2.5 GHz Windows Server 2003 box with 4 GB RAM.
Single, isolated WMS requests to this service have a response time of about 2.5 seconds. That's a little slow, but our real concern is throughput - being able to handle a high load of simultaneous requests.
To measure that, I have a home-grown multi-threaded application that can throw multiple requests at a map service, at whatever rate I want, and report the response times.
When I throw a new request at my WMS service on GeoServer every 3000 milliseconds for 30 seconds, the average response time is 2.5 seconds.
When I throw a new request every 2400 ms for 30 seconds, the average response time is 4.6 seconds.
When I throw a new request every 1000 ms for 30 seconds, the average response time is 31.9 seconds. The response rate does not "ramp up" slowly... it pretty quickly gets to responses in the 30 second range, and stays up there.
Clearly it's not scaling well. Even when hitting it "hard" like in the above test, the CPUs on the server are showing very low utilization (can hardly tell there's anything special going on).
I've tried many of the suggestions in http://geoserver.org/display/GEOSDOC/2.6+GeoServer+in+Production+Environment but haven't seen any significant benefit.
For comparison, an ArcGIS Server map service on the same machine with the same layers using the same ArcSDE data sources (plus some labels and a hill-shade raster layer that the similar GeoServer WMS service doesn't have) gives an average response time of 1.1 seconds when I throw a new request at it every 1000 ms for 30 seconds.
When I throw a new request at ArcGIS Server every 500 ms for 30 seconds, the average response time is 1.2 seconds.
And I know there's some throughput tuning on ArcGIS Server that will improve throughput that I have not yet done.
So, any suggestions for getting better throughput and scaling out of GeoServer?
David