系統(tǒng)運(yùn)維
這個(gè)是最近在開發(fā)的過程中遇到的問題,因?yàn)樾枰l繁使用Redis作為中間查詢操作,突然故障了,服務(wù)中止,然后拋出異常
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供嵩明網(wǎng)站建設(shè)、嵩明做網(wǎng)站、嵩明網(wǎng)站設(shè)計(jì)、嵩明網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、嵩明企業(yè)網(wǎng)站模板建站服務(wù),十余年嵩明做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。2020-01-09 09:34:17.848 ERROR 25703 --- [ XNIO-2 task-83] o.z.p.spring.web.advice.AdviceTrait : Internal Server Error
org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:54)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)
at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44)
at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:257)
at org.springframework.data.redis.connection.lettuce.LettuceHashCommands.convertLettuceAccessException(LettuceHashCommands.java:445)
at org.springframework.data.redis.connection.lettuce.LettuceHashCommands.hSet(LettuceHashCommands.java:70)
at org.springframework.data.redis.connection.DefaultedRedisConnection.hSet(DefaultedRedisConnection.java:827)
at org.springframework.data.redis.connection.DefaultStringRedisConnection.hSet(DefaultStringRedisConnection.java:501)
at org.springframework.data.redis.core.DefaultHashOperations.lambda$put$8(DefaultHashOperations.java:178)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:184)
at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:95)
at org.springframework.data.redis.core.DefaultHashOperations.put(DefaultHashOperations.java:177)
at com.smpteam.aaaa.service.impl.RedisServiceImpl.setESSession(RedisServiceImpl.java:59)
at com.smpteam.aaaa.service.impl.RedisServiceImpl$$FastClassBySpringCGLIB$$11b51629.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
. . .
Caused by: io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
然后我通過redis-cli
登錄redis服務(wù)器檢查情況,發(fā)現(xiàn)ping不通
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
這提示及其友好,雖長(zhǎng)但我喜歡:)
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
Redis被配置為保存數(shù)據(jù)庫(kù)快照,但它目前不能持久化到硬盤。用來修改集合數(shù)據(jù)的命令不能用。請(qǐng)查看Redis日志的詳細(xì)錯(cuò)誤信息。
原因強(qiáng)制關(guān)閉Redis快照導(dǎo)致不能持久化。本質(zhì)上是內(nèi)存不足導(dǎo)致的。因此需要進(jìn)行相關(guān)的內(nèi)存處理:
修改redis config 修改快照備份的目錄,即將快照重定向到其他目錄 修改主機(jī)內(nèi)存配置 解決方案1將stop-writes-on-bgsave-error設(shè)置為no,這個(gè)方式是直接關(guān)閉保存持久化快照
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
這個(gè)在生產(chǎn)中可能會(huì)出現(xiàn)一些問題,這個(gè)然而這個(gè)方法治標(biāo)不治本,他只是讓我們“忽略”他而已,使用之前需要確認(rèn)bgsave
失敗的原因,比如當(dāng)redis用于緩存、會(huì)話的場(chǎng)景的時(shí)候,這么做是允許的
將備份的rdb文件,重定向到目錄
CONFIG SET dir /tmp/some/directory/other/than/var
CONFIG SET dbfilename temp.rdb
使用這個(gè)命令之后,需要確保bgsave_in_progress
返回結(jié)果是0
在內(nèi)核運(yùn)行時(shí)動(dòng)態(tài)地修改內(nèi)核的運(yùn)行參數(shù)
echo \'vm.overcommit_memory = 1\' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1