现象描述:
系统重新部署后无法提供服务。
问题分析:
经过排查后,发现系统重启后多次调用创建mongo索引的API,导致进程阻塞,无法提供读写操作,系统获取不到数据。
经过排查发现创建索引的方法上使用了@PostConstruct
注解,注解标注的方法会在项目启动依赖注入结束后自动调用
解决方案:
- 取消注解,在终端进行操作
- 调用创建API时增加参数
background:true
将索引创建改为后台创建
[注]
- mongo的索引创建方式分为前台(默认)和后台两种。
- 前台创建:创建过程中阻塞所有操作,直到创建结束。
- 后台创建:静默方式,耗时长,正常提供读写操作,如果创建索引的内存大于可用内存,消耗时间更长。如果在创建索引过程中,mongo实例异常停止,那么重新启动后,未完成的索引创建工作作为前台进程执行。
网友评论