Po-słowie na każdy temat

czyli programowanie i nie tylko

Apache Tomcat – pamięć JVM

Czas na problem, z którym musi zmierzyć się każdy programista, który często pracuje na kontenerze Apache Tomcat (tutaj dotyczy wersji 6 i 7). Mowa mianowicie o błędzie  java.lang.OutOfMemoryError: PermGen space. Pojawia się on zazwyczaj, gdy w kontenerze mamy uruchomionych kilka rozbudowanych aplikacji i wykonujemy operacje re-deployu bez restartu Tomcata. Nie jest to dobre, należy to rozwiązać, ale z uwagi na złożoność problemu i często niezrozumiałość dla początkujących programistów, problem jest bagatelizowany. Owszem jest nie jest krytyczne rozwiązanie jego (występuje wyłącznie na serwerze deweloperskim) wystarcza twardy restart kontenera aplikacyjnego i „po kłopocie”. Kiedyś przyjdzie jednak zmierzyć się z rozwiązaniem problemu i zaznajomieniem się z terminami pamięci JVM (Java Virtual Machine). Czytaj dalej…

Apache Maven – błąd przepełnienia pamięci

apmavenTym razem szybko, krótko i przyjemnie. Skupimy się na niezbyt lubianym przez programistów błędzie java.lang.OutOfMemoryError. Niektórzy dostają dreszczy jak spotykają coś takiego na konsoli, ale tak naprawdę nie ma czego się bać. Na logikę biorą zostało zbyt mało pamięci przydzielone w stosunku do zapotrzebowania (zasobów) – lub domyślny przydział jest zbyt mały.

W związku z powyższym należy ten limit zwiększyć. Jedynym problem zatem jest zlokalizowanie miejsca gdzie, i jak tego dokonać. Osobiście spotkałem się raz z taką sytuacją. Miało to miejsce, gdy aplikacja rozwijana przez mój zespół osiągnęła (teraz już wiem) limit przydziału pamięci potrzebnej podczas kompilacji. Czytaj dalej…

Na początku był Apache – czyli połączenie serwera Tomcat z HTTP

Witam,

Czas zacząć przygodę z blogiem. Choć okoliczności nie są sprzyjające, miło mi stworzyć coś swojego, dzielić się doświadczeniem i refleksjami z życia programisty. O tym kim jestem i co robię, dowiesz się ze strony O mnie. Teraz zachęcam do lektury.

O tym, co to jest Apache HTTP, zapewne wie każdy programista aplikacji internetowych. Jednak, co to jest Apache Tomcat, już wie zdecydowanie mniej, a warto wiedzieć, bo daje on nam spore możliwości. Załóżmy, że posiadamy aplikację pisaną w Javie (lub opartą o serwer Javy – nie musi iść to w parze!) to najważniejszą rzeczą jest wybranie kontenera aplikacyjnego. Jest wiele alternatyw, np. JBoss, Apache Geronimo, Apache Jetty, ale Tomcat jest niezwykle popularny (nie ujmując pozostałym, które nierzadko są bardziej rozbudowane). Miałem przyjemność pracować z każdym kontenerem aplikacyjnym – nie zawsze długo, ale pozwoliło mi to do wystawienia subiektywnej, wewnętrznej oceny. O ile na Jetty i Tomcacie pracowało mi się przyjemnie, o tyle JBoss i Geronimo już nie pozwoliły sobie na taką opinię. Domyślam się, że musiałbym zdecydowanie więcej czasu spędzić na poznaniu ich „od środka” 🙂

Ale do rzeczy. Cały temat „połączenia” kontenerów rozbija się o moduł mod_jk,  który akceptuje połączenia na standardowym porcie (80), tłumaczy zapytanie i przesyła je do Tomcat. W ten sposób dostęp do webapp możliwy jest bez podawania portu kontenera Tomcat. Zasada działania dobrze zobrazowana jest na poniższej grafice. Czytaj dalej…