[Bug] IotDB pods crash with OOM because we calculate the memory based on the node not pod resources
- Lenguaje dominante
- Java
- Estrellas
- 6.4k
- Forks
- 1.2k
- Merge medio
- 1 d 23 h
- PR fusionados (30 d)
- 115
Descripción
### Search before asking
- [x] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.
### Version
latest
### Describe the bug and provide the minimal reproduce step
Start IOTDB datanode and confignode pods with memory limits, for example 8 GB, and allocate 8 GB of resources to each pod.
Pods keep crashing with OOM errors because the JVM is trying to allocate 16 GB of memory.
### What did you expect to see?
```
# When running in a container/pod, use cgroup memory limit instead of host memory
if [ -f /sys/fs/cgroup/memory.max ]; then
# cgroup v2
cgroup_mem=`cat /sys/fs/cgroup/memory.max`
if [ "$cgroup_mem" != "max" ]; then
cgroup_mem_in_mb=`expr $cgroup_mem / 1024 / 1024`
if [ "$cgroup_mem_in_mb" -lt "$system_memory_in_mb" ]; then
system_memory_in_mb=$cgroup_mem_in_mb
fi
fi
elif [ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
# cgroup v1
cgroup_mem=`cat /sys/fs/cgroup/memory/memory.limit_in_bytes`
cgroup_mem_in_mb=`expr $cgroup_mem / 1024 / 1024`
if [ "$cgroup_mem_in_mb" -lt "$system_memory_in_mb" ]; then
system_memory_in_mb=$cgroup_mem_in_mb
fi
fi
```
8GB
I would expect the memory to be auto-calculated based on the pod resources (8 GB), not the node resources (32 GB).
```
# scripts\conf\datanode-env.sh
system_memory_in_mb=`free -m | sed -n '2p' | awk '{print \$2}'` returns 32 GB.
```
### What did you see instead?
32 GB and a lot of pod restarts
### Anything else?
```
# iotdb\WORKING_CONFIGS.md
## 2) JVM Memory (Linux)
Edit these files:
- conf/confignode-env.sh
- conf/datanode-env.sh
Set MEMORY_SIZE explicitly to avoid auto-sizing surprises.
### ConfigNode memory
```bash
# conf/confignode-env.sh
MEMORY_SIZE=2G
```
### DataNode memory
```bash
# conf/datanode-env.sh
MEMORY_SIZE=8G
``````
Why are there no env varibales for this setting?
Do you expect the clouad env to manualy go and change this limit?
This is a hack, and we should not have to do this in a pod
```
- IOTDB_JMX_OPTS=-Xmx4G
```
### Are you willing to submit a PR?
- [x] I'm willing to submit a PR!
Guía de contribución
Línea de trabajo
Comience con conf/confignode-env.sh y conf/datanode-env.sh, especialmente con el cálculo de system_memory_in_mb mediante free -m. Compare los casos de límite de memoria de cgroup v2 y v1 descritos en el issue y, a continuación, verifique que un pod limitado a 8 GB dimensiona la JVM según ese límite en lugar de según la memoria del host y evita los reinicios por OOM.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java, shell
- Área
- databases, devops
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 68/100