현재 memory 128기가, 코어40개의 node 5개를 운영중인데, memory는 몇기가로 설정하면 좋을까?
es가이드를 보면 30기가로 설정하는 것을 추천한다.

자바 명령어로 손쉽게 30기가로 설정하는 것이 좋다는 것을 알 수 있다.
31기가, 30기가, 32기가로 설정했을때 보면 30기가일때가 compressedzero base가 됨.

1.

java -Xmx31G -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode 2>/dev/null | grep Compressed | grep Oops

> heap address: 0x00007fc918200000, size: 31744 MB, Compressed Oops mode: Non-zero based:0x00007fc9181ff000, Oop shift amount: 3 bool PrintCompressedOopsMode := true {diagnostic} bool UseCompressedOops := true {lp64_product}

2.

java -Xmx30G -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode
2>/dev/null | grep Compressed | grep Oops

 

> heap address: 0x0000000080000000, size: 30720 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 bool PrintCompressedOopsMode := true {diagnostic} bool UseCompressedOops := true {lp64_product}

3.

java -Xmx32G -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode 2>/dev/null | grep Compressed | grep Oops

 

> bool PrintCompressedOopsMode := true {diagnostic}
bool UseCompressedOops = false {lp64_product}

 

30g로 옵션을 변경한 후에는 재시작을 해줘야하는데, 이미 인덱스가 존재하고 있었으므로 _cluster/settings api로 allocation.enable=none으로 변경해준 뒤에 재시작하고, 다시 all로 변경해주자.

PUT _cluster/settings 
{ 
	"transient": { 
    	"cluster.routing.allocation.enable": "none"
        } 
} 

# after node restart.

PUT _cluster/settings
{ 
	"transient": {
    	"cluster.routing.allocation.enable": "all"
        }
}

 

설정값을 none으로 변경뒤에 node를 일단 내리면 해당 node에 있던 primary shard가 다른 node에 있던 replica shard와 교환 하게 되고, 교환된 replica shard는 unassigend 상태가 된다. 그리고 node를 올리고 설정값을 all로 변경되면 unassigend replica shard가 그  node에 할당된다. 

 

 

+ Recent posts