给论坛搜索配置了MeiliSearch,然后用MySQL LIKE兜底,然后发现MeiliSearch占用内存相当高,于是进行了优化。
一、核心原因:默认索引内存+线程太大
MeiliSearch 默认:
- 索引内存无限制,同步帖子时瞬间吃满内存
- 默认线程数多,后台常驻占用内存
- 多余字段参与检索、排序,冗余内存占用
二、第一步:修改配置文件(最有效)
编辑配置:/etc/meilisearch.toml
直接覆盖粘贴下面全套(专为小内存服务器、论坛场景优化)
# 监听地址
http_addr = "127.0.0.1:7700"
# 数据目录
db_path = "/var/lib/meilisearch/data"
# 你的密钥
master_key = "moyu_defghijklmnghijk"
log_level = "WARN"
# 限制最大索引内存(杜绝暴涨占用)
max_indexing_memory = "128MiB"
# 限制索引线程,低配机必改
max_indexing_threads = 2
# 减小HTTP缓存负载
http_payload_size_limit = "10MB"
# 开启官方低内存模式(大幅降低常驻内存)
experimental_reduce_indexing_memory_usage = true
三、第二步:优化索引字段(降内存神器)
论坛只需要 标题、内容、作者 搜索,多余字段全部关闭,内存直接减半。
进入网站根目录执行:
# 重置索引配置,精简字段
php core/yii search delete
php core/yii search configure
如果你的程序支持手动设置,规则如下:
- 可搜索字段:只开 title、content、username
- 可筛选/排序字段:只开 created_at、views
- 关闭所有无用字段:id、ip、device、extra 等(最占内存)
四、第三步:重启生效 + 压内存
systemctl daemon-reload
systemctl restart meilisearch
五、优化后效果(实测)
- 优化后:常驻150M–220M
- 帖子同步、搜索速度完全无影响
- 不会内存飙升、不会卡死、不影响纠错/分词/高亮
六、进阶稳机设置(防止偶尔暴涨)
编辑 systemd 服务,增加内存限制兜底:
/etc/systemd/system/meilisearch.service
在 [Service] 里加两行:
MemoryMax=300M
MemoryHigh=250M
再次重启:
systemctl daemon-reload
systemctl restart meilisearch
作用:强制最高内存不超300M,彻底杜绝吃内存。
醉里不知天在水 𢵗水捧月扰清波。