Падение сервера по нехватке памяти

Металлург1985

Пляшущий с бубном
Участник
Сообщения
53
Розыгрыши
0
Репутация
0
Реакции
5
Баллы
250
Хроники
  1. Grand Cursade
Исходники
Отсутствуют
Сборка
Mobius
Добрый день.

Недавно обновил свою W10 до W11. После чего несколько раз наблюдал во время игры такую картину: сначала критует клиент с описанием (прошу прощения за мой английский): "Нехватка памяти. Увеличьте объем памяти или файла подкачки", вслед за чем отключается Gameserver (Loginserver при этом остается запущенным).
У меня на машине 16 ГБ памяти DDR4 3200. При работе на W10 файл подкачки был нулевым и таких критов не наблюдалось. На W11 пришлось включить 4 ГБ файла подкачки на вторичном диске, после чего криты вроде прекратились.
При этом в режиме запущенного сервера и одного окна клиента свойства системы показывали информацию о наличии 7 ГБ свободной памяти (при неактивном файле подкачке).
Подскажите, есть ли способ оптимизировать сервер по расходу памяти, кроме как включением файла подкачки или увеличением физического объема оперативной памяти?
 
Добрый день.

Недавно обновил свою W10 до W11. После чего несколько раз наблюдал во время игры такую картину: сначала критует клиент с описанием (прошу прощения за мой английский): "Нехватка памяти. Увеличьте объем памяти или файла подкачки", вслед за чем отключается Gameserver (Loginserver при этом остается запущенным).
У меня на машине 16 ГБ памяти DDR4 3200. При работе на W10 файл подкачки был нулевым и таких критов не наблюдалось. На W11 пришлось включить 4 ГБ файла подкачки на вторичном диске, после чего криты вроде прекратились.
При этом в режиме запущенного сервера и одного окна клиента свойства системы показывали информацию о наличии 7 ГБ свободной памяти (при неактивном файле подкачке).
Подскажите, есть ли способ оптимизировать сервер по расходу памяти, кроме как включением файла подкачки или увеличением физического объема оперативной памяти?
Что - то мне подсказывает что это утечка памяти..
И оптимизация, либо же доп. память ничего не даст.
Рано или поздно утечка забьет всю память)
 
Что - то мне подсказывает что это утечка памяти..
И оптимизация, либо же доп. память ничего не даст.
Рано или поздно утечка забьет всю память)
Странно, что до перехода на W11 такого не наблюдалось. Может ли быть причина в том, что до обновления у меня стояла JDK15, а после обновления я решил установить JDK25?
 
Странно, что до перехода на W11 такого не наблюдалось. Может ли быть причина в том, что до обновления у меня стояла JDK15, а после обновления я решил установить JDK25?
Так сборка какую версию джавы поддерживает в итоге?
Попробуйте поставить такую, какая и стояла, возможно проблема уйдет
 
Так сборка какую версию джавы поддерживает в итоге?
Попробуйте поставить такую, какая и стояла, возможно проблема уйдет
Когда я готовую сборку качал с неработающего ныне ресурса monche.org - к ней прилагалась версия 15.0.2.
Вы полагаете, что замена на более современную версию могла повлечь такие ошибки?
Не джавист, поэтому уточняю.
 
Когда я готовую сборку качал с неработающего ныне ресурса monche.org - к ней прилагалась версия 15.0.2.
Вы полагаете, что замена на более современную версию могла повлечь такие ошибки?
Не джавист, поэтому уточняю.
Странно что она вообще запустилась :pandaredlol:
 
Когда я готовую сборку качал с неработающего ныне ресурса monche.org - к ней прилагалась версия 15.0.2.
Вы полагаете, что замена на более современную версию могла повлечь такие ошибки?
Не джавист, поэтому уточняю.
Более чем уверен.

Странно что она вообще запустилась :pandaredlol:
Согласен)
 
Странно что она вообще запустилась :pandaredlol:
а что странного, он просто обновил винду, а не снёс 10 и поставил 11, его сборка как читала старую яву так и продолжила читать.
 
а что странного, он просто обновил винду, а не снёс 10 и поставил 11, его сборка как читала старую яву так и продолжила читать.
Так в том то и дело, что помимо винды, автор при переходе на 11 апгрейднул и джаву с 15 до 25.
 
А че, вроде должно быть наоборот, вроде там же улучшили все?
есть такое понятие, как deprecated. до какой-то поры времени функционал \ библиотеки поддерживаются, а начиная с какой-то версии его просто выбрасывают из сборки и всё. и поставь автор условно 16-17 версию, вероятно проблем бы не было. но 10 релизов разницы - это половину проекта частенько приходится переписать. некоторые зависимости просто тупо не поддерживаются новой версией джавы. Мог ненароком не на исток проблемы указать, так как я на джаве писал 2 с половиной раза пока сны досматривал. Но в моем стеке всё именно так, и вангую, что джава не исключение
 
  • Ха-ха-ха
Реакции: kick
Виртуалки открути, если диск позволяет!
 
есть такое понятие, как deprecated. до какой-то поры времени функционал \ библиотеки поддерживаются, а начиная с какой-то версии его просто выбрасывают из сборки и всё. и поставь автор условно 16-17 версию, вероятно проблем бы не было. но 10 релизов разницы - это половину проекта частенько приходится переписать. некоторые зависимости просто тупо не поддерживаются новой версией джавы. Мог ненароком не на исток проблемы указать, так как я на джаве писал 2 с половиной раза пока сны досматривал. Но в моем стеке всё именно так, и вангую, что джава не исключение
А я думал жаба обратносовместимая как рекламят и то что развитие языка не происходит говорят за обратную совместимость, как же так получилось?
 
Подскажите, есть ли способ оптимизировать сервер по расходу памяти, кроме как включением файла подкачки или увеличением физического объема оперативной памяти?
Конечно есть, переписать все ядро, шутка:). Эта ошибка java.lang.OutOfMemoryError?
 
А я думал жаба обратносовместимая как рекламят и то что развитие языка не происходит говорят за обратную совместимость, как же так получилось?
Как говорится, "если бы мы знали что это такое, но мы не знаем что это такое". Я дотнетчик, ничего не знаю про джава машину и разработу толком)
Если бы я хотя бы раз поднимал проект со старой жабы на более свежую, вероятно смог бы проаргументировать.
На какой версии проект был собран, на той и работать должен. Но, как я уже сказал ранее, если попасть на релиз в котором напрочь выпилили какой-то не поддерживаемый функционал, а он нужен для сборки - ачивка гарантирована. У меня так коллега апгрейдил проект релиза 3-4 подряд, не обращая внимания на аннотации. потом внезапно выяснилось, что в новом релизе функционал таки выпилили. и теперь "почИмутА не компилится")
 
может попробовать вот это?
Подождать какое-то время что бы накопилось и посмотреть где чего жрет ну и как вариант просто закоментить весь класс целиком :)

VisualVM

Установка: входит в состав JDK (папка bin/jvisualvm.exe)
Что показывает:
  • Heap Dump: Снимок памяти — кто сколько занимает
  • Thread Inspector: Сколько памяти использует каждый поток
  • Sampler: Реальное время — какие классы аллоцируются чаще всего
Как использовать:
  1. Запустите VisualVM
  2. Выберите ваш Java-процесс в списке
  3. Откройте вкладку "Sampler" → "Memory"
  4. Нажмите "Heap Dump" для детального анализа
 
Как говорится, "если бы мы знали что это такое, но мы не знаем что это такое". Я дотнетчик, ничего не знаю про джава машину и разработу толком)
Если бы я хотя бы раз поднимал проект со старой жабы на более свежую, вероятно смог бы проаргументировать.
На какой версии проект был собран, на той и работать должен. Но, как я уже сказал ранее, если попасть на релиз в котором напрочь выпилили какой-то не поддерживаемый функционал, а он нужен для сборки - ачивка гарантирована. У меня так коллега апгрейдил проект релиза 3-4 подряд, не обращая внимания на аннотации. потом внезапно выяснилось, что в новом релизе функционал таки выпилили. и теперь "почИмутА не компилится")
У Явы был переломный момент с 8 до 11, ну там чуть чуть было около 12 тоже. Но я к чему? Ведь есть уже сборки которые апгрейдились до Явы после 11. И их можно использовать на самой последней Яве. Работают. А тут вдруг у человека проблемы с памятью. То есть другая проблема соовсем чем просто отсталый код/библиотеки (deprecated/outdated/runtime version mismatch). Так вот в том то и вопрос что Ява уж очень стабильна по своей API. И такие проблемы с памятью как раз указывают на неправильную конфигурацию оной, как и возможно сборки. Да и есть люди тут которые прям за Яву держаться как святыню. Вот и хорошая ситуация напомнить что не Явой единой.... линейка жива.
 
А я думал жаба обратносовместимая как рекламят и то что развитие языка не происходит говорят за обратную совместимость, как же так получилось?
Ну по сути в яве достаточно редко что-то депрекейтят, а если делают это, то обычно объявленное устаревшим тащат с собой еще достаточно много версий, так что разработчикам должно за глаза хватать времени чтобы переделать свой код.
Ну а если нет возможности поправить код по какой либо причине, то никто же не запрещает продолжать использовать старую версию явы для запуска...
 
Ява это просто папка с бинарными файлами. Для того, чтобы винда могла корректно реагировать на команду java в терминале, ей нужно иметь ссылку на bin папку конкретной установки Java внутри переменной Path. Соответственно, та папка, которая первая встречается в Path, и будет считаться текущей установкой Java и именно из нее будет запускаться java.exe


Насчет падения сервера от нехватки памяти: Упасть он может от того, что кончилось место в куче. Место в куче по умолчанию выделяется динамически, если вы явно не поставили флаги на минимальный и максимальный размер. Поэтому, если приложение все же упало, то скорее всего выделено слишком мало памяти(ну т.е вы буквально java запретили брать больше памяти, чем установлено через флаг, поэтому когда выделенное место кончается, Java выкидывает OOM-ошибку, вместо того, чтобы динамически отожрать еще кусочек памяти), либо используется какой-то устаревший флаг для JVM. Если все флаги в норме и настройки кучи корректны, то скорее всего имеет место быть утечка. Установите VisualVM, подключитесь к серверному процессу и посмотрите, какой процент хипа реально занят, и как себя ведет GC. Если там хип под завязку забит и GC сходит с ума, то это явно проблема в коде. Если же там хип пустой и просто аллоцирован на фулл размер, то просто подкорректируйте размеры вручную через те же флаги.
 
Покопался на просторах интернета. Нашел вот такой рецепт:

Lineage 2 — 32-битный клиент. Он не может использовать больше ~2 ГБ виртуальной памяти (даже если у тебя 32 ГБ ОЗУ). При больших текстурах или нагруженных моделях (монстры, зеркальные объекты, тени, эффекты) → клиент «упирается в потолок» и вылетает.

Что делаем?
Запуск La2 от имени администратора + совместимость с виндой 7
Скачиваем утилиту Large Address Aware.
Распаковываем и открываем. В окне программы нажимаем Browse, находим l2.exe в папке System клиента.
Ставим галочку "Check this box to enable the application to use more than 2 GiB of memory"
После этого l2.exe получит флаг Large Address Aware и сможет использовать до 4 ГБ памяти, а не только 2.

Пробую...
 
Назад
Сверху Снизу