1. 程式人生 > >redis伺服器堆記憶體不夠用,導致redis掛掉

redis伺服器堆記憶體不夠用,導致redis掛掉

上週公司的生產環境部署,服務不停的掛掉,明明在測試環境是沒有問題的,可能是因為添加了許可權功能,因為許可權是快取到redis裡面的,導致記憶體不夠。下面是報錯的部分程式碼:

=== REDIS BUG REPORT START: Cut & paste starting from here ===
[12632] 20 Jul 12:10:22.091 # Redis version: 2.8.2400
[12632] 20 Jul 12:10:22.091 # Out Of Memory allocating 373865 bytes.
[12632] 20 Jul 12:10:22.091 # --- ABORT
[12632] 20 Jul 12:10:22.091 # --- STACK TRACE
redis-server.exe!LogStackTrace(c:\release\redis\src\win32_interop\win32_stacktrace.cpp:95)(0x00000016, 0x00000008, 0x000
00000, 0x00000001)
redis-server.exe!AbortHandler(c:\release\redis\src\win32_interop\win32_stacktrace.cpp:207)(0x00000001, 0x9F6D3812, 0x000
80000, 0x24F15F67)
redis-server.exe!raise(f:\dd\vctools\crt\crtw32\misc\winsig.c:587)(0x00000001, 0x00000000, 0x0005B469, 0x00000000)
redis-server.exe!abort(f:\dd\vctools\crt\crtw32\misc\abort.c:82)(0x0005B469, 0x40141940, 0x0005B469, 0x00008000)
redis-server.exe!redisOutOfMemoryHandler(c:\release\redis\src\redis.c:3404)(0xD1E80018, 0x00000001, 0x00000028, 0x000000
08)
redis-server.exe!zrealloc(c:\release\redis\src\zmalloc.c:183)(0x0005B460, 0x00000009, 0xD1E80018, 0x00000009)
redis-server.exe!sdsMakeRoomFor(c:\release\redis\src\sds.c:146)(0xD0A3C550, 0x00000009, 0xFFFFFFFE, 0x00001A30)
redis-server.exe!processMultibulkBuffer(c:\release\redis\src\networking.c:1207)(0x00000009, 0x00000009, 0x00001A30, 0x00
000001)
redis-server.exe!processInputBuffer(c:\release\redis\src\networking.c:1251)(0xD0A3C550, 0x00000000, 0x00000000, 0x000000
01)
redis-server.exe!readQueryFromClient(c:\release\redis\src\networking.c:1316)(0xFFE40130, 0x00000001, 0xC2E56F10, 0x00000
001)
redis-server.exe!aeMain(c:\release\redis\src\ae.c:487)(0x5B515AB4, 0x00000002, 0x00000000, 0x00000002)
 

理論生產的伺服器配置應該比測試環境的配置要高,redis的配置也是一樣的,應該不會有問題才對,出現問題後各種查資料,發現有兩個引數對解決這種問題會用,兩者是由一些關聯的,可以查詢一些資料看一下,或者看配置檔案的註釋,說的很清楚

maxheap    -->堆記憶體

maxmemory   最大記憶體設定

在redis.windows.conf配置檔案的開頭有說明,記憶體單位的編寫是不區分大小寫的

相關的報錯可以開啟一下連線: