FYI - this have been patched in the latest Postgresql drivers. I worked around this problem so we dont need to upgrade right away. Maybe upgrade the PostgreSQL JDBC driver next time there's an "offical" postgresql JDBC release?

[EMAIL PROTECTED] wrote:
>I've applied a patch for this to 8.0, 8.1, and HEAD cvs branches and new
>official releases should hopefully be out soon.

dave


David Blasby wrote:

Okay, I've found a pretty nasty bug in the PostGIS driver.

My dataset is a table with about 250 rows in it. Each row has the VMAP0 dataset polygon of a country in. Each row is large. If you look closely at the JDBC datastore, you'll notice that it will fetch 200 rows at a time - which means its pretty much loading in the entire dataset for each query - thats about 250mb.

This doesnt fit into the memory allocated to geoserver (especially if you're doing multiple requests at the same time), so an OutOfMemory error gets thrown and the reader is closed. So far, so good.

Closing the reader will release the result set and the statement - this frees up about 60mb of memory. It then tries to close the DB connection. This fails - most likely because it was in the middle of reading a tuple when it was rudely interupted by running out of memory.

It actually runs out of memory in PGStream.ReceiveTupleV3(), called from QueryExecutorImpl.processResults().

Later, the connection is closed and the
PooledConnectionImpl$ConnectionHandler.invoke() is called, which (because we're not AutoCommit) attempt to rollback the transaction with a con.rollback(). This is where the problem occurs.

Inside QueryExecutorImpl.processResults(), it gets a "\" from the server (highly likely from the bytea returned in the original query). It, of course, doesnt understand this and throws an "An I/O error occured while sending to the backend." error.

The end result is that the connection doesnt appear to be closed and released back to the connectionpool. This means that connections to the database are being leaked, and probably a fair amount of memory. This, of course, causes the OutOfMemory error to happen more often.

I'm probably going to have to talk to the postgresql JDBC people, but I thought I would ask here first incase people know something about. Are we doing anything "funny" with the connection pooling - I noticed there was a "funny" proxy object there?

dave




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to