Frage

Beim Laufen in ein Problem, bei dem JSF ist unsere Sitzungen füllen. Wir hatten ein System, den anderen Tag zum Absturz bringen. Sent den Haufen zu IBM für die Überprüfung und festgestellt, dass wir einige Sitzungen so groß wie 50M hatte. Sie stellten fest, JSF-Komponenten in der Sitzung und einige sehr groß.

So ist es eine Abstimmung, die getan werden kann? Konfigurationselemente zu betrachten? Oder andere Richtung.

Unser System ist für die Präsentationsschicht mit JSF und Spring baut, ist das hintere Ende EJB, Frühling und alle, die auf WebSphere 6.1 läuft Hibernate.

War es hilfreich?

Lösung

JSF ist eine nützliche Technik, aber man kann sich sicher hängen mit.

Es klingt wie, entweder Sie die Größe der Ansicht Zustandes aufzublasen (durch große Werte auf Komponenten Einstellung) oder Sie sind undichte Verweise auf Komponenten in anderen Sitzungszustand (was schlecht wäre). Ein weiterer potentieller Täter eine zu große Ansicht wäre (ich habe die Leichtigkeit gesehen, mit denen Menschen UI Bäume sehr große Steuergraphen führen bauen können mit Datentabellen überall). Ich weiß, dass IBM Rich Text und Tabellenkalkulations Kontrollen stellt - ich nicht kommentieren kann, welche Auswirkungen die Verwendung dieser auf Zustandsgröße haben

.

Die niedrig hängenden Früchte sind die verwalteten Bohnen für Sitzungsbereich konfiguriert ist, um Check-in Gesichter-config.xml .

JSF speichert zwei Dinge zwischen Anforderungen:

  • die Ansicht (alle Bedienelemente auf der Seite)
  • die Ansicht Zustand (der Zustand der Kontrollen)

Diese getrennt sind, weil einige Steuerelemente, wie Kinder einer Datentabelle können mehrere Zustände haben (eine für jede Reihe). Staat kann auf dem Formular entweder in einem versteckten Feld gespeichert werden (die, wenn sie unverschlüsselt, ein großes Sicherheitsrisiko sein kann) oder in der Sitzung. Um mehrere Browser-Fenster teilen die gleiche Sitzung (und in einigen Implementierungen zurück Knopfauflager) gerecht zu werden, sind mehrere Ansichten gespeichert.

  • Es sollte eine Konfigurationsoption, die Anzahl des Ansichtsstatus setzen die App in der Sitzung für einen bestimmten Benutzer zu einem bestimmten Zeitpunkt halten werden.
  • Sie können die Größe der Ansichtszustand messen, indem ein State , die die Größe des gespeicherten Ansicht / Zustandes (konfiguriert, dass eine State in faces-config.xml mit einem öffentlichen Konstruktor misst, die eine State nimmt - siehe Stack-Trace erhalten helfen, Problembereiche in Ihrer Anwendung zu identifizieren.

Andere Tipps

Dies ist das zweite System, das ich gehört habe von, dass wegen der JSF und übermäßiger Objekterstellung gestorben ist. Die andere verwendete auch Frühling und im Backend Ruhezustand. Profilieren mit OptimizeIt zeigte, dass die Back-End-Reaktion in der Größenordnung von Millisekunden für alle Anforderungen war, aber man konnte die Browser-Rendering wieder mit Stoppuhr Zeit, weil es so lange dauerte - 30 Sekunden bis zu mehreren Minuten. Speicher vom Kunden verbraucht waren lächerlich.

Ich war nur ein Beobachter, kein Mitglied des Projektteams. Ich werde fragen, ob das Problem immer und fixiert wurde, wenn ja, was ist die Lösung hätte sein können.

Aber wenn zwei Punkte einen Trend zu machen, würde ich sagen, dass JSF könnte tödlich fehlerhaft sein. Persönlich bleibe ich weg von ihm vollständig.

Warum nicht versuchen, einen Frühlings-Webfrontend und sehen, ob das hilft? Wenn Sie den Frühling Idiom folgen, sollte es eine relativ einfache Sache zu ersetzen, JSF mit JSTL-basiertem JSPs und Spring-Controller sein.

Ich arbeite an einem JSF-Projekt und stellte fest, dass wir einen Fehler hatten, wo wir mehr JSF h wurden hinzugefügt: Formularelemente. Was zu einer Kopie des gesamten Ansichtszustand wird mit jeder Form enthalten. Das Abholzen bis 1 Formular pro Seite rasierten die Seiten von ~ 2 M bis auf ~ 300K.

Sie können in Probleme mit viel laufen Bohnen als Sitzungsbereich der Sicherung.

Sie könnten versuchen, einen Blick in MyFaces Orchestra . Dies ist eine Bibliothek, die ein Gespräch Umfang bereitstellt, so dass, sobald ein Benutzer mit einem bestimmten Satz von Bohnen fertig hat, wird sie aus der Sitzung entfernt werden.

Ich verstehe, dass Frühling WebFlow ähnliche Eigenschaften hat, aber ich habe nicht wirklich in sie aussieht!

JSF speichert die Ansichten in der Sitzung zu unterstützen, es ist reich komponentenbasierte Architektur (Müssen seine Ansicht Zustand halten) und kann den Haufen füllen, wenn nicht ordnungsgemäß verwendet wird. Wenn Sie nicht über große Arbeitsabläufe haben, geht immer mit kleiner Anzahl der Ansichten pro Sitzung. Vermeiden Sie auch backingbeans in der Sitzung so viel wie möglich zu halten. Verwenden Sie benutzerdefinierte Tag das Datenobjekt nur für die nächste Anforderung Zyklus zu machen. Wir können auch Spring Web Flow mit JSF verwenden, die Viewbereich führt und Umfang fließen, wenn wir lange Arbeitsabläufe in der Anwendung haben die Anzahl der Ansichten in der Sitzung konfiguriert zu reduzieren. JSF kann zur Herstellung anspruchsvollen Benutzeroberfläche leicht verwendet werden, das Webapplikation ähnlich wie Desktop-Anwendung bauen hilft. Allot einen bestimmten Heap JSF-Framework seine Arbeit zu tun. Aber verwenden Sie den Speicher effizient in der Anwendungsseite und stellen Sie sicher, dass es keine Speicherlecks. Alle Speicherlecks müssen bei der Entwicklung selbst untersucht und korrigiert werden. Aways verwendet einen Profiler Speicherleck und Performance-Engpässe zu finden, die in der Anwendung vorhanden ist.

Mat.

Wenn Sie MyFaces verwenden <1.1.6 gibt es eine riesige Speicherleck in der Art und Weise es alte serialisierten Ansichten in der Sitzung nie Freisetzung effektiv Caches lassen, so dass sie Müll gesammelt werden können. Ich hatte ein ernstes Problem mit, dass und hatte auch 50Mb Sitzungen. Eine schnelle Aktualisierung von MyFaces behoben das Problem ohne Probleme.

Konfigurieren Sitzung persistense zur Datenbank, und es wird verwenden am wenigsten verwendeten Algorithmus wenigsten verwendete Sitzungen aus dem Speicher zu drücken. Es hat eine hohe Leistung (wenn sie richtig konfiguriert) und werden Sie concretically und schnell helfen.

Bit eines alten Thema, aber kam vor kurzem in diesen. Oft werden die Ansicht und Ansichtszustand gespeichert (wie bereits erwähnt), und die Sitzung füllt die Zurück-Taste, damit zu arbeiten. Es gibt Parameter, dies in Ihrem Deployment-Deskriptoren zu sortieren (web.xml), die eingestellt werden müssen.

Mehrere Instanzen von bestimmten Bibliotheken müssen möglicherweise mehr als eine Parametereinstellung, wie wenn MyFaces und JSF RI verwenden. Standardmäßig können sie auf ein paar ziemlich hohe Werte eingestellt werden (20 und 16 Ich glaube, respectively). Dies bedeutet, dass Sie 20-mal verwenden kann der Raum, den Sie für (Teile?) Der Sitzung sein sollte.

JSF Tuning-Tipps für Produktionsumgebung:
 - Die Verwendung von Bildern, CSS und JavaScript-Ressourcen sollten von Standard-HTML-Tags (img,link,script) nicht serverseitige, und achten Sie darauf einstellen #{request.contextPath} vor der URL zu vermeiden relative Pfade Probleme getan werden
.  - Cache statische Abschnitte der Seite (menu,header,footer) mit omnifaces cache
 - Set refresh-period Variable auf -1
 - Set project-stage zu Produktion
 - Überprüfen Sie Ihren Code Filter falls vorhanden

Überprüfen Sie auch meine Artikel „ Java Server Faces in Real- das Leben Anwendungen “auf DZone, es wird Ihnen ein vollständiges Bild über JSF in Entwicklungs-, Test- und Produktionsumgebungen geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top