2012-04-19 19 views
8

Wir betreiben ein liveray-Portal auf tomcat 6. Jedes Portlet ist eine enthaltene Webanwendung und enthält daher alle Bibliotheken, die das Portlet selbst benötigt. Wir haben derzeit 30 Portlets. Dies hat zur Folge, dass die Permgenität unseres Tomcat mit jedem von uns bereitgestellten Portlet zunimmt.Große Permgen-Größe + Leistungseinfluss

Wir haben jetzt zwei Wege, denen wir folgen können. Verschieben Sie einige der Bibliotheken, die von jedem unserer Portlets verwendet werden, in die freigegebene Tomcat-Bibliothek. Dies würde Dinge wie Frühling/Winterschlaf/cxf/.... beinhalten, um unsere Permgengröße zu verringern. Oder einfacher wäre es, die Permgengröße zu erhöhen.

Diese zweite Option würde es uns ermöglichen, jedes Portlet als eigenständige Entität zu behalten.

Die Frage ist nun, gibt es irgendwelche negativen Auswirkungen auf die Leistung durch Erhöhung der Permgengröße? Wir laufen derzeit bei 512 MB. Ich habe wenig bis keine Informationen darüber gefunden. Aber ich habe einen Post gefunden, wo Leute darüber reden, auf 1024MB permgen Größe ohne Probleme zu laufen.

+0

Ich würde nicht erwarten, dass ein 1 GB PermGen ein Problem verursacht. –

+1

Verwandte Frage: http://stackoverflow.com/q/9636328/1140748 –

+0

Dies beantwortet nicht Ihre Frage, sondern fügt einen weiteren Aspekt hinzu: Ich halte die Entscheidung, 1 Portlet pro Plugin eine künstliche Einschränkung zu haben. Mit der Anzahl von Portlets, die Sie geben, wette ich, dass es einige Verwandte gibt, von denen ich empfehle, zusammenpackende zusammen zu betrachten. Dies wird sich um Ihre Schmerzen kümmern und IMHO den Überblick über Ihre Plugins erhöhen. –

Antwort

3

Solange Sie genug Speicher auf Ihrem Server haben, kann ich mir nicht vorstellen, dass irgendetwas schief gehen kann. Wenn Sie das nicht tun, dann würde der Tomcat wahrscheinlich gar nicht starten, weil er nicht genügend Speicher reservieren könnte. Also, wenn es anfängt, bist du gut. Soweit ich weiß, ist 1GB PermGen perfekt.

Der Nachteil eines großen PermGen ist, dass Sie weniger Systemspeicher haben, den Sie dann für Heap (Xmx) zuweisen können.

Auf der anderen Seite würde ich Ihnen raten, die Vorteile von Portlets als eigenständige Entitäten zu überdenken. Zum Beispiel:

  • Interoperabilitätsprobleme: wenn alle Portlets möglicherweise verschiedene Versionen derselben Bibliotheken verwenden dürfen, besteht ein gewisses Risiko, dass sie miteinander und mit dem Portal nicht kooperieren, wie sich
  • bestimmt
  • Leistung: PermGen Fußabdruck ist nur eine Sache, aber das Hinzufügen von Gläsern hier und da in Portlets erfordert zusätzliche Dateideskriptoren; Ich weiß nichts über Windows, aber das wird auf lange Sicht die Leistung des Linux-Servers beeinträchtigen.
  • Freiheit Änderung: Wenn Sie Maven verwenden Ihre Portlets zu bauen, das Umschalten von lib/ext Libs zu lib Bibliotheken des Portlets ist nur eine Frage der Abhängigkeiten Geltungsbereich zu ändern (dies mit Portal Libs ärgerlicher sein kann); soweit ich mich erinnere, auch Liferay SDK macht es einfach, einen ähnlichen Schalter mit Ant zu tun einen ähnlichen Schalter in einem Augenblick zu tun, indem zusätzliche Ant-Task Hinzufügen die Abhängigkeiten zu lösen und sie von Portlets lib nach Bedarf
+0

Perm Gen ist nicht Teil des Java-Heap, es wird keine Auswirkungen auf XMX haben –

+0

Es wird nicht auf eigene - aber es wird Sie mit weniger Speicher für Xmx zuweisen, nicht wahr? –

+0

Ja, du hast recht, Michal - habe 'weniger Speicher' nicht als 'weniger Systemspeicher' gelesen. –

1

Löschen PermGen-Speicher kann durch vollständige Sammlungen in Garbage Collection gesammelt werden, so dass bei einer vollständigen Sammlung die GC-Zeit erhöht werden kann.

Diese Sammlungen sollten nicht zu oft stattfinden, und würde in der Regel noch weniger als eine Sekunde dauern, um volle GC 1 GB permgen Speicher - ich ziehe gerade diese Zahl aus (mein etwas trübe) Speicher, also wenn Sie sind wirklich besorgt über GC-Zeiten zu einigen Timing-Tests selbst (verwenden Sie -verbose:gc und lesen Sie die Protokolle, mehr Details here)

0

Permgen Größe ist außerhalb der alten Gen - also bitte nicht durcheinander. Einverstanden auf den 2. Punkt - wir können die Dauerleistung so viel erhöhen wie wir können - da Speicher ziemlich billig ist, aber das würde eine Frage aufwerfen, wie wir unseren Code verwalten. Warum zum Teufel brauchen wir so viel von Perm -Ist JTa so viel konsumieren - wie viele Klasse laden wir? Wie viele Dateideskriptoren öffnet die App (überprüfen Sie mit dem Befehl lsof). Wir sollten versuchen, diese zu beantworten.

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge jederzeit kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) hast, wirst du das tun in der Lage sein [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). –

+0

Da, glaube ich, der Vorwurf der Vermischung auf meine Antwort gerichtet war, habe ich den fraglichen Ausdruck etwas umformuliert, um es klarer zu machen. Ich meinte nur, dass das Erhöhen des Stücks Systemgedächtnis, das PermGen gegeben wird, Sie mit weniger "Kuchen" belässt, als Xmx zu geben. Was Ihre Frage der Speichernutzung anbelangt, so haben Sie absolut Recht in Ihrer Verwirrung, aber das OP läuft liveray, und liveray erstellt separate ClassLoader für jedes Portlet, das Sie darauf bereitstellen. Dies kann bedeuten, dass beispielsweise der Frühling mehrere Male in Klassen eingeteilt wird und auf diese Weise PermGen mit Liferay leicht durch das Dach geht. –