IPB

 
 
>

Arguments: LUA error: not enough memory

 
 aka_sektor
сообщение 01.07.2018, 00:36
Сообщение #1


Мастер Игры
************

Группа: Участник
Сообщений: 1337
Регистрация: 04.04.2013
Из: Беларусь
Пользователь №: 16432



Как посмотрел, частый вылет во многих крупных модах. А в чем причина и как решать? Как-то размыто...

Думаю опытные модмейкеры в курсе него.

В самом то деле, разве он связан с ОЗУ?

По-моему из разговора с каким-то скриптером, я слышал про этот вылет, и причина была отнюдь не в ОЗУ.

Погуглил, и нашел совпадение: https://www.amk-team.ru/forum/topic/13320-n...comment=1042560

Лог:
Код
FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: not enough memory

stack trace:
Scheduler tried to update object esc_factory_bandit5


Причина якобы "некорректное место спана нпс".

Решение якобы "помогает последняя сохранка, или уйти на другую локацию".

Сообщение отредактировал aka_sektor - 01.07.2018, 00:32
Перейти в начало страницы
 
 
 БутчерПит
сообщение 01.07.2018, 01:37
Сообщение #2


Игроман
**********

Группа: Участник
Сообщений: 967
Регистрация: 28.05.2010
Из: Кайфовая республика, Атдушинский район
Пользователь №: 13942



Неужели говноскрипты выжрали всю память для скриптов? Нет, не может быть, херня какая-то
Перейти в начало страницы
 
 
 RayTwitty
сообщение 01.07.2018, 01:44
Сообщение #3


Кандидат Игровых Наук
******************

Группа: Участник
Сообщений: 3081
Регистрация: 24.09.2010
Пользователь №: 14086



Цитата(aka_sektor @ 01.07.2018, 00:36) *
Причина якобы "некорректное место спана нпс".

Это частный случай.

В логе достаточно прозрачно написано, что не хватило памяти во время апдейта объекта. Возможно в биндер объекта напихали слишком много логики и/или этих объектов очень много.
Перейти в начало страницы
 
 
 aka_sektor
сообщение 01.07.2018, 02:14
Сообщение #4


Мастер Игры
************

Группа: Участник
Сообщений: 1337
Регистрация: 04.04.2013
Из: Беларусь
Пользователь №: 16432



Цитата(Пачкулио Пестрини @ 01.07.2018, 01:37) *
память для скриптов

Тут следует уточнить, что имеется ввиду.

Есть такой вылет:
Код
Arguments: LUA error: C stack overflow

8 вариант: https://modders-wiki.ru/xr:Line_73

Скриптер в описании оставил такое примечание:
Цитата
Иногда та же самая ошибка, т.е. та же самая причина, может приводить к другому вылету - Ran out of memory. Это когда вызываемые функции успевают "сожрать" всю память раньше, чем "сожрут" весь стек.

Мне известно 2 вида вылета по Ran out of memory:
https://modders-wiki.ru/xr:Line_132
https://modders-wiki.ru/xr:Line_356

Оба со скриптами не связаны.

Выходит "LUA error: not enough memory" это то что скриптер имел ввиду под "Ran out of memory"? Или это все же относится больше к переполнению стека?

Цитата(RayTwitty @ 01.07.2018, 01:44) *
Это частный случай.

А что бы написало в логе для этого частного случая? Пример есть?

Раз уж:
Цитата(RayTwitty @ 01.07.2018, 01:44) *
прозрачно написано

Цитата(aka_sektor @ 01.07.2018, 00:36) *
Scheduler tried to update object esc_factory_bandit5

Цитата(RayTwitty @ 01.07.2018, 01:44) *
во время апдейта объекта


Цитата(RayTwitty @ 01.07.2018, 01:44) *
Возможно в биндер объекта напихали

И как такое отлавливать и решать?

Сообщение отредактировал aka_sektor - 01.07.2018, 02:15
Перейти в начало страницы
 
 
 abramcumner
сообщение 01.07.2018, 10:15
Сообщение #5


Доктор Игровых Наук
*******************

Группа: Участник
Сообщений: 3537
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(aka_sektor @ 01.07.2018, 00:36) *
Как посмотрел, частый вылет во многих крупных модах. А в чем причина и как решать? Как-то размыто...
Думаю опытные модмейкеры в курсе него.
В самом то деле, разве он связан с ОЗУ?
По-моему из разговора с каким-то скриптером, я слышал про этот вылет, и причина была отнюдь не в ОЗУ.

Этот вылет и должен быть во всех крупных модах из-за фичи луаджита. Луаджит может использовать память только в младших 2гб, а в крупных модах туда складываются крупные текстурки, крупные локации и все остальное такое же крупное. В итоге через какое-то время младшие 2гб оказываются забиты и, хотя памяти еще полно, луаджит выделить для себя память не может.

Ну а все последние сохранки и переходы помогают из-за того, что при старте луаджит успевает отхватить себе память раньше, чем ее захватят текстурки, и какое-то время луаджит еще проработает.

Я сумел придумать только способ, используемый сейчас в х64-движках: выделить для луаджита память заранее. По нынешним меркам ему нужны сущие крохи - порядка сотни мегабайт.
Перейти в начало страницы
 
 
 aka_sektor
сообщение 01.07.2018, 14:57
Сообщение #6


Мастер Игры
************

Группа: Участник
Сообщений: 1337
Регистрация: 04.04.2013
Из: Беларусь
Пользователь №: 16432



Цитата(aka_sektor @ 01.07.2018, 02:14) *
относится больше к переполнению стека?

Обнаружил вариант со стеком: http://stalker-gamers.ru/forum/168-1314-62347-16-1418212026
Код
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: d:\s.t.a.l.k.e.r\gamedata\scripts\state_mgr.script:197: C stack overflow


stack trace:
Scheduler tried to update object djoker

Там далее дали такой ответ:
Цитата
Причина: этот вылет обычно возникает когда оружие свежеубитого непися уничтожено или покинуло уровень (провалилось сквозь землю) в тот момент когда его хотел подобрать другой непись или главгерой

Лечение: обычно достаточно просто загрузить последний сейв и вылет пропадает


Также похоже с вылетом сталкивалась команда OGSE: http://stalker.by/pro-stalker/mods/shokmod...ution-0691.html
Код
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:stalkersourcestrunkxr_3daxrGamescript_engine.cpp
Line : 73
Description :
Arguments : LUA error: e:\s.t.a.l.k.e.r\gamedata\scripts\rx_wmgr.script:582: C stack overflow

stack trace:
Scheduler tried to update object val_sacrifice_guard1

Вот как описали:
Цитата
Крайне редкие. Возникают совершенно произвольно. Могут быть вызваны как превышением нагрузки на движок, так и совершенно произвольными обстоятельствами – например застреванием NPC в стене. Если они вдруг у вас зачастили – рекомендуется снизить множитель респавна и/или увеличить интервал респавна, а так же рекомендуется снизить таймфактор на две-три единицы.


Вообще, похоже, что строчка Scheduler tried to update object не всегда относится к вылетам с LUA error. Встречалась она и с другими, например в ОП-2: http://stalker-worlds.ru/forum/topic/3422-...ylety/?p=184321
Код
Expression    : I != levels().end()
Function      : GameGraph::CHeader::level
File          : e:\stalker\sources\trunk\xr_3da\xrgame\game_graph_inline.h
Line          : 171
Description   : there is no specified level in the game graph : 18

stack trace:
Scheduler tried to update object rat_strong33844

Описали его так:
Цитата
Этот вылет рандомный. Многочисленные попытки его исправить пока не увенчались успехом) Причина скорее всего в том, что в ОП-2 значительно увеличен спавн по некоторым квестам, и, возможно, где-то движок не успевает это все корректно обработать. Все большие спавны были разнесены во времени, но до конца это проблему не решило) Этот вылет будет с начала прохождения, но ближе к середине станет гораздо реже или даже вообще прекратится) Просто переиграйте - вылет повторяться не должен.


Вообще как-то странно, похоже строка не всегда является причиной вылета, а просто есть. Вот ещё варианты:
http://www.metacognix.com/stlkrsoc/Crashes...lInTheGame.html
Код
Expression : e_entity
Function : xrServer::Process_event_reject
File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line : 12
Description : entity not found. id_parent=1350 id_entity=1312 frame=11471

stack trace:
Scheduler tried to update object lvl_community_respawn_xxxxx (e.g., esc_soldier_respawn_11350)

https://www.amk-team.ru/forum/topic/907-osh...;comment=202126
Код
Expression : fatal error
Function : IRender_Visual::Load
File : E:\stalker\patch_1_0004\xr_3da\FBasicVisual.cpp
Line : 58
Description : <no expression>
Arguments : Invalid visual

stack trace:
Scheduler tried to update object particle_instance

https://www.moddb.com/mods/radiophobia/down...obia-2-hotfix-1
Код
Expression : assertion failed
Function : xrServer::Process_event_reject
File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line : 12
Description : e_parent && e_entity

stack trace:
Scheduler tried to update object bar_dolg_respawn_325353

http://stalker-worlds.ru/forum/topic/289-v...anki-1/?p=24069
Код
Expression : vertex || show_restrictions(m_object)
Function : CPatrolPathManager::select_point
File : E:\stalker\patch_1_0004\xr_3da\xrGame\patrol_path_manager.cpp
Line : 155
Description : any vertex in patrol path [sarc_arhara_zombied_zombik5_walk] in inaccessible for object [sarc_stalk_zombied_2]

stack trace:
Scheduler tried to update object sarc_stalk_zombied_2

Или строчка в них не просто?

Сообщение отредактировал aka_sektor - 01.07.2018, 14:57
Перейти в начало страницы
 
 
 aka_sektor
сообщение 01.07.2018, 15:04
Сообщение #7


Мастер Игры
************

Группа: Участник
Сообщений: 1337
Регистрация: 04.04.2013
Из: Беларусь
Пользователь №: 16432



Цитата(abramcumner @ 01.07.2018, 10:15) *
из-за фичи луаджита

Цитата(abramcumner @ 01.07.2018, 10:15) *
луаджит выделить для себя память не может

Так вот где собака зарыта! (IMG:style_emoticons/default/yess.gif)

Цитата(abramcumner @ 01.07.2018, 10:15) *
способ, используемый сейчас в х64-движках: выделить для луаджита память заранее

А ведь x64 ТЧ нету. Как с ним быть?
p.s.
ссылку можно на x64 движки с этой правкой?

На AMK отписали: https://www.amk-team.ru/forum/topic/5525-so...comment=1187418
Цитата
У такого навскидку - тысяча пятьсот причин))

Желательно вообще применять правленый движок, который не дает вылета(происходит только зависание персонажа) и сообщает при этом хоть какую-то информацию о причинах.

Первым делом проверяй логику перца - правильность перехода из секции в секцию...

Цитата
максимально выносить весь код из апдейтов внутри неписей.

В том числе из *:evaluate(), уменьшая их количество. Ибо накосорезить там - с легкостью необычайной, внятную диагностику прицепить - близко к невозможному.


Сообщение отредактировал aka_sektor - 01.07.2018, 15:12
Перейти в начало страницы
 
 
 БутчерПит
сообщение 01.07.2018, 15:06
Сообщение #8


Игроман
**********

Группа: Участник
Сообщений: 967
Регистрация: 28.05.2010
Из: Кайфовая республика, Атдушинский район
Пользователь №: 13942



aka_sektor, а какой смысл пытаться анализировать ситуацию, не разбираясь в погромировании и отталкиваясь от ложных предположений? Вон тебе Абрам расписал, в чём дело.
Перейти в начало страницы
 
 
 buffy
сообщение 01.07.2018, 15:25
Сообщение #9


Опытный Геймер
*******

Группа: Участник
Сообщений: 183
Регистрация: 05.11.2017
Пользователь №: 28310



Цитата(aka_sektor @ 01.07.2018, 14:57) *
Или строчка в них не просто?

В исходниках не силён, но есть мысли почему возникает эта строка при разных ошибках. Как можно понять движок пытается обновить объект, но в этот момент происходит вылет (совершенно произвольный) и эта строчка оказывается в стектрейсе.

Хотя в таком случае данная строка никак не относится к теме вылета

-------------------------------------------------------------------------------------------------------------
abramcumner, не понял, что вы имеете под словами
Цитата(abramcumner @ 01.07.2018, 10:15) *
младших

Цитата(abramcumner @ 01.07.2018, 10:15) *
крупных

ввиду?
И о какой памяти идёт речь, которая выделена под скрипты и всё что к их относится, которая в принципе выделяется на всю игру(~2gb)?
Перейти в начало страницы
 
 
 aka_sektor
сообщение 01.07.2018, 15:28
Сообщение #10


Мастер Игры
************

Группа: Участник
Сообщений: 1337
Регистрация: 04.04.2013
Из: Беларусь
Пользователь №: 16432



Цитата(buffy @ 01.07.2018, 15:25) *
которая в принципе выделяется на всю игру(~2gb)?

Если так, то там другой вылет: https://modders-wiki.ru/xr:Line_359

И решается правленным .exe под 4 Гб.

abramcumner, может ли это решение помочь с LUA error: not enough memory ?

Сообщение отредактировал aka_sektor - 01.07.2018, 15:29
Перейти в начало страницы
 
 
 abramcumner
сообщение 01.07.2018, 15:47
Сообщение #11


Доктор Игровых Наук
*******************

Группа: Участник
Сообщений: 3537
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(aka_sektor @ 01.07.2018, 15:04) *
А ведь x64 ТЧ нету. Как с ним быть?

Есть, ogsr-engine

Цитата
ссылку можно на x64 движки с этой правкой?

Абсолютно любой публичный х64. Из-за того, что на х64 данные более пухлые, ошибка с памятью в луаджит появляется и на стандартных локациях. Без такой правки скрипты будут вылетать при начале новой игры.
В вышеупомянутом ogsr-engine такая правка есть.

Цитата
На AMK отписали

Это относится к "Scheduler tried to update object esc_factory_bandit5" - завис биндер НПЦ - это как раз логика, аи-схемы и прочие скрипты вызываемые из биндера. У тебя же биндер завис потому, что у луа память кончилась.

Цитата(buffy @ 01.07.2018, 15:25) *
И о какой памяти идёт речь, которая выделена под скрипты и всё что к их относится, которая в принципе выделяется на всю игру(~2gb)?

Это одно и тоже. У каждого процесса в винде есть своя виртуальная память, которая может тратиться на скрипты, текстуры, модели и прочее и прочее. Луаджит так написан, что может работать работать только с адресами памяти в диапазоне от 0 до 2Гб.

Цитата
И решается правленным .exe под 4 Гб.
abramcumner, может ли это решение помочь с LUA error: not enough memory ?

Нет, луаджит так и продолжит работать с младшими 2гб.
Перейти в начало страницы
 
 
 aka_sektor
сообщение 01.07.2018, 16:01
Сообщение #12


Мастер Игры
************

Группа: Участник
Сообщений: 1337
Регистрация: 04.04.2013
Из: Беларусь
Пользователь №: 16432



Цитата(abramcumner @ 01.07.2018, 15:36) *
ogsr-engine

Как хорошо что есть готовый вариант бинарников и gamedata, вставил и пошел играть: https://github.com/KRodinn/OGSR-Engine/releases/tag/1.0.140
Спасибо.

Цитата(abramcumner @ 01.07.2018, 15:36) *
Абсолютно любой

Тут все таки уточню, для гарантии. Кидали тут списочек когда-то: https://www.gameru.net/forum/index.php?s=&a...t&p=1621763
Каждый из них?
А что ЧНовские? Там есть?
Перейти в начало страницы
 
 
 abramcumner
сообщение 01.07.2018, 16:25
Сообщение #13


Доктор Игровых Наук
*******************

Группа: Участник
Сообщений: 3537
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(aka_sektor @ 01.07.2018, 16:01) *
Каждый из них?
А что ЧНовские? Там есть?

OGSR-engine(ТЧ), abramcumner(ЧН)(он же хрей 1.8), Forser(ЗП)(он же Oxygen) - в них точно есть.
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 20.09.2018, 12:13