Pessoal, tenho um site na internet que tem muitos acessos diários.
Gostaria de saber se alguem sabe qual pode ser a causa deste erro:
com.evermind.server.http.HttpIOException: Broken pipe
at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:210)
at com.evermind.server.http.EvermindJSPWriter.writeOut(EvermindJSPWriter.java:542)
at com.evermind.server.http.EvermindJSPWriter.jspflush(EvermindJSPWriter.java:439)
at com.evermind.server.http.EvermindJSPWriter.flush(EvermindJSPWriter.java:415)
at freemarker.core.Environment.process(Environment.java:17
at freemarker.template.Template.process(Template.java:232)
at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:16
at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:530)
at org.apache.struts2.components.UIBean.end(UIBean.java:484)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)
at _admin._admin__produtos__list._jspService(_admin__produtos__list.java:2560)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
...
Se alguem puder me dar uma dica da provavel causa…
Experimente conectar-se ao seu site via Internet (para que a conexão seja “lenta”) e experimente fechar o browser enquanto uma página estiver carregando. Pode ser que essa exceção apareça.
[quote=thingol]Experimente conectar-se ao seu site via Internet (para que a conexão seja “lenta”) e experimente fechar o browser enquanto uma página estiver carregando. Pode ser que essa exceção apareça.
[/quote]
Ok, mas isso tem acontecido muitas vezes… é praticamente impossivel que todos estejam fechando o site enquanto ele esta pra ser carregado.
Isso sempre acontece na pagina inicial do site… logo depois de muitas vezes este erro ocorrido, o site para de funcionar… O site começa a estourar um erro de falta de conexões.
Na pagina inicial tem um flash muito grande, que demora pra carregar… pode ter alguma coisa a ver?
Abraços!
Hum… arquivos estáticos devem ser hospedados no web server, não no web container. Justamente para evitar problemas de servir arquivos grandes.
Por exemplo: digamos que você use o Tomcat + Apache HTTP Server. (No seu caso parece ser o OC4J e o Oracle HTTP Server, mas não tenho certeza).
Normalmente você hospeda os JSPs no Tomcat e os .html, flash, .jpg etc. no Apache HTTP Server.
[quote=thingol]Hum… arquivos estáticos devem ser hospedados no web server, não no web container. Justamente para evitar problemas de servir arquivos grandes.
Por exemplo: digamos que você use o Tomcat + Apache HTTP Server. (No seu caso parece ser o OC4J e o Oracle HTTP Server, mas não tenho certeza).
Normalmente você hospeda os JSPs no Tomcat e os .html, flash, .jpg etc. no Apache HTTP Server. [/quote]
Tens razão, aqui utilizamos o OC4J…
O que sei te informar da estrutura é que todas as imagens e medias ficam em um filesystem no linux que conseguimos acessar então por uma url que é diferente da do site por exemplo.
Acho que essa url mapeia direto a pasta onde contem as medias…
Mas mesmo que essa informação não te ajude… Tu sabe me dizer se o tamanho destes arquivos da pagina inicial pode ser o problema do Broken Pipe e se isso tem algum relação com o erro a seguir:
java.sql.SQLException: Unable to get a physical connection from the database…there are no connections available.
Continua dizendo que isso ocorre na pagina inicial.
Tem alguma ideia de possivel relação?? Sou novo no java e o funcionamento dele no servidor pra mim ainda é uma novidade! Problemas bizarros alias! aeaehha
Abraços!
Vocês usam pool de conexão? Se não usarem, pode ser que algum bug de programação acabe deixando conexões abertas e vocês tenham esgotado o número de conexões possíveis.
[quote=thingol][quote]
java.sql.SQLException: Unable to get a physical connection from the database…there are no connections available.
[/quote]
Vocês usam pool de conexão? Se não usarem, pode ser que algum bug de programação acabe deixando conexões abertas e vocês tenham esgotado o número de conexões possíveis. [/quote]
Usamos um pool de conexões sim…
Vou te passar a classe de conexão pra tu dar uma olhada:
package br.com.renner.dao;
import br.com.renner.util.ServiceLocator;
import br.com.renner.util.ServiceLocatorException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DataBaseConnection {
static final String JAVA_ENVIRONMENT = "java:/comp/env";
static final String JDBC_NAMING = "jdbc/Site";
private static ServiceLocator sl = null;
public static Connection getConnection() throws Exception {
InitialContext initialContext;
DataSource dataSource;
Connection connection = null;
initialContext = new InitialContext();
// OC4J
sl = ServiceLocator.getInstance();
dataSource = (DataSource) sl.getService("java:comp/env/jdbc/Site");
dataSource = (DataSource) initialContext.lookup(JDBC_NAMING);
connection = dataSource.getConnection();
return connection;
}
}
Em cada metodo DAO eu abro uma conexão dando getConnection e no finaly destruo tudo com .close() depois = null
alem de fechar os resultSet´s e os preparedStatement.
É assim que funciona…