2010-12-11 12 views
2

Ich entwickle eine Webanwendung (mit JBoss und Icefaces), die ein Servlet verwendet, um eine Excel- oder PDF-Datei zu erstellen und an den Browser zu senden.Servlet von Icefaces aufgerufen webapp erzeugt konstant hohe CPU-Auslastung auf Client

Ich habe jedoch Leistungsprobleme, nachdem das Servlet aufgerufen wurde, was zu einer konstant hohen (~ 50%) CPU-Auslastung des Browsers führt. Getestet in Firefox und Internet Explorer auf verschiedenen Rechnern. Die hohe CPU-Auslastung tritt mit einer kleinen Verzögerung (eine halbe Minute) nach dem Aufruf des Servlets auf und bleibt hoch (bis ich den Browser schließe oder die Seite neu lade). Ob ich die erstellte Datei lade oder direkt öffne, macht keinen Unterschied.

Ich bin ratlos, wie dies geschehen kann ...

Gibt es eine Möglichkeit/debug zu analysieren den Browser, um herauszufinden, was den CPU-Verbrauch verursacht?

UPDATE:

ich gefunden habe, dass auf jeden Fall auf die ICEfaces Webapp verwandt ist. Wenn ich meine direkte HTML-Verbindung zu meinem Servlet durch einen Javascript-Aufruf ersetze, der das Servlet in einem neuen Fenster öffnet (mit window.open), dann kann ich die erzeugte Datei ohne Probleme herunterladen.

Auch wenn ich mich in meiner Anwendung auslogge, geht die CPU-Auslastung wieder normal zurück!

UPDATE:

Ok, jetzt Firebug half mir auf: Nachdem das Servlet aufgerufen wurde ich in der Firebug-Konsole zu sehen, dass es XMLHtppRequests sind alle Millisekunden. Jetzt kann ich die CPU-Auslastung verstehen!

POST http://localhost/webapp/block/receive-updated-views 

kommt und geht. Lassen Sie sich diese überprüfen ...

UPDATE: Ok ich eine iceface thread gefunden (mit dem entsprechenden iceface jira Fehler), aber die Bugtracker Staaten dies sollte bereits festgelegt werden ... irgendwie nicht mein Fall!

+0

Liegt das Problem nur am Excel- oder PDF-Dokument? Das heißt, wenn Sie es von einem anderen Server ohne Java oder Servlets bedienen? Wenn ja, benötigt diese Frage die Tags [java] und [servlets] nicht. –

+0

Thx. Es bezieht sich definitiv auf die Webanwendung, die Servlets und Icefaces verwendet. Ich habe keine anderen Probleme mit Excel-Downloads oder meinem Browser. –

Antwort

1

Browser führt Servlets nicht aus. Browser läuft/zeigt die Ausgabe an, die vom Servlet erzeugt wird. Es ist die Ausgabe, die eine hohe Belastung verursacht. Aufgrund der bisher wenigen Informationen ist es schwierig zu sagen, was das Problem mit der Ausgabe ist. Firebug kann viele Einblicke geben, was im Webbrowser passiert.

Normalerweise kann eine außergewöhnlich große HTML-Tabelle oder ein ineffizienter Teil des JavaScript-Codes eine Menge CPU-/Speicherressourcen belegen. Aber mit einem Binärdatei-Download wie XLS/PDF sollte dies eigentlich nicht passieren. Die Ursache ist dann wahrscheinlich tiefer. Sehen Sie eine Ressourcennutzung, wenn Sie eine Datei-zu-Datei-Kopie auf der Festplatte erstellen? Wenn dies der Fall ist, dann ist es möglicherweise eine schlechte Festplatte oder ein schlechter Festplattentreiber oder eine Festplatten-DMA wird ausgeschaltet.


aktualisieren: wie pro Ihre Untersuchung mit Hilfe von Firebug, es so aussehen, dass Sie IceFaces' ice:commandButton oder ice:commandLink herunterladen, um die Datei verwenden. Ersetzen Sie sie durch das normale JSF h:commandButton oder h:commandLink, damit es nicht unnötig JS-Code erzeugt, der dafür verantwortlich ist.

+0

Thx. Da es sich um eine Binärdatei handelt, verstehe ich tatsächlich nicht, warum es passiert. Und da es auf verschiedenen Rechnern vorkommt, ist es mit der Webanwendung verbunden und definitiv nicht mit der Festplatte. –

+0

Thx wieder. Eigentlich benutze ich kein commandButton, aber ein einfaches html a href –

+0

OK, das ist dann IceFaces eigene Kuriosität. Da ich IceFaces nicht verwende, kann ich keine ausführlichere Antwort geben. Zumindest hat mein Firebug-Vorschlag Ihnen geholfen, die Ursache zu finden :) – BalusC

1

Wenn der CPU-Verbrauch wirklich vom Browser kommt, dann können Sie nichts dagegen tun - es ist entweder der PDF- oder der Excel-Viewer.

Wenn sich der Server auf demselben Computer befindet und die CPU-Last vom Servlet kommt, müssen Sie ihn optimieren. Gib uns Code dafür.

+0

Thx. CPU-Verbrauch tritt im Browser auf - nicht auf dem Server! Und wie es auch passiert, wenn ich die Datei herunterlade, kann es kein Browser Addon oder Viewer sein, nehme ich an! –

0

Problem gelöst (eigentlich ist es eher ein Workaround).

Es ist eine Iceface Prob, die nach der bugtracker behoben werden sollte. Aber wie es tatsächlich noch vorhanden ist, konnte ich es nur beheben, indem ich das Servlet in einem neuen Fenster, das von Javascript erstellt wurde, aufruft. (Wie bereits in meiner bearbeiteten Frage erwähnt). Es ist wirklich keine nette Lösung und hat den Nachteil, dass der Browser keine Popups blockieren darf. Aber es ist auch eine Lösung, die ich mehrmals im Netz gesehen habe (wie here).

public void exportToExcel(ActionEvent e) { 
    JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "window.open (\"downloadServlet.dl?contentType=excel\",\"report\")"); 
}