Незважаючи на те, що аплети Java сьогодні не є популярною веб-технологією, існує незліченна кількість причин для розгортання віртуальної машини Java безпосередньо на сервері Linux. Якщо ви спробуєте запустити команду Linux Java прямо на дискретному обладнанні або у власній віртуальній машині, ви можете отримати повідомлення про помилку під час ініціалізації віртуальної машини, яка не могла зарезервувати достатньо місця для кучі об’єктів.
Це, мабуть, виглядає досить дивним, оскільки у вас, швидше за все, достатньо оперативної пам’яті для запуску команди, але в основному це пов’язано з певною химерністю у використанні сторінок фізичної та віртуальної пам’яті. Вказівка деяких відносно великих розмірів повинна дозволити вам повністю обійти це повідомлення та запустити команду java так, як і будь-яку іншу.
Спосіб 1: Використання параметрів командного рядка
Якщо ви спробували запустити java і отримали це повідомлення, то, напевно, ви вже запустили безкоштовну команду, щоб переконатися, що є достатньо запасів пам'яті для запуску програми.
Зверніть увагу, що на нашій тестовій машині у нас було близько 2,3 ГБ фізичної оперативної пам'яті, і жодна сторінка віртуальної пам'яті ще не була використана. Якщо ви помітите, що у вас збивається пам’ять, вам доведеться закрити інші запущені речі, перш ніж повторити спробу. З іншого боку, ті, хто виявив, що у них достатньо вільної пам'яті, можуть спробувати вказати розмір безпосередньо.
Наприклад, на нашій машині ми змогли запустити команду як java -Xms256m -Xmx512M, і вона працювала так, як очікувалося б інакше. Це обмежує розмір купи, який віртуальна машина Java намагається зарезервувати під час запуску. Оскільки нестримна віртуальна машина може гіпотетично робити незвичні речі, вона може передавати повідомлення про помилки в іншу безкоштовну систему. Можливо, ви захочете пограти з цими двома значеннями, перш ніж знайти потрібну комбінацію.
Це може бути проблемою незалежно від того, на чому ви її запускаєте, оскільки JVM не має нічого спільного з типом віртуальної машини, яку ви можете використовувати для запуску GNU / Linux.
Спосіб 2: Експорт змінних, щоб зробити зміну постійною
Коли ви знайдете значення, яке працює, ви можете експортувати його, щоб зробити його постійним для цього сеансу. Наприклад, ми використали експорт _JAVA_OPTIONS = '- Xms256M -Xmx512M' з командного рядка bash, і це дозволило нам запускати команду java самостійно, без будь-яких інших опцій, поки ми не вийшли з нашого сервера.
Його потрібно було запустити знову, коли ми увійшли до іншого сеансу, тому, можливо, ви захочете додати його до будь-яких відповідних сценаріїв запуску, якщо ви плануєте використовувати команду java досить часто. Ми додали рядок до нашого файлу .bash_login, і, здавалося, він працював кожного разу, коли ми використовували запит на вхід, не запускаючи його знову, хоча, можливо, вам доведеться знайти інше місце для нього, якщо ви працюєте з іншою оболонкою.
Можливо, ви помітили, що лише деякі конфігурації обладнання викликають це повідомлення про помилку. Це тому, що це зазвичай відбувається на машинах з великою кількістю фізичної оперативної пам’яті, але меншими обмеженнями щодо використання. Java намагатиметься виділити величезний блок лише для того, щоб сказати, що він не може, що трактується як закінчення пам'яті.
Спосіб 3: Друк поточних параметрів Java
Якщо ви працювали в командному рядку і хочете коротке посилання на те, що ви встановили значення _JAVA_OPTIONS, просто запустіть echo $ _JAVA_OPTIONS, і воно негайно роздрукує поточні значення. Це корисно для усунення несправностей, коли ви намагаєтесь визначити правильні цифри, які потрібно спробувати.
Майте на увазі, що, хоча це виправлення не повинно вимагати жодних інших ігор, Java викине повідомлення "не вдалося зарезервувати достатньо місця для купи об'єктів", якщо ви коли-небудь справді опинитесь на короткому кінці віртуальної пам'яті. Якщо це так, тоді вам доведеться ще раз перевірити, які процеси запущені на даний момент, і можливо перезапустити сервер, якщо це можливо. Ви також можете створити більше місця для підкачки, але якщо це проблема, як правило, краще спробувати виправити це іншим способом.
У рідкісних випадках, коли ваші налаштування здаються правильними, але вони все ще не працюють, переконайтеся, що ви встановили 64-розрядний пакет Java, оскільки він повинен бути несприйнятливим до цієї проблеми. Сумісні вимоги до пам'яті застосовуються лише до 32-розрядної версії Java. Ми виявили, що в декількох випадках 64-розрядна версія намагалася створити 32-розрядну віртуальну машину, тому вказівка параметра -d64 у командному рядку це виправила для нас.