Problemy z pamięcią w Tomcat na Solarisie 10

1

Mam serwer z systemem Solaris 10. Zgłasza ponad 70 GB wolnej pamięci RAM GiB. Próbuję uruchomić Tomcat 7.0.68 przy użyciu Java 1.7.0_80 w trybie 64-bitowym.

Serwer twierdzi, że nie jest w stanie przydzielić 717 MiB pamięci RAM. Za każdym razem, gdy próbuję, otrzymuję plik hs_err_pidxxx.log. Sugeruje to:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 717225984 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space

Nie. Dostępnych jest 70 GiB, próbuje przydzielić 700ish MiB.

#   In 32 bit mode, the process size limit was hit

Jesteśmy w trybie 64-bitowym.

# Possible solutions:
#   Reduce memory load on the system

Na tym komputerze nie ma nic poza systemem operacyjnym.

#   Increase physical memory or swap space

Mamy już dwa rzędy wielkości więcej niż potrzeba.

#   Check if swap backing store is full

Nie.

#   Use 64 bit Java on a 64 bit OS

Gotowy.

#   Decrease Java heap size (-Xmx/-Xms)

Zrobiłbym, gdybym mógł.

#   Decrease number of Java threads

Jak to się robi?

#   Decrease Java thread stack sizes (-Xss)

Sugerowane wartości? Jest to domyślnie, ale nie wiem, co to może poprawić.

#   Set larger code cache with -XX:ReservedCodeCacheSize=

Ponownie jesteśmy domyślnie.


$ swap -s
total: 48607296k bytes allocated + 18201336k reserved = 66808632k used, 311770552k available
Glenn Lasher
źródło
Czy masz dostęp do roota? Jakie dane wyjściowe są echo ::memstat | mdb -kuruchamiane jako root?
Andrew Henle,
Zamiast stwierdzenia, że ​​masz wystarczającą ilość pamięci RAM, wymiany, magazynu kopii zapasowych itp., Przydatne byłoby dodanie do pytania uruchomionych poleceń i ich wyników.
jlliagre,
Andrew, nie mam dostępu do konta root, przepraszam.
Glenn Lasher

Odpowiedzi:

1

Wolna pamięć RAM oznacza po prostu, że nie ma w niej nic. To nie znaczy, że możesz z niego korzystać. Zgłoszona pamięć RAM jest całkowicie możliwa i nie nadaje się do użytku przez nową maszynę JVM, ponieważ zarezerwowały ją inne aplikacje. W każdym razie JVM, podobnie jak większość aplikacji, nie prosi o pamięć RAM, ale o pamięć wirtualną. Jest to bardziej niż prawdopodobne, że problem dotyczy twojego systemu, brak pamięci wirtualnej.

Dzięki temu poleceniu poznasz użycie pamięci wirtualnej:

swap -s

Prostą odpowiedzią na niedobór pamięci wirtualnej jest po prostu zwiększenie (lub utworzenie) obszaru wymiany, aby rezerwacje pamięci miały obszar magazynu kopii zapasowych.

Edycja: dzięki opublikowanym dodatkowym informacjom powodem, dla którego aplikacja nie może przydzielić więcej pamięci wirtualnej, jest fakt, że działasz w strefie nieglobalnej, w której obowiązuje ograniczenie pamięci. Strefy nieglobalne są kontenerami, tzn. Wszystkie mają to samo jądro. Jednak ich wykorzystanie zasobów może być ograniczone, aby jedna strefa nie zakłócała ​​innych.

Poza zatrzymywaniem innych procesów korzystających z pamięci wirtualnej nie można nic zrobić z tej strefy, nawet jako root. Musisz poprosić administratora strefy globalnej o przyznanie więcej pamięci wirtualnej dla twojej strefy , w twoim przypadku zone.max-swapustawienie.

jlliagre
źródło
Ok, to trochę pomocne. Oto, co otrzymałem jako odpowiedź: tcadm @ pdvz1was38: ~ $ swap -s total: 48607296k przydzielonych bajtów + 18201336k zarezerwowany = 66808632k zajęty, 311770552k dostępny Czy udostępnię to na północ od 300 GiB? Czy dobrze to czytam?
Glenn Lasher
Dobrze to czytasz. Dołączyłem te informacje do twojego pytania, aby zapewnić lepszą czytelność / widoczność. Czy działasz w strefie innej niż globalna? tj. co zonenamepokazuje?
jlliagre
To nie jest strefa globalna. Zonename nadaje taką samą nazwę jak wyżej: pdvz1was38. Czy jest tu pomysł, że inne strefy globalne uniemożliwiają tej strefie przydzielenie wystarczającej ilości pamięci? Czy musi być ciągły, tzn. Czy fragmentacja pamięci miałaby miejsce?
Glenn Lasher
Odpowiedź zaktualizowana. Jak się domyślacie, nie fragmentacja pamięci, ale ograniczenie pamięci.
jlliagre
Bez związku ze wszystkim, co działo się w tej strefie nieglobalnej, administratorzy strefy globalnej ustalili, że strefa globalna potrzebuje ponownego uruchomienia. Po wykonaniu tej czynności strefa ta, przynajmniej na pierwszy rzut oka, wydaje się wyprostowana i leci w prawo. Doceniam całą pomoc, którą zaoferowałeś.
Glenn Lasher