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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.