目前cssandra的內存分配以下:css
# some systems like the raspberry pi don't report cores, use at least 1java
if [ "$system_cpu_cores" -lt "1" ]數據庫
thenjvm
system_cpu_cores="1"分佈式
fihtm
# set max heap size based on the followingblog
# max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))內存
# calculate 1/2 ram and cap to 1024MBget
# calculate 1/4 ram and cap to 8192MB
# pick the max
half_system_memory_in_mb=`expr $system_memory_in_mb / 2`
quarter_system_memory_in_mb=`expr $half_system_memory_in_mb / 2`
if [ "$half_system_memory_in_mb" -gt "1024" ]
then
half_system_memory_in_mb="1024"
fi
if [ "$quarter_system_memory_in_mb" -gt "8192" ]
then
quarter_system_memory_in_mb="8192"
fi
if [ "$half_system_memory_in_mb" -gt "$quarter_system_memory_in_mb" ]
then
max_heap_size_in_mb="$half_system_memory_in_mb"
else
max_heap_size_in_mb="$quarter_system_memory_in_mb"
fi
#MAX_HEAP_SIZE="${max_heap_size_in_mb}M"
# Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap size)
max_sensible_yg_per_core_in_mb="100"
max_sensible_yg_in_mb=`expr $max_sensible_yg_per_core_in_mb "*" $system_cpu_cores`
desired_yg_in_mb=`expr $max_heap_size_in_mb / 4`
if [ "$desired_yg_in_mb" -gt "$max_sensible_yg_in_mb" ]
then
HEAP_NEWSIZE="${max_sensible_yg_in_mb}M"
else
HEAP_NEWSIZE="${desired_yg_in_mb}M"
fi
經過閱讀代碼能夠知道,
MAX_HEAP_SIZE:
A = 若是1/2的內存都比1024M要小,則取1/2的內存,不然取1024
B = 若是1/4的內存比8g要小,則取1/4的內存,不然取8G
再取MAX(A,B)
能夠看出當最小時取1/2的內存(1/2的內存比1024M小),最大的內存取8G
HEAP_NEWSIZE = 核數*100M
若是MAX_HEAP_SIZE/4<核數*100M,則取MAX_HEAP_SIZE/4
改成MAX_HEAP_SIZE = 512M就能夠正常運行了,這樣就不會出現內存不夠的狀況,可是官方標配是:
!!!!!!!內存不夠就不要用分佈式數據庫