Wir betreiben auf tomcat 6 ein lferay-Portal. Jedes Portlet ist eine enthaltene Webanwendung, die alle Bibliotheken enthält, die das Portlet selbst benötigt. Wir haben derzeit 30 Portlets. Das Ergebnis davon ist, dass die Permgenität unseres Katers mit jedem von uns bereitgestellten Portlet zunimmt.
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 Performance durch die Erhöhung der Permgengröße? Wir laufen derzeit bei 512 MB. Ich habe wenig bis gar 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.
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 völlig in Ordnung.
Der Nachteil eines großen PermGen ist, dass Sie weniger Systemspeicher haben, den Sie dann für Heap (Xmx) zuweisen können.
Andererseits würde ich Ihnen raten, die Vorteile eines Portlets als eigenständige Entitäten zu überdenken. Zum Beispiel:
lib/ext
libs zu Portlets lib
libraries zu wechseln (dies kann ärgerlicher sein) Portal-Bibliotheken); Soweit ich mich erinnere, macht Liferay SDK es auch leicht, einen ähnlichen Schalter mit ant zu machen, um einen ähnlichen Schalter im Handumdrehen zu machen, indem man eine zusätzliche ant-Aufgabe hinzufügt, um die Abhängigkeiten aufzulösen und sie aus Portlet lib
wie benötigt zu löschen
PermGen-Speicher kann durch vollständige Sammlungen als Garbage Collection gesammelt werden, so dass die Menge der GC-Zeit erhöht werden kann, wenn eine vollständige Sammlung stattfindet.
Diese Sammlungen sollten jedoch nicht zu oft stattfinden, und würden in der Regel noch weniger als eine Sekunde dauern bis zum vollen GC 1 GB permgen Speicher - ich ziehe nur diese Zahl aus (meinem etwas dunstigen) Speicher, also wenn Sie es sind wirklich besorgt über GC-Zeiten zu einigen Timing-Tests selbst (verwenden Sie -verbose:gc
und lesen Sie die Protokolle, mehr Details hier )
Die zulässige Größe liegt außerhalb von OLD Gen - also bitte nicht verwechseln. Vereinbart mit dem zweiten Punkt - wir können die Dauer des Maximums so weit erhöhen wie wir können - da die Speicherkapazität ziemlich niedrig ist, würde dies 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.