W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
一定要設(shè)置最大內(nèi)存maxmemory參數(shù),否則物理內(nèi)存用爆了就會大量使用Swap,寫RDB文件時的速度很慢。注意這個參數(shù)指的是info中的used_memory,在一些不利于jmalloc的時候,內(nèi)存碎片會很大。
多留55%內(nèi)存是最安全的。重寫AOF文件和RDB文件的進程(即使不做持久化,復(fù)制到Slave的時候也要寫RDB)會fork出一條新進程來,采用了操作系統(tǒng)的Copy-On-Write策略(子進程與父進程共享Page。如果父進程的Page-每頁4K有修改,父進程自己創(chuàng)建那個Page的副本,不會影響到子進程)。
另外,需要考慮內(nèi)存碎片,假設(shè)碎片為1.2,則如果機器為64G,那么64*45%/1.2 = 24G作為maxmemory是比較安全的規(guī)劃。
留意Console打出來的報告,如"RDB: 1215 MB of memory used by copy-on-write"。在系統(tǒng)極度繁忙時,如果父進程的所有Page在子進程寫RDB過程中都被修改過了,就需要兩倍內(nèi)存。
按照Redis啟動時的提醒,設(shè)置
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
使得fork()一條10G的進程時,因為COW策略而不一定需要有10G的free memory。
另外,記得關(guān)閉THP,這個默認的Linux內(nèi)存頁面大小分配策略會導(dǎo)致RDB時出現(xiàn)巨大的latency和巨大的內(nèi)存占用。關(guān)閉方法為:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
當(dāng)最大內(nèi)存到達時,按照配置的Policy進行處理, 默認策略為volatile-lru,對設(shè)置了expire time的key進行LRU清除(不是按實際expire time)。如果沒有數(shù)據(jù)設(shè)置了expire time或者policy為noeviction,則直接報錯,但此時系統(tǒng)仍支持get之類的讀操作。 另外還有幾種policy,比如volatile-ttl按最接近expire time的,allkeys-lru對所有key都做LRU。注意在一般的緩存系統(tǒng)中,如果沒有設(shè)置超時時間,則lru的策略需要設(shè)置為allkeys-lru,并且應(yīng)用需要做好未命中的異常處理。特殊的,當(dāng)redis當(dāng)做DB時,請使用noneviction策略,但是需要對系統(tǒng)內(nèi)存監(jiān)控加強粒度。
CPU不求核數(shù)多,但求主頻高,Cache大,因為redis主處理模式是單進程的。同時避免使用虛擬機。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: