Devculi Blog

Huge pages and Java

Posted in: Java

Enable huge pages for docker

Step 1: Create external volumes to used by multiple containers

touch make_hugepages_volumes.sh

# paste below content to that file
docker volume create --driver local \
    --opt type=none \
    --opt device=/dev/hugepages \
    --opt o=bind hugepages

chmod +x make_hugepages_volumes.sh
bash make_hugepages_volumes.sh

Step 2:

Used in docker-compose.yml

Example:

version: "3"
services:
  selenium-hub:
    image: selenium/hub:4.6.0-20221104
    container_name: selenium-hub
    expose:
      - 4442
      - 4443
      - 4444
    volumes:
      - hugepages:/dev/hugepages
    environment:
      - SE_JAVA_OPTS=-XX:+UseHugeTLBFS -XX:+UseLargePages -Xms128M -Xmx128M
      - JAVA_OPTS=-XX:+UseHugeTLBFS -XX:+UseLargePages -Xms128M -Xmx128M
    restart: unless-stopped

volumes:
  hugepages:
    external: true

Step 4: Start your docker-compose and recheck to make sure hugepages under used

grep HugePages_ /proc/meminfo
HugePages_Total:    1200
HugePages_Free:      907
HugePages_Rsvd:      331
HugePages_Surp:        0

References

https://rigtorp.se/hugepages/

https://kstefanj.github.io/2021/05/19/large-pages-and-java.html

https://mpolednik.github.io/2017/06/20/hugepages-and-virtualization/