Падает с ошибкой JIT_OP_SYSREQ

Сообщения
167
Реакции
51
Помог
6 раз(а)
Ошибка
#1 0xf081cf72 in JIT_OP_SYSREQ () from /home/rehlds/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5294
Билд
ReHLDS version: 3.13.0.0-dev
ReGamedll
ReGameDLL version: 5.26.0.668-dev
Версия Metamod
Metamod-r v1.3.0.150
Список метамодулей
description      stat pend  file              vers      src   load  unlod
[ 1] Reunion RUN - reunion_mm_i386. v0.1.0.1 ini Start Never
[ 2] Revoice RUN - revoice_mm_i386. v0.1.0.3 ini Start Never
[ 3] ReAuthCheck RUN - reauthcheck_mm_i v0.1.6 ini Start Never
[ 4] Rechecker RUN - rechecker_mm_i38 v2.7 ini Chlvl ANY
[ 5] WHBlocker RUN - whblocker_mm_i38 v1.5.697 ini Chlvl ANY
[ 6] HitBox Fix RUN - hitbox_fix_mm_i3 v1.1.4 ini Start ANY
[ 7] YaPB RUN - yapb.so v4.5.109 ini Chlvl ANY
[ 8] AMX Mod X RUN - amxmodx_mm_i386. v1.9.0.5 ini Start ANY
[ 9] Engine RUN - engine_amxx_i386 v1.9.0.5 pl8 ANY ANY
[10] ReAPI RUN - reapi_amxx_i386. v5.24.0. pl8 ANY Never
[11] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0.5 pl8 ANY ANY
[12] MySQL RUN - mysql_amxx_i386. v1.9.0.5 pl8 ANY ANY
[13] Ham Sandwich RUN - hamsandwich_amxx v1.9.0.5 pl8 ANY ANY
13 plugins, 13 running
Список плагинов
name                    version     author            file             status   
[ 1] Auto Logs Cleaner 0.0.1 b0t. AutoLogsCleaner running
[ 2] Admin Commands 1.9.0.5294 AMXX Dev Team admincmd.amxx running
[ 3] [Customizable] AmxModM 0.0.5 Albertio amxmodmenu.amxx running
[ 4] Maps Menu 1.9.0.5294 AMXX Dev Team mapsmenu.amxx running
[ 5] Pause Plugins 1.9.0.5294 AMXX Dev Team pausecfg.amxx running
[ 6] [190] Vanga Detector 23.07.29 SKAJIbnEJIb & Pr vanga_detector. running
[ 7] Unreal Evol Blocker 1.1 Karaulov evol_block.amxx running
[ 8] Unreal Demo Plugin 1.54 karaulov unreal_demo_plu running
[ 9] Gameguard 1.2 Doron Bachar FGameGuard.amxx paused
[ 10] unknown unknown unknown hide_cvars_RP_A running
[ 11] Access Manager 1.0.0 mx?! AccessManager.a running
[ 12] FreshBans 1.4.8b kanagava fresh_bans_148- running
[ 13] Gather API 1.7 mx?! gather_api.amxx running
[ 14] Gather NoGame 1.1 mx?! gather_nogame.a running
[ 15] Gather MapVote 1.1 mx?! gather_mapvote. running
[ 16] Gather WarmUp 1.1 mx?! gather_warmup.a stopped
[ 17] Gather TeamPick 1.6 mx?! gather_teampick running
[ 18] Gather FF Vote 1.0 mx?! gather_ff_vote. running
[ 19] Gather Knife Round 1.6 mx?! gather_knife_ro running
[ 20] Gather Live 1.3 mx?! gather_live.amx running
[ 21] Gather TeamMenu 1.5 mx?! gather_teammenu running
[ 22] Gather BotControl 1.1 mx?! gather_botcontr running
[ 23] Gather Game Info 1.0 mx?! gather_game_inf running
[ 24] Gather GameMenu 1.1 mx?! gather_gamemenu running
[ 25] Gather AdminCmds 1.2 mx?! gather_admincmd running
[ 26] Gather Chat 1.2 mx?! gather_chat.amx running
[ 27] Demo Recorder 1.0.0 cpctrl demorecorder.am running
[ 28] CSStatsX SQL 1.1 serfreeman1337 csstatsx_sql.am running
[ 29] AES: StatsX 0.5.9 [REA serfreeman1337/s aes_statsx_cstr running
[ 30] Bot Features 0.9 Vaqtincha BotFeatures.amx running
[ 31] Custom Smoke 1.2.1 (non medusa custom_smoke_no running
[ 32] Gather Stats 1.6 mx?! gather_stats.am running
[ 33] Gather Restrict 1.0 mx?! gather_restrict running
[ 34] Gather NewRound Stats 1.0 mx?! gather_newround running
[ 35] Gather TeamScore 1.0 mx?! gather_teamscor running
[ 36] Gather Damage Stats 1.0 mx?! gather_damage_s running
[ 37] Dead AllChat 1.0 mx?! gather_dead_all running
[ 38] Buy Nades Limit 0.0.4 steelzorrr + mx? buy_nades_limit running
[ 39] MakeBomber: Humans Onl 1.0 mx?! makebomber_huma running
[ 40] Menus Front-End 1.9.0.5294 AMXX Dev Team menufront.amxx running
[ 41] New Kick Menu 0.9.4 Radius newkickmenu.amx running
[ 42] Players Menu 1.9.0.5294 AMXX Dev Team plmenu.amxx running
[ 43] Unreal Cheater Cry 1.3 Karaulov unreal_cheater_ running
[ 44] Infinite Armoury 1.0 mx?! infinite_armour running
44 plugins, 42 running
Помогите найти причину абсолютно рандомных падений сервера с ошибкой
---------------------------------------------
CRASH: Сб 03 авг 2024 23:26:51 MSK
Start Line: ./hlds_linux -game cstrike -strictportbind +ip XX.XX.XX.XX -port 27017 +clientport 27007 +map aim_map +servercfgfile server.cfg -maxplayers 13 -pingboost 4 -condebug -debug -pidfile hlds.1045327.pid
[New LWP 1045339]
[New LWP 1045345]
[New LWP 1045343]
[New LWP 1045349]
[New LWP 1045350]
[New LWP 1045351]
[New LWP 1045352]
[New LWP 1045374]
[New LWP 1127273]
[New LWP 1127272]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./hlds_linux -game cstrike -strictportbind +ip XX.XX.XX.XX -port 27017 +clie'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x676f2065 in ?? ()
[Current thread is 1 (Thread 0xf7a35040 (LWP 1045339))]
#0 0x676f2065 in ?? ()
#1 0xf0861f72 in JIT_OP_SYSREQ () from /home/rehlds/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
#2 0x5982cb00 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
No symbol table info available.
From To Syms Read Shared Object Library
0xf7f4c230 0xf7f4d368 Yes (*) /lib/i386-linux-gnu/libdl.so.2
0xf7d751d0 0xf7ece9fa Yes (*) /lib/i386-linux-gnu/libc.so.6
0xf7d3eb20 0xf7d4f568 Yes (*) /lib/i386-linux-gnu/libpthread.so.0
0xf7bd7210 0xf7cd02e8 Yes (*) ./libstdc++.so.6
0xf7a5f2b0 0xf7b20704 Yes (*) /lib/i386-linux-gnu/libm.so.6
0xf7f65100 0xf7f82893 Yes (*) /lib/ld-linux.so.2
0xf7a385d0 0xf7a4de1d Yes (*) ./libgcc_s.so.1
0xf7663e00 0xf767f838 Yes (*) /home/rehlds/CWserverfiles/filesystem_stdio.so
0xf6fa1120 0xf704d07f Yes (*) /home/rehlds/CWserverfiles/engine_i486.so
0xf6f84770 0xf6f88838 Yes (*) /lib/i386-linux-gnu/librt.so.1
0xf6f715c0 0xf6f7bd74 Yes (*) ./libsteam_api.so
0xf4b8e000 0xf6476994 Yes (*) /home/rehlds/.steam/sdk32/steamclient.so
0xf222fdf0 0xf2244614 Yes /home/rehlds/CWserverfiles/./cstrike/addons/metamod/metamod.so
0xf1f694e0 0xf2106a90 Yes (*) /home/rehlds/CWserverfiles/cstrike/dlls/cs.so
0xf1de0840 0xf1e044e0 Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/reunion/reunion_mm_i386.so
0xf1c98f70 0xf1d9d030 Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/revoice/revoice_mm_i386.so
0xf1c5fb40 0xf1c690b0 Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/reauthcheck/reauthcheck_mm_i386.so
0xf1c38300 0xf1c4ecab Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/rechecker/rechecker_mm_i386.so
0xf1b89340 0xf1b9c48e Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/whblocker/whblocker_mm_i386.so
0xf09f8530 0xf0a27ea4 Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/hitbox_fix/hitbox_fix_mm_i386.so
0xf1a94ce0 0xf1b75956 Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/yapb/bin/yapb.so
0xf080ca20 0xf086fdb7 Yes (*) /home/rehlds/CWserverfiles/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
0xf17cc290 0xf17d880c Yes (*) cstrike/addons/amxmodx/modules/engine_amxx_i386.so
0xf174da40 0xf179e810 Yes (*) cstrike/addons/amxmodx/modules/reapi_amxx_i386.so
0xf16e89d0 0xf1714d6c Yes (*) cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so
0xf04d3790 0xf056bfc5 Yes (*) cstrike/addons/amxmodx/modules/mysql_amxx_i386.so
0xf167eb60 0xf16c6624 Yes (*) cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so
0xf02fd5d0 0xf0304178 Yes (*) /lib/i386-linux-gnu/libnss_files.so.2
0xf02f4350 0xf02f72f8 Yes (*) /lib/i386-linux-gnu/libnss_dns.so.2
0xf02dd730 0xf02e97e8 Yes (*) /lib/i386-linux-gnu/libresolv.so.2
0xecc641c0 0xed9ddb04 Yes (*) ./steamclient.so
0xeff60670 0xeffd6020 Yes (*) ./crashhandler.so
0xf17de160 0xf17df954 Yes (*) cstrike/addons/amxmodx/modules/sockets2_amxx_i386.so
(*): Shared library is missing debugging information.
Stack level 0, frame at 0xff9a8a80:
eip = 0x676f2065; saved eip = 0xf0861f72
called by frame at 0xff9a8a84
Arglist at 0xff9a8a78, args:
Locals at 0xff9a8a78, Previous frame's sp is 0xff9a8a80
Saved registers:
eip at 0xff9a8a7c
End of crash report
----------------------------------------------
Сервер падает когда он находится в простое (без игроков)
Пробовал играться с версиями:
  • Metamod
  • AMX Mod X (1.9.0.5294 / 1.10.0 5461)
ошибка всегда сохраняется

в связи с чем возник вопрос, каким образом можно найти причину падений?
нашел следующую инструкцию, где описана аналогичная проблема - [Guide] How to find out which Amxmodx plugin causing server crash (linux hlds)
(gdb) source /home/game/scripts/analyze.gdb
Available commands (AmxModX-related):
amx_analyze: Analyze the dump and try to figure out which AmxModX plugin caused it
amx_listplugins: List all loaded AmxModX plugins
amx_listplayers: List all players as seen by AmxModX
Available commands (metamod-related):
meta_analyze: Analyze the dump and try to figure out which metamod plugin caused it
Available commands (generic):
cmd_args: Dump the cmd string

If you have no idea where to start, just type '*_analyze' and let it figure out for you
(gdb) amx_analyze
Crash is most likely caused by: cstrike/addons/amxmodx/plugins/zombie_plague/zombie_plague43.amxx
но в моем случае это не сработало
(gdb) source /home/rehlds/cstrike/analyze.gdb
Available commands (AmxModX-related):
amx_analyze: Analyze the dump and try to figure out which AmxModX plugin caused it
amx_listplugins: List all loaded AmxModX plugins
amx_listplayers: List all players as seen by AmxModX
Available commands (metamod-related):
meta_analyze: Analyze the dump and try to figure out which metamod plugin caused it
Available commands (generic):
cmd_args: Dump the cmd string

If you have no idea where to start, just type '*_analyze' and let it figure out for you
(gdb) amx_analyze
No symbol table is loaded. Use the "file" command.
(gdb)
на форуме тема работы с gdb вообще не раскрыта, не понятно как пользоваться для анализа дампа
 
Последнее редактирование:
Сообщения
401
Реакции
113
Помог
2 раз(а)
Это не плагин, это боты... у меня та же проблема с моим sql-менеджером вызывающим форварды в несколько потоков. Упорядочивание их через mutex ничего не дают пока...
Код:
#0  0xb773f420 in __kernel_vsyscall ()
#0  0xb773f420 in __kernel_vsyscall ()
#1  0xb7037257 in raise () from /lib/libc.so.6
#2  0xb7038a93 in abort () from /lib/libc.so.6
#3  0xb7079025 in __libc_message () from /lib/libc.so.6
#4  0xb708168d in _int_free () from /lib/libc.so.6
#5  0xb706e764 in fclose@@GLIBC_2.1 () from /lib/libc.so.6
#6  0xb1d40afb in SystemFile::Close (this=0xaf523cf8) at /home/ubuntu/amxmodx/amxmodx/CFileSystem.h:235
#7  0xb1d3f1f6 in amx_fclose (amx=0xae24028, params=0xad251e04) at /home/ubuntu/amxmodx/amxmodx/file.cpp:707
#8  0xb1d72ca3 in amx_Callback (amx=0xae24028, index=67, result=0x9ed70ed0, params=0xad251e04) at /home/ubuntu/amxmodx/amxmodx/amx.cpp:475
#9  0xb1db0be2 in JIT_OP_SYSREQ () from /home/server97356/game/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
Завтра пересоберу AMXX последнюю из исходников, возможно где-то при сборке накосячили...

Я тестировал часов 12 в 100+ потоков и ничего не падало... а на холостую падает каждые 3-4 часа.
 
Последнее редактирование:
Сообщения
401
Реакции
113
Помог
2 раз(а)
Так-с.. спустя 3 недели экспериментов я все починил у себя.. Промежуточные итоги.

JIT_OP_SYSREQ возникала из-за использования в потоках различных PrepareArray* поскольку разработчикам в голову не приходило, что форварды AMXX могут вызываться в несколько потоков, и они в конце каждого восстанавливали значение amx->hea до начала вызова... а если получалось так, что форвард один (в моем случае SQL-callback для соединения в целом), и вызывается несколькими потоками получалось, что передавая 2 параметра через PrepareArray*, в первом потоке они получали номера 0 и 1, а во втором 2 и 3... И когда первый вызов форварда завершался он не только восстанавливал amx->hea (что приводило к возможности перезаписи данных второго потока), но и сбрасывал количество элементов PrepareArray* в 0 (хотя там были данные и для другого вызова), тем самым вызывая ошибку во втором потоке JIT_OP_SYSREQ.

Починил, путем создания своих массивов в адресном пространстве вызываемого плагина и передачи ссылки в CELL... Добавил mutex чтобы все потоки это делали по очереди и воспроизвел восстановление amx->hea, аналогично amx_Release(), только с контролем утечки памяти.

Пошла ошибка amx_Callback - которая сигнализирует, что внутри форварда - крашится вызов какого-то внешнего, не amxx-натива, в моем случае это были рандомно fetch_row и fetch_field, в первом случае это был баг в методе асинхронного чтения mariadb-client 3.3 в условиях ограничения pps на стороне сервера БД, а второе было вызвано полями с NULL и динамическими полями (a / b и format(a / b, 5)) у которых оказались новые для меня типы данных newnumeric и varstring, вместо ожидаемого float, double или numeric... Пофиксил...

Неделю не мог свалить сервер в краш при любых нагрузках до 15к запросов в 32 потока, одновременно. Усложнил метод тестирования, дабавив элемент неожиданности в виде смены карты... 10 раз подряд выполняем в консоле "acs_sql_test; ....;changelevel de_dust2".. Появилась новая ошибочка.

CSPForward::execute(...) - я доработал свою функцию abort(), заставив ее ожидать завершения всех запущенных потоков и на момент любого завершения работы сервером у меня было все "чики-поки"... Однако краши не хотели уходить, причем они начинались в начале карты, после старта и успешного выполнения 2 основных запросов SQL, на моменте инициализации ботов YaPb...

Что уж они там делают такого я не знаю (я вообще не нашел в YaPb никаких forward-ов), но отключив ботов - я смог выполнить хоть 10, хоть 20 раз подряд команду "acs_sql_test; ....;changelevel de_dust2" и сервер раз за разом выполняет SQL запросы и меняет карты 10 или 20 раз без каких-либо ошибок. 3-й день насилую сервер и все в порядке...
 
Последнее редактирование:
Сообщения
401
Реакции
113
Помог
2 раз(а)
Проверил на старых YaPb - все ок. Держит до 12-13 команд (это очень большая нагрузка, db4.myarena.ru "клеит ласты" с 2-3 таких команд):acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;acs_sql_test;changelevel de_dust2, а дальше уже падает метамод или amxx:
Код:
Program terminated with signal 11, Segmentation fault.
#0  0xb7023739 in _int_malloc () from /lib/libc.so.6
#0  0xb7023739 in _int_malloc () from /lib/libc.so.6
#1  0xb70259ba in malloc () from /lib/libc.so.6
#2  0xb72262a8 in operator new (sz=2204) at /valve/build/targets/src/gcc-4.6.1/libstdc++-v3/libsupc++/new_op.cc:52
#3  0xb2be900a in ?? () from /home/server97356/game/./cstrike/addons/metamod/metamod_i386.so

Program terminated with signal 11, Segmentation fault.
#0  0xb1e53072 in THash<int, defentry>::iterator::_Inc() () from /home/server97356/game/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
#0  0xb1e53072 in THash<int, defentry>::iterator::_Inc() () from /home/server97356/game/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
#1  0xb1e5120e in CLangMngr::CLang::Clear() () from /home/server97356/game/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so
#2  0x09d69764 in ?? ()

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

1725182097937.png

На форум не залилось, положу пока тут: https://disk.yandex.ru/d/8izdBtwGhTgG_A
 
Последнее редактирование:
Сообщения
401
Реакции
113
Помог
2 раз(а)
Это были не боты...:blush2: точнее они генерировали события, которые приводили к ошибке в моем модуле, а ошибка была у меня.. Вообще эта ошибка интересная, для 3 разных причин - 1 ошибка :crazy:

1) Как оказалось, чтобы случайно не пересечься с другим форвардом и не занулить его данные подготовленные функцией PrepareArray* нужно все потоки вызывающие форварды синхронизировать с фронтом кадра (pfnStartFrame)...

Если этого не сделать - можно получать самые разнообразные и фирдипердозные краши, особенно при смене карты... Которыми я мучал Silenta, а он тактично меня игнорировал и не посылал на три буквы.

2) Затем пришлось доработать немного штатную setAmxString, которую я взял в "оболочке" ReAPI... Оказалось, что обращение к нулевому указателю (*str) внутри форварда тоже генерирует эту ошибку. И найти ее даже имея дамп с отладчиком и смещения модулей в памяти - весьма нетривиальная задача...
Код:
size_t set_amx_string(cell *dest, const char *str, size_t max_len)
{
    size_t count = 0;
    if (dest && max_len)
    {
        while (str && *str && ++count < max_len)
            *dest++ = (cell)*str++;
        *dest = 0;
    }
    return count;
}

3) Использование объявлений переменных NEW внутри форварда - также модифицирует стек и в многопоточной среде, если не выполнять п.1) тоже приводит к этой ошибке... Пока были переменные static - все работало, меняю на new - получаю краш :dntknw:

У меня все заработало, SQL-запросы выполняются теперь в несколько раз (60-100 на 1 ядро) быстрее и я просто счастлив, после 2 месяцев поиска ошибок...:boast:
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу