Estoy trabajando en proyectos en tiempo real.

De trabajo:
Yo soy la obtención de datos de twitter y moviendo la salida a cassandra de la base de datos y, a continuación, utilizando Testrestfull webservice me estoy poniendo el resultado en formato json. Y, finalmente, las salidas se muestran en la wep de la página. estoy utilizando peces cristal servidor para la conexión de servicio web y la página web. es un verdadero proyecto a tiempo, así que estoy refrescante mi página de cada 5 segundo.

Primeros segundos no estoy recibiendo ningún error funciona bien después de 5 a 10 minutos que estoy recibiendo este error en peces cristal servidor.

De Error:
ADVERTENCIA: StandardWrapperValve[genric.ApplicationConfig]: Servlet.(servicio) para el servlet genric.ApplicationConfig tiró excepción
java.lang.OutOfMemoryError: Java heap space

No sé por qué estoy recibiendo este error y cómo solucionarlo.
Puede alguien ayudarme.

Este es mi webservice código:

public String gettweets(String st)
{
 cluster=Cluster.builder().addContactPoint("localhost").build();    
 session=cluster.connect("space");
 String query ="select * from tweet_count where createdtime='"+st+"' allow filtering;";
 ResultSet result = session.execute(query);
 String text = "[";
 for(Row r : result){
    System.out.println(r.getString("tag_name"));
   text+="{\""+"x"+"\":\""+r.getString("tag_name")+"\",\""+"y"+"\":\""+r.getInt("count")+"\"},";

}
text=text.substring(0,text.length()-1);
text+="]";

    return text;
}

Este es mi código de la página web:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body onload="load();grid();marqueeload();" style="background-color:white">
<pre style="height:25px;background-color:black;">
<div id = "title" style = "text-align:center;font-size:20px;width:100%;"><span>REAL TIME TWITTER TRENDS</span></div>
</pre>      
<div><table>
<tr><td><lable>Select Date<lable></td><td>  :  </td><td><input id="datepicker" type="text" /></td></tr></table>
</div>
<div style = "width:100%">
<div id="container2" style = "width:670px;height:300px;float:left;background-color:white;border: 1px solid green;">
<div style = "text-align:center;font-size:20px;"><span1>CHART VIEW<span1></div>
<div id="container1"></div>
</div>
<div id="container3" style = "width:670px;overflow-y:auto;height:300px;float:right;background-color:white;border: 1px solid green;"> 
<div style = "text-align:center;font-size:20px;"><span1>GRID VIEW<span1></div>                                  
<div id="Grid"></div>
</div>
</div> 
<div style = "width:100%;border: 1px solid green;height:300px;float:left;background-color:white;">
<div style = "text-align:center;font-size:20px;"><span1>Trending tweets<span1></div>
<marquee id = "marqueeid" direction="up" height="200" scrollAmount=2 scrollDelay=130 class="sidelink" onMouseDown="this.stop()" onMouseOver="this.stop()" onMouseMove="this.stop()" onMouseOut="this.start()" vspace="10" >
</marquee>
</div>
<script type="text/javascript" language="javascript">
function marqueeload()
{
var str;
$.get("http://localhost:8080/WebApplication1/webresources/generic", function(str)
{
str=str.slice(12, str.length-14);
var div=document.getElementById('marqueeid');
div.innerHTML=str;
});
}
$(function () {
$("#datepicker").ejDatePicker({
select: "onSelected"
});
$("#datepicker").ejDatePicker({ enabled: true });
});
function onSelected(args) {
var str = args.value;
var newstr = str.split("/",3);
if(newstr[0].length == 1){
newstr[0] = '0'+newstr[0];
}
if(newstr[1].length == 1){
newstr[1] = '0'+newstr[1];
}
var dat = newstr[2]+'-'+newstr[0]+'-'+newstr[1];
window.datetweet = dat;
$("#container1").ejChart("destroy");
grid();
load();
}
function load() {
var str;    
$.get("http://localhost:8080/WebApplication1/webresources/time/"+window.datetweet,      function(str)
{
str=str.slice(12, str.length-14);
var data=JSON.parse(str);
$("#container1").ejChart(
{
primaryXAxis:
{
title: { text: 'Tagname' },
labelRotation: 45
},
primaryYAxis:
{
range: { min: 0, max: 1000, interval: 100 },
title: { text: 'Count' }
},
commonSeriesOptions: {
type: 'column', animation: true,
tooltipFormat: "#point.x# : #point.y#"
},
series: [
{
points: data,
}
],
load:"loadTheme",
showTooltip: true,
needResize:true,
size: { height: 300 },
legend: { visible: false, position: 'top' }
});
});
}
$(document).ready(function()
{
$("#Grid").ejGrid({
dataSource: [],
allowPaging: true,
allowSorting: true,
columns: [
{ field: "x", headerText: "Trend Name", textAlign: ej.textAlign.Right, width: 10 },
{ field: "y", headerText: "Count", textAlign: ej.textAlign.Right, width: 10 }
]
});
});
function grid()
{
var str;
var url="http://localhost:8080/WebApplication1/webresources/time/"+window.datetweet;
$.get(url, function(str)
{
str=str.slice(12, str.length-14);
var obj=JSON.parse(str);
var instance = $("#Grid").ejGrid("instance");
instance._dataManager = new ej.DataManager(obj);
$("#Grid").ejGrid("model.dataSource", instance._dataManager);
});
}
window.setInterval(function() { load(); grid(); marqueeload(); }, 10000);
</script>
</body>
</html>
  • supongo que usted tiene demasiados objetos en la memoria…usted debe configurar los ajustes de la memoria; rápido….usted puede usar algo como que: -Xms750m -Xmx2048m -XX:MaxPermSize=1024m al iniciar la aplicación
  • Puede ser necesario verificar la pérdida de memoria. Impresión de la pila completa de seguimiento para comprobar la causa.
  • La razón más común para casos similares al suyo probablemente sería una pérdida de recursos en los flujos de entrada/salida, deberás publicar tu fuente si desea más ayuda, aunque.
  • He publicado el código fuente… me pueden ayudar @Techo
  • Compruebe el tamaño del conjunto de resultados, es demasiado grande ? Cerca de todos sus recursos como el conjunto de resultados, la conexión, la sesión, etc una vez terminado su trabajo.
  • Una vez que hayas terminado de hacer cosas con su ampliable objeto de sesión que se abre en session=cluster.connect("space"); tratar, llamar a un session.close() para la liberación de los recursos.
  • Gracias @Techo voy a probar esto.

InformationsquelleAutor Suresh Ram | 2014-04-29

3 Comentarios

  1. 4

    Una OOM o OOME (OutOfMemoryError) simplemente significa que la JVM corrió fuera de la memoria. Cuando esto ocurre, básicamente tienes 2 opciones:

    1. Permitir la JVM para utilizar más memoria utilizando la opción-Xmx VM argumento. Por ejemplo, para permitir la JVM para uso de 1 GB (1024 MB) de memoria:
    2. Mejorar/Corregir la aplicación para que utilice menos memoria.

    Para moer información por favor vaya a través de este enlace

    http://www.mkyong.com/eclipse/eclipse-java-lang-outofmemoryerror-java-heap-space/

    • A quien está leyendo esto, por favor tenga en cuenta sin embargo, que si una pérdida de recursos está presente, entonces el aumento de la JVM de memoria o cambiar la aplicación para utilizar menos memoria sólo retrasar lo inevitable de la JVM accidente cuando la memoria se desborda. En términos simples, se puede hacer el agujero en el barco más pequeño o hacer el barco más grande, pero el agua sigue a raudales, y el barco se hundirá menos que tapar el agujero.
    • y ¿cómo es exactamente lo que nos enchufe
    • La respuesta corta sería por escribir código eficiente desde un punto de memoria de la vista..¿Cómo lograr que este es un camino demasiado largo y complejo de un sujeto que discutir aquí.
  2. 2

    Respuesta:

    Cerrar correctamente la sesión de objeto y objeto de clúster

    por ejemplo :

    session.shutdown();
    cluster.shutdown();

    Gracias a @techo gecko

  3. 0
    1. Intentar configurar la máquina virtual para utilizar más memoria, como se muestra antes de (-Xms750m -Xmx2048m -XX:MaxPermSize=1024m ).
    2. Habilitar el registro de Recopilación de Basura (-Xloggc:/var/log/YOUR_APP/YOUR_APP-gc.de registro) y ver cómo se comporta, cómo montón es creciente. Probablemente usted tiene una pérdida de memoria.
    3. Si es así, tome HeapDump, uso YourKit para abrirlo y buscar los objetos que utilizan la mayor cantidad de memoria. Trate de averiguar por qué y solucionarlo.

Dejar respuesta

Please enter your comment!
Please enter your name here