Quay lại danh sách
Tin tức công nghệ

Tối ưu hóa Keycloak trên VPS 1GB RAM: Hướng dẫn cấu hình hiệu năng cao cho doanh nghiệp

1 tháng 6, 2026

Giới thiệu: Thách thức khi triển khai Keycloak trên hạ tầng giới hạn

Trong kỷ nguyên chuyển đổi số, bảo mật và quản lý định danh (Identity and Access Management - IAM) đã trở thành nền tảng không thể thiếu đối với mọi hệ thống công nghệ thông tin. Keycloak, một giải pháp mã nguồn mở hàng đầu được bảo trợ bởi Red Hat, là sự lựa chọn ưu tiên của nhiều doanh nghiệp nhờ tính năng mạnh mẽ, hỗ trợ các giao thức chuẩn như OAuth2, OpenID Connect (OIDC) và SAML 2.0.

Tuy nhiên, Keycloak được xây dựng trên nền tảng Java (Quarkus trong các phiên bản hiện đại), vốn nổi tiếng là "sát thủ phần cứng" đặc biệt là về phương diện bộ nhớ. Đối với các doanh nghiệp khởi nghiệp hoặc các dự án vừa và nhỏ (SMEs), việc triển khai Keycloak trên một VPS Linux cấu hình thấp với 1GB RAM thường dẫn đến tình trạng treo hệ thống do lỗi Out of Memory (OOM) Killer của Linux kernel. Bài viết này sẽ hướng dẫn bạn từng bước tối ưu hóa chi tiết để vận hành Keycloak ổn định, mượt mà ngay trên hạ tầng tiết kiệm này.

1. Hiểu rõ kiến trúc bộ nhớ của Keycloak

Để tối ưu hóa thành công, trước hết chúng ta cần hiểu rõ bộ nhớ của Keycloak (chạy trên Quarkus JVM) tiêu hao vào những mục đích gì. Bộ nhớ tổng thể của tiến trình Java được chia thành hai phần chính:

  • Heap Memory: Nơi lưu trữ các đối tượng Java được khởi tạo trong quá trình runtime (ví dụ: thông tin session, user tạm thời, tokens).
  • Non-Heap Memory (Metaspace, Stack, Off-heap): Nơi lưu trữ cấu trúc lớp (class metadata), luồng xử lý (threads) và đặc biệt là bộ nhớ đệm Infinispan phân tán.

Khi chạy trên VPS 1GB RAM, hệ điều hành Linux đã chiếm khoảng 150MB - 200MB. Do đó, không gian an toàn còn lại cho Keycloak và Cơ sở dữ liệu (Database) chỉ rơi vào khoảng 800MB. Nếu không giới hạn nghiêm ngặt, JVM sẽ tự động phân bổ theo cấu hình mặc định và làm sập VPS ngay lập tức.

2. Thiết lập cơ chế Swap trên Linux - Hàng rào bảo vệ cuối cùng

Trước khi can thiệp vào cấu hình của Keycloak, việc thiết lập bộ nhớ ảo (Swap) là bắt buộc. Swap đóng vai trò như một "van an toàn", giúp hệ thống không bị crash đột ngột khi RAM vật lý bị quá tải ngắn hạn.

Lưu ý từ chuyên gia: Swap trên ổ cứng SSD có tốc độ chậm hơn RAM vật lý rất nhiều. Chúng ta dùng Swap để ngăn hệ thống bị sập (crash), không phải để thay thế hoàn toàn cho RAM vật lý.

Các bước thiết lập 1GB hoặc 2GB Swap trên Ubuntu/CentOS:

  1. Tạo file swap: sudo fallocate -l 2G /swapfile
  2. Phân quyền bảo mật: sudo chmod 600 /swapfile
  3. Định dạng file swap: sudo mkswap /swapfile
  4. Kích hoạt swap: sudo swapon /swapfile
  5. Cấu hình tự động kích hoạt khi reboot bằng cách thêm dòng sau vào file /etc/fstab: /swapfile swap swap defaults 0 0

3. Tối ưu hóa biến môi trường JVM (Java Virtual Machine)

Từ phiên bản Keycloak 15+ (phát triển trên Quarkus), việc cấu hình JVM trở nên dễ dàng hơn thông qua biến môi trường JAVA_OPTS_APPEND hoặc cấu hình trực tiếp trong file keycloak.conf.

Đối với VPS 1GB RAM, cấu hình tối ưu nhất cho Heap Memory là giới hạn ở mức 512MB. Điều này đảm bảo Keycloak có đủ không gian hoạt động nhưng vẫn để lại khoảng trống cho OS và Database.

Hãy thêm các tham số sau vào cấu hình khởi chạy của bạn:

-Xms128m -Xmx512m -XX:MetaspaceSize=96m -XX:MaxMetaspaceSize=256m

Trong đó:

  • -Xms128m: Bộ nhớ Heap ban đầu khi khởi động là 128MB, giúp tiết kiệm RAM lúc hệ thống nhàn rỗi.
  • -Xmx512m: Giới hạn trần bộ nhớ Heap là 512MB. Hệ thống tuyệt đối không được vượt quá ngưỡng này.
  • -XX:+UseG1GC: Sử dụng Garbage Collector (G1GC) để tối ưu hóa việc dọn dẹp bộ nhớ hiệu quả, giảm thiểu tình trạng giật lag hệ thống (Stop-the-world).

4. Cấu hình tối giản bộ nhớ đệm Infinispan

Mặc định, Keycloak sử dụng Infinispan để làm bộ nhớ đệm cho các thực thể như: users, realms, sessions, và authenticationSessions. Cấu hình mặc định của Infinispan được thiết kế cho các server lớn, cho phép lưu trữ hàng chục nghìn thực thể trong bộ nhớ.

Để tối ưu cho VPS 1GB RAM, chúng ta cần chỉnh sửa file cấu hình conf/cache-ispn.xml của Keycloak. Hãy giới hạn số lượng phần tử tối đa (max-count) được lưu trong bộ nhớ cache xuống mức thấp nhất:


    


    


    

Việc giới hạn này buộc Infinispan phải giải phóng các session cũ hoặc đẩy chúng xuống cơ sở dữ liệu thay vì giữ khăng khăng trên RAM, giúp tiết kiệm đến 40% lượng bộ nhớ tiêu thụ không cần thiết.

5. Lựa chọn và tối ưu hóa Cơ sở dữ liệu đi kèm

Một sai lầm phổ biến là chạy Keycloak cùng với một instance PostgreSQL hoặc MySQL cấu hình mặc định trên cùng một VPS 1GB RAM. Cấu hình mặc định của PostgreSQL có thể tự chiếm tới 250MB RAM, dẫn đến xung đột tài nguyên.

Giải pháp tối ưu:

  • Sử dụng Database bên ngoài (External DB): Nếu có ngân sách, hãy cân nhắc sử dụng các dịch vụ Cloud DB Managed để giảm hoàn toàn tải cho VPS chạy Keycloak.
  • Tối ưu hóa DB tại chỗ nếu dùng chung VPS: Nếu bắt buộc phải chạy DB trên cùng VPS, hãy cấu hình giới hạn kết nối (Connection Pool) trong Keycloak về mức thấp (ví dụ: tối đa 10-15 connections) bằng cách chỉnh sửa tham số db-pool-max-size=10. Đồng thời, cấu hình giảm shared_buffers của PostgreSQL xuống khoảng 64MB - 128MB.

6. Vận hành Keycloak ở chế độ Sản xuất (Production Mode) tinh gọn

Khi khởi động Keycloak, luôn đảm bảo bạn sử dụng lệnh kc.sh start --optimized thay vì chế độ phát triển (Development mode). Chế độ tối ưu hóa giúp loại bỏ các tính năng tự động reload, các màn hình console không cần thiết và giảm lượng log sinh ra.

Bên cạnh đó, hãy tắt bớt các tính năng (Features) không sử dụng của Keycloak như: impersonation, authorization (nếu chỉ dùng định danh cơ bản), hoặc web-authn bằng cách sử dụng tham số loại trừ khi build:

kc.sh build --disabled-features=impersonation,authorization

Mỗi tính năng được tắt đi sẽ giảm bớt số lượng Class được load vào Metaspace, từ đó trực tiếp giải phóng thêm vài chục Megabyte RAM quý giá.

Kết luận: Thành quả đạt được

Bằng cách áp dụng đồng bộ các giải pháp trên: từ tạo Swap, giới hạn JVM Heap (512MB), siết chặt Infinispan Cache, đến tối giản Database Connection Pool, bạn hoàn toàn có thể vận hành ổn định Keycloak Auth Server trên một VPS Linux 1GB RAM. Hệ thống sau tối ưu chỉ chiếm khoảng 650MB - 750MB RAM ổn định, sẵn sàng đáp ứng lưu lượng truy cập từ vài trăm đến hàng nghìn người dùng hoạt động (active users) hàng ngày mà không sợ rủi ro sập nguồn.

Việc tối ưu hóa này không chỉ giúp doanh nghiệp tiết kiệm chi phí vận hành hạ tầng ban đầu mà còn mang lại bài học quý giá về cách làm chủ công nghệ và cấu hình hệ thống một cách tinh gọn, hiệu quả.

Tối ưu hóa Keycloak trên VPS 1GB RAM: Hướng dẫn cấu hình hiệu năng cao cho doanh nghiệp | DPTCloud