Всем здравствуйте!
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% способа воспроизведения проблемы нет. Подскажите, что можно сделать в такой ситуации? Что сделать, что помочь разработчикам понять, из-за чего возникают данные ошибки?