i made some changes to the code. (posted one jsp at the end of this mail)
. change was, to avoid to store values in the session and keeped the values as
hiddens in forms.
looks like it worked. But
. yes, connections are closed, im requesting a connection from the datasource
and after use it i close the Statement, the ResultSet and the Connection on
every jsp.
. im kind a newbie, how can i look into the memory leak?
To devel , i run on my laptop (a macbook pro) a local postgres, this postgres
has a 5 non-superuser connection limit, but i never had problems with that part
since im the only user testing. At first i thought that the database was
imposing limits, but i had no logs at all in the database (i have it with logs
at debug level). And moving my application to a production server (with 200
connections available) has the same problem (after a while i get a memory heap
full message which is logic on this situation i think)
Here's one of the jsp's (all the 3 are the same, the only thing that changes
are the db tables where the queries are executed)
--
<%--
Document : displayTime
Created on : Feb 13, 2011, 5:27:00 PM
Author : alz
--%>
<%@page import="java.sql.ResultSet"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="java.util.Enumeration"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%
/*
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String parameter = (String) e.nextElement();
out.println(parameter + ":" + request.getParameter(parameter));
}
}
*/
java.sql.Connection c1;
java.sql.Statement s1;
java.sql.ResultSet rs1;
c1 = null;
s1 = null;
rs1 = null;
DataSource ds = (DataSource) new
InitialContext().lookup("java:/comp/env/jdbc/postgres");
c1 = ds.getConnection();
s1 = c1.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String query = "select distinct(name) from list.vdn where
meas='int' order by name";
rs1 = s1.executeQuery(query);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/lcms3.css" rel="stylesheet" type="text/css" />
</head>
<body class="bodyframeless">
<%
if (request.getParameter("vdnFecha") == null) {
%>
<table>
<tr><td><form name="agentForm" action="<%
request.getRequestURI();%>" method="POST">
<select name="vdn" size="7" >
<%
while (rs1.next()) {
%>
<option value="<%= rs1.getString("name")%>"><%=
rs1.getString("name")%></option>
<%
}
%>
</select><br>
<input type="submit" name="c_vdn" value="vdn">
</form>
</td>
<td>
<form name="dateForm" action="<%
request.getRequestURI();%>" method="POST">
<%
if (request.getParameter("vdn")
!= null) {
out.println("<input
type=\"hidden\" name=\"vdn\" value=\"" + request.getParameter("vdn") + "\">");
}
%>
<select name="vdnFecha" size="7">
<%
if
(request.getParameter("vdn") != null) {
rs1 =
s1.executeQuery("select distinct(measdate) from list.bcmsvdn where vdnname='" +
request.getParameter("vdn") + "' order by measdate desc");
while (rs1.next()) {
%>
<option value="<%= rs1.getString("measdate")%>"><%=
rs1.getString("measdate")%></option>
<%
}
}
%>
</select>
<br>
<input type="submit" name="c_measdate" value="fecha">
</form>
</td></tr></table>
<%
} else {
//mostrar resultados y poner link de
reset
out.println("<a href=\"" +
request.getRequestURI() + "\">Seleccionar otro agente</a>");
%>
<table>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>servlevel</th>
<th>Inicio</th>
<th>Fin</th>
<th>Ofrec</th>
<th>ACD</th>
<th>P aten</th>
<th>aband</th>
<th>P aband</th>
<th>P conv/hold</th>
<th>Conn</th>
<th>flowout</th>
<th>Oc/desc</th>
<th>inserv</th>
</tr>
<%
rs1 = s1.executeQuery("select * from
list.bcmsvdn where vdnname='" + request.getParameter("vdn") + "' and
measdate='" + request.getParameter("vdnFecha") + "'");
while (rs1.next()) {
%>
<tr>
<td><%= rs1.getString("vdn")%></td>
<td><%= rs1.getString("vdnname")%></td>
<td><%= rs1.getInt("acceptableservicelevel")%></td>
<%
if
(rs1.getString("day").equals("1955-10-17")) {
out.println("<td>"
+ rs1.getString("starttime") + "</td>");
out.println("<td>"
+ rs1.getString("stoptime") + "</td>");
} else {
out.println("<td>"
+ rs1.getString("day") + "</td>");
out.println("<td></td>");
}
%>
<td><%= rs1.getInt("callsoffered")%></td>
<td><%= rs1.getInt("acdcalls")%></td>
<td><%= rs1.getInt("avgspeedans")%></td>
<td><%= rs1.getInt("abandcalls")%></td>
<td><%= rs1.getInt("avgabandtime")%></td>
<td><%= rs1.getInt("avgtalkhold")%></td>
<td><%= rs1.getInt("conncalls")%></td>
<td><%= rs1.getInt("flowout")%></td>
<td><%= rs1.getInt("callsbusydisc")%></td>
<td><%= rs1.getInt("inservlevel")%></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
<%
rs1.close();
s1.close();
c1.close();
%>
--
On Mar 21, 2011, at 11:40 AM, Christopher Schultz wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Alexis,
>
> On 3/21/2011 8:17 AM, alexis wrote:
>> Problem is, after 2 or 3 reloads or moving from one jsp to another
>> one, pages are not loaded anymore, browser keeps loading for ever.
>
> Take some thread dumps. I suspect that you are waiting for a database
> connection to become available. Are you calling Connection.close() in a
> finally block in your JSP? Or are you using a tab library that handles
> all that complexity for you?
>
>> If a redeploy the app I get a memory leak.
>
> :(
>
> Have you looked into that?
>
>> Using a profiler the http-8080 threads are the one that looks that
>> enters to wait.
>
> Of course they are: there's virtually nothing else running. The question
> is *where* are they entering a wait?
>
>> Any help will be really helpful.
>
> Can you post some or all of your JSP?
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAk2HY0wACgkQ9CaO5/Lv0PCXRQCfQbrohH6wQ+Sa5QZvasyvO2MI
> Ev4An2IOdFF1NSmbNDzr7hS6a/f7XY60
> =uwMs
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]