FATAL: out of memory (unable to allocate 137438953472 bytes)

Всем здравствуйте!

Manticore периодически падает с ошибкой “FATAL: out of memory (unable to allocate 137438953472 bytes)” или “FATAL: out of memory (unable to allocate 9007199254740992 bytes)”. После появления такой ошибки в логе все запросы на добавление или изменение документов зависают, а поиски работают нормально. Для проверки я использовал версию “4.0.3 008747438@211126 release”, но и с версиями “4.0.2” или “3.6.0” ситуация точно такая же. ОС: Windows Server 2016 x64.
Для дальнейшей работы необходимо снять процесс “searchd.exe” с помощью Диспетчера задач Windows и запустить заново searchd.exe.

Минимально для воспроизведения проблемы я запускаю Manticore с пустым каталогом data, затем программа на C# создает несколько таблиц, в том числе ‘parameter’ и добавляет один документ.

http://127.0.0.1:9308/sql
mode=raw&query=CREATE TABLE parameter (value text stored) rt_mem_limit=‘512M’

http://127.0.0.1:9308/insert
{“index”:“parameter”,“id”:3,“doc”:{“value”:“1”}}

И после этого с большой вероятностью Manticore выводит ошибку в лог (но не всегда).

Это конфигурация manticore.conf.in:

common {
        plugin_dir = /usr/local/lib/manticore
        lemmatizer_base = f:/prog/manticore/dicts
    }

searchd {
    listen = 127.0.0.1:9312
    listen = 127.0.0.1:9306:mysql
    listen = 127.0.0.1:9308:http
    log = f:/prog/manticore/var/log/searchd.log
    query_log = f:/prog/manticore/var/log/query.log
    pid_file = f:/prog/manticore/var/searchd.pid
    data_dir = f:/prog/manticore/var/data
    query_log_format = sphinxql

    seamless_rotate = 1
    preopen_indexes = 1
    unlink_old = 1
    workers = threads 
    thread_stack = 2M 
}

indexer {
    mem_limit = 1024M
    lemmatizer_cache = 512M
}

Также я запускаю параллельно Process Monitor от Sysinternals. В нем ничего особенного не видно.

query.log:
/* Tue Nov 30 10:57:19.354 2021 conn 1 real 0.001 wall 0.001 found 0 / SELECT * FROM parameter WHERE MATCH(’{“equals”:{“id”:1}}’) AND id=1 LIMIT 0,1 OPTION agent_query_timeout=0;
/
Tue Nov 30 10:57:19.362 2021 conn 1 real 0.000 wall 0.000 found 0 / SELECT * FROM parameter WHERE MATCH(’{“equals”:{“id”:3}}’) AND id=3 LIMIT 0,1 OPTION agent_query_timeout=0;
/
Tue Nov 30 10:57:21.489 2021 conn 1 real 0.000 wall 0.000 found 0 */ SELECT * FROM parameter WHERE MATCH(’{“equals”:{“id”:3}}’) AND id=3 LIMIT 0,1 OPTION agent_query_timeout=0;

searchd.log:
[Tue Nov 30 10:57:12.289 2021] [10396] DEBUG: StartGlobalWorkpool
[Tue Nov 30 10:57:12.300 2021] [10396] starting daemon version ‘4.0.3 008747438@211126 release’ …
[Tue Nov 30 10:57:12.300 2021] [10396] listening on 127.0.0.1:9312 for sphinx and http(s)
[Tue Nov 30 10:57:12.300 2021] [10396] listening on 127.0.0.1:9306 for mysql
[Tue Nov 30 10:57:12.300 2021] [10396] listening on 127.0.0.1:9308 for sphinx and http(s)
[Tue Nov 30 10:57:12.300 2021] [10396] DEBUG: ‘rt_flush_period’ - nothing specified, using default value 36000000000
[Tue Nov 30 10:57:12.301 2021] [1012] DEBUG: no valid indexes to serve
[Tue Nov 30 10:57:12.301 2021] [10396] DEBUG: expression stack for creation 0
[Tue Nov 30 10:57:12.303 2021] [10396] DEBUG: expression stack for eval/deletion 80
[Tue Nov 30 10:57:12.312 2021] [10396] DEBUG: filter stack delta 240
[Tue Nov 30 10:57:12.313 2021] [10396] DEBUG: ‘binlog_max_log_size’ - nothing specified, using default value 268435456
[Tue Nov 30 10:57:12.320 2021] [10396] DEBUG: MAC address 40:8d:5c:20:2a:26 for uuid-short server_id
[Tue Nov 30 10:57:12.321 2021] [10396] DEBUG: uid-short server_id 94, started 81590232, seed 6774782696510980096
[Tue Nov 30 10:57:12.322 2021] [17648] DEBUG: SaveMeta: Done.
[Tue Nov 30 10:57:12.332 2021] [968] prereading 0 indexes
[Tue Nov 30 10:57:12.332 2021] [968] prereaded 0 indexes in 0.000 sec
[Tue Nov 30 10:57:12.332 2021] [10396] accepting connections
[Tue Nov 30 10:57:18.842 2021] [12600] DEBUG: RemoveEvent()
[Tue Nov 30 10:57:19.291 2021] [968] DEBUG: last message repeated 3 times
[Tue Nov 30 10:57:19.291 2021] [968] DEBUG: ‘attr_update_reserve’ - nothing specified, using default value 131072
[Tue Nov 30 10:57:19.293 2021] [968] DEBUG: ‘docstore_block_size’ - nothing specified, using default value 16384
[Tue Nov 30 10:57:19.464 2021] [12600] DEBUG: RemoveEvent()
[Tue Nov 30 10:57:20.367 2021] [17648] DEBUG: last message repeated 8 times
[Tue Nov 30 10:57:20.367 2021] [17648] DEBUG: ‘attr_update_reserve’ - nothing specified, using default value 131072
[Tue Nov 30 10:57:20.368 2021] [17648] DEBUG: ‘docstore_block_size’ - nothing specified, using default value 16384
[Tue Nov 30 10:57:20.479 2021] [12600] DEBUG: RemoveEvent()
[Tue Nov 30 10:57:21.381 2021] [17648] DEBUG: last message repeated 8 times
[Tue Nov 30 10:57:21.381 2021] [17648] DEBUG: ‘attr_update_reserve’ - nothing specified, using default value 131072
[Tue Nov 30 10:57:21.383 2021] [17648] DEBUG: ‘docstore_block_size’ - nothing specified, using default value 16384
[Tue Nov 30 10:57:21.492 2021] [17648] FATAL: out of memory (unable to allocate 137438953472 bytes)

В общем проблема проявляется частенько. Но 100% способа воспроизведения проблемы нет. Подскажите, что можно сделать в такой ситуации? Что сделать, что помочь разработчикам понять, из-за чего возникают данные ошибки?

Такая же проблема, как тут FATAL: out of memory (unable to allocate 9007199254740992 bytes)

Можете создать issue на гитхабе? В принципе, если проблема повторяется на просто

http://127.0.0.1:9308/sql
mode=raw&query=CREATE TABLE parameter (value text stored) rt_mem_limit=‘512M’

http://127.0.0.1:9308/insert
{“index”:“parameter”,“id”:3,“doc”:{“value”:“1”}}

то есть шанс, что мы её поймаем, сделав это в windows.

1 Like

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