Дроп бафера и кеша (buffer/cache) са RAM-a на Линуксу
Дроп бафера (енг. buffer), може да се користи, рецимо у сценарију кад на хипервизору имате 20 виртуалних машина које користе 100% физичког RAM-а. Сама виртуална машина, примера ради – ако сте јој доделили 10GB RAM-а, она може тренутно да користи 2GB док је рецимо 7GB кеширано и ‘reusable’ – ви иако коритите 2GB RAM-а вас ће то на физичком хосту коштати укупно 9GB RAM-а…а да при том не желите да самој виртуалној машини смањујете RAM који сте јој дали на коришћење.
Из примера са слике 1, рецимо – сервер користи 1345MB RAM-а и толико му тренутно треба – али на хипервизору на којем се налази овај VPS ће бити показано како сервер користи used+buff/cache = 1345+5859=7204MB RAM-а.
Колико RAM-а онда имам на располагању? 617MB?
НЕ. Оно колико имаш је под колоном ‘available’, тј у овом случају 5826MB. Тих 617MB RAM-а је RAM који зврји празан и неискоришћен.
#!/bin/bash ######################################################################################### # Опис: Скрипта за дроп buffer cache-a због ослобађања RAM-а на хипервизору # Аутор: Kompjuteras.com - али можете скрипту користити или мењати како вам срцу драго # Корисите само на виртуалним машинама ако имате проблем са укупном колицином RAM-а на # хипервизору који користите. Ово се не препоручује на прод машинама јер утиче на # перформансе система, јер "Free memory is unused memory is wasted memory" # # Crontab пример (да се окида сваког првог у месецу): # 00 * * * * /root/skripte/DropBufferCache.sh > /tmp/CrontabDropBufferCache.log 2>&1 # ######################################################################################### ################### ВАРИЈАБЛЕ ################### # Ставите LOG_FAJL=/dev/null ако не желите лог LOG_FAJL=/tmp/DropBufferCache.log ################################################# echo "------------------ `date` Before ------------------" >> ${LOG_FAJL} free -m | grep -v Swap | grep -v "buffers/cache" >> ${LOG_FAJL} ################### DROP ACTION #################### # Free pagecache sync ; echo 1 > /proc/sys/vm/drop_caches # Free dentries and inodes sync ; echo 2 > /proc/sys/vm/drop_caches # Free pagecache, dentries and inodes sync ; echo 3 > /proc/sys/vm/drop_caches ################################################### echo "------------------ `date` After ------------------" >> ${LOG_FAJL} free -m | grep -v Swap | grep -v "buffers/cache" >> ${LOG_FAJL} exit 0
После окидања скрипте добићемо овако неко стање
Као што видите, бафер је са 5859MB пао на 439MB али систем и даље користи исто RAM-а и исто RAM-а има на располагању и даље (100MB горе-доле) док је све из бафера прешло у стање блеје (free). Овим смо – хипервизору ослободили око 5GB RAM-а, али смо виртуалној машини набацили нови посао јер уместо да податке које често чита – чита из RAM-а, мора да чита са диска – док не превуче поново назад у бафер чиме се губи на перформансама.
Људи који желе трајно да на овај уврнути начин ослобађају RAM јер кубуре са RAM-ом, неће да га прошире или смање коришћење RAM-а на постојећим VM-овима (или гасити VM-ове) ову скрипту могу поставити у crontab да се под root корисником окида на 20 минута…цена је наравно обарање перформанси, које додуше неће бити баш драстично али ће свакако постојати. Корисници на неким мојим тестним VM-овима нису приметили неке велике разлике у перформансама – што не значи да их и нема.
Дакле, ово користите само на дев машинама, и само на виртуалим машинама које се налазе на хипервизору који кубури са RAM-ом. Нећете ништа системски појебати – али ћете утицати на пад перформанси.