From: marek at lewczuk.com (Marek Lewczuk) Date: Wed, 19 Apr 2006 09:07:42 +0200 Subject: [Pljava-dev] out of memory In-Reply-To: <443C9BF2.2070302@tada.se> References: <443B63F0.4050803@tada.se> <443BC400.4030806@lewczuk.com> <443BCC32.2090306@tada.se> <443C994F.6060308@lewczuk.com> <443C9BF2.2070302@tada.se> Message-ID: <4445E1BE.8060002@lewczuk.com> Thomas Hallgren napisa?(a): > Marek, > You definitely have a memory leak somewhere. The process consumes 2.5 > Gigabytes when it seems to hang. From the looks of it, it doesn't > actually hang but it is very, very slow (consumes 0.6 %CPU). Your > main-thread may well hang at this point, the rest of the activity might > be a struggling garbage collector. Is there any chance that you have a > huge map or array building up somewhere? There are no maps at all, but I find the part of the code which (when enabled) leads to memory leak. // insert into regional registrations table { Statement s = connection.createStatement(); ResultSet r = s.executeQuery("SELECT oCarTypeId FROM samarapp_data.sapp_cda_pl_cep_rre WHERE oCarTypeId = " + co + " AND nCarTypeId = " + cn + " AND nMakeId = " + mk + " AND nModelId = " + mo + " AND nDistrictW = " + rw + " AND nDistrictP = " + rp + " AND productionYear = " + result.getInt("productionyear") + " AND registrationYear = " + result.getInt("registrationyear")); if (r.next() == false) s.execute("INSERT INTO samarapp_data.sapp_cda_pl_cep_rre (oCarTypeId, nCarTypeId, nMakeId, nModelId, nDistrictW, nDistrictP, productionYear, registrationYear, registrationMonth" + result.getInt("registrationmonth") + ") VALUES (" + co + "," + cn + "," + mk + "," + mo + "," + rw + "," + rp + "," + result.getInt("productionyear") + "," + result.getInt("registrationyear") + "," + result.getInt("registrationamount") + ")"); else s.execute("UPDATE samarapp_data.sapp_cda_pl_cep_rre SET registrationMonth" + result.getInt("registrationmonth") + "=" + result.getInt("registrationamount") + " WHERE oCarTypeId = " + co + " AND nCarTypeId = " + cn + " AND nMakeId = " + mk + " AND nModelId = " + mo + " AND nDistrictW = " + rw + " AND nDistrictP = " + rp + " AND productionYear = " + result.getInt("productionyear") + " AND registrationYear = " + result.getInt("registrationyear")); r.close(); s.close(); } I thought that change from "execute" to "executeUpdate" will fix this but unfortunatelly it didn't. Would you like to see the full source code ? > Not normally no. As I said previously, I'm trying to eliminate possible > causes for the leak. The more I know about your code and your setup, the > better the prognoses that I find something. Ideally, I'd like to look at > your function. You still keep your configuration a secret. What system > are you using? PostgreSQL version, OS version, Java version? PostgreSQL 8.1.0, Linux Debian, Java JDK1.5.0_04