nonlinear response times on multiple concurrent requests for same data
I have a report page that when going through the maximum amount of data takes maybe 5 seconds to generate on both my Linux server and on the Windows machine I use for development. This report page is a Page Template generated from external product code. There is no external database involved - just Zope objects. I was getting weird periods of serious slowdown on my server, and traced the problem to multiple users running this report at the same time. On the windows machine, if I generate 4 requests, the time to return all of them is approximately 20 seconds or x*N response time. On the Linux machine, however, I seem to be seeing MUCH longer response times for simultaneous requests for the same data. Could this be an issue with the way in which I have Zope configured on the server? or does the Linux version do something differently? I have seen hints of "read only" transactions, but have not been able to figure out how to code these. Is there something I could do to make these read requests for the same data not interfere with each other? --Sean
Sean Hastings wrote:
I have a report page that when going through the maximum amount of data takes maybe 5 seconds to generate on both my Linux server and on the Windows machine I use for development. This report page is a Page Template generated from external product code. There is no external database involved - just Zope objects.
I was getting weird periods of serious slowdown on my server, and traced the problem to multiple users running this report at the same time.
The Zope application server maintains a pool of ZODB connections for each storage being used. Each pool (the default pool size is 7) has an independent object cache associated with it. When running a request which touches lots of objects, a connection which already has most of them in cache will return *much* faster than one which must reconstitute them from the underlying storage. When an application thread begins to run a request, it acquires connections from that pool, typically getting the most-recently-used connection first. Your symptoms sound almost as though the Windows version is running single-threaded, so that the "simultaneous" requests end up being serialized; they thus all use the same connection / cache, and your report is thus doing only a linear amount of work. If the Linux machine
On the windows machine, if I generate 4 requests, the time to return all of them is approximately 20 seconds or x*N response time. On the Linux machine, however, I seem to be seeing MUCH longer response times for simultaneous requests for the same data. Could this be an issue with the way in which I have Zope configured on the server? or does the Linux version do something differently?
I have seen hints of "read only" transactions, but have not been able to figure out how to code these. Is there something I could do to make these read requests for the same data not interfere with each other?
Try cranking down the number of threads in your Linux server, and see if that helps (there is a setting for that in zope.conf, but I don't remember the spelling). Tres. -- =============================================================== Tres Seaver tseaver@zope.com Zope Corporation "Zope Dealers" http://www.zope.com
participants (2)
-
Sean Hastings -
Tres Seaver