Solr 7.7.2单实例索引记录莫名丢失问题排查求助
Solr 7.7.2索引记录莫名丢失排查建议
1. 核心配置与索引完整性检查
- 检查
solrconfig.xml中的提交配置:重点核查autoCommit、autoSoftCommit和commitWithin参数。若autoCommit的maxTime设置过大,未提交的数据在进程异常时会直接丢失;commitWithin若被客户端滥用,可能引发频繁提交导致异常。 - 用Lucene工具校验索引完整性:执行以下命令检查索引段文件是否损坏或不一致
java -jar solr-core-7.7.2.jar org.apache.lucene.index.CheckIndex /path/to/your/solr/core/data/index - 确认索引目录权限:确保Solr进程对
data/index目录拥有完整读写权限,权限不足会导致提交失败,数据无法持久化。
2. 内存与GC深度排查
- 启用并分析GC日志:添加JVM参数开启GC日志记录
查看是否存在频繁Full GC、GC停顿超30秒或CMS并发失败的情况——这类问题会导致Solr无法正常完成提交,进而丢失未持久化的数据。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/solr/gc.log - 调整堆内存配置:修改
solr.in.sh中的SOLR_HEAP,建议设置为物理内存的40%-50%(如8G内存设为3-4G),避免系统内存耗尽触发Swap或OOM Killer。 - 检查系统Swap状态:执行
swapon --show查看Swap使用情况,若Swap频繁读写会严重拖慢Solr性能,建议关闭Swap或降低vm.swappiness参数至10以下。
3. 系统与进程异常排查
- 检查系统日志:查看
/var/log/messages或/var/log/syslog,搜索Out of memory、killed process关键词,确认是否有OOM Killer强制终止Solr进程的记录——进程重启会加载最后一次硬提交的索引,未提交的数据会直接丢失。 - 核对Solr进程启动时间:查看Solr启动日志,对比数据丢失的时间点,确认是否存在进程异常重启的情况。
- 检查磁盘空间:执行
df -h查看索引所在磁盘的使用率,满盘会导致提交操作失败,数据无法写入磁盘。
4. 隐性操作与权限排查
- 分析Solr访问日志:在
solr_home/logs/access.log中过滤所有删除操作,确认是否存在未授权请求或客户端误操作:grep "DELETE " /path/to/solr/logs/access.log - 排查系统定时任务:检查系统cron任务(
crontab -l)、监控工具或第三方脚本,确认是否存在自动重启Solr、清理索引的操作。 - 审计客户端代码:检查业务代码中是否存在隐性的
deleteByQuery操作,或批量更新时的条件错误(比如误将过滤条件写成删除条件),导致批量删除数据。
5. 版本特定Bug与升级验证
- 排查Solr 7.7.x已知Bug:确认官方JIRA记录中7.7.x版本是否存在匹配的索引丢失场景(如并发提交导致的段合并异常)。
- 尝试升级到7.7.x最新补丁版本:7.7.2之后发布的7.7.3-7.7.6版本修复了多个稳定性问题,升级后验证数据丢失问题是否复现。
内容的提问来源于stack exchange,提问作者Ranga Vinod
相关产品推荐
相关产品推荐

