Чтобы добиться этого, я написал сценарий Bash. для динамической настройки --max-heap-size и --max-old-space-size на основе доступной памяти в контейнере Docker. Вот скрипт:
/start-node.sh
Код: Выделить всё
#!/bin/sh
# memory limint on Docker container
MEMORY_LIMIT=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
# memory limint in MB
MEMORY_LIMIT_MB=$((MEMORY_LIMIT / 1024 / 1024))
# if memory limint is too bigger (9223372036854771712 is no limit), set to 2 GB
if [ "$MEMORY_LIMIT" -gt 9223372036854771712 ]; then
MEMORY_LIMIT_MB=2048
fi
# heap is 75% of total
HEAP_SIZE_MB=$((MEMORY_LIMIT_MB * 75 / 100))
# Old Generation is 60-80% of heap
OLD_SPACE_SIZE_MB=$((HEAP_SIZE_MB * 70 / 100))
echo "Memory limit: ${MEMORY_LIMIT_MB} MB"
echo "Setting max heap size to: ${HEAP_SIZE_MB} MB"
echo "Setting max old space size to: ${OLD_SPACE_SIZE_MB} MB"
node --max-heap-size=$((HEAP_SIZE_MB * 1024)) --max-old-space-size=${OLD_SPACE_SIZE_MB} ./server.js
- Правильен ли этот подход для динамической настройки памяти в Node. js в среде Docker?
- Есть ли какие-либо улучшения или рекомендации, которые мне следует рассмотреть для управления --max-heap-size и --max-old-space-size ?
- Можно ли предположить, что выделение 75% общей памяти в куче и 70% кучи для старого поколения является хорошим практическим правилом?
Подробнее здесь: https://stackoverflow.com/questions/793 ... e-js-based