Cấu hình tham số khởi động JVM

Protector4J hỗ trợ cấu hình tham số khởi động JVM khi đóng gói, đồng thời cũng cho phép thêm vào tạm thời hoặc chỉnh sửa trực tiếp script khởi động đã tạo sau khi triển khai. Các tham số nâng cao khác trong giao diện GUI có thể xem tại Cài đặt chế độ nâng cao của Protector4J.

1. Ba cách cấu hình

Cách thứcPhạm vi có hiệu lựcCó được giữ nguyên khi đóng gói lại hay khôngMục đích sử dụng được khuyến nghị
JVM startup options trong giao diện GUIGhi tất cả các script khởi động nền tảng được tạo ra lần nàyVâng, có thể tạo lại nếu các tham số nhiệm vụ vẫn còn tồn tạiĐóng gói theo cách tương tác hàng ngày
--jvm-option của CLIGhi tất cả các script khởi động nền tảng được tạo ra lần nàyVâng, các script lệnh/nhiệm vụ có thể được sử dụng làm nguồn cấu hìnhCI/CD, hỗ trợ phát hành lặp lại
Sửa đổi run.sh, run.bat hoặc các script của TomcatChỉ chỉnh sửa thư mục triển khai hiện tạiKhông, việc đóng gói lại sẽ ghi đè lên dữ liệuĐiều chỉnh khẩn cấp hoặc dành riêng cho môi trường sau khi triển khai
Biến môi trường APP_JAVA_OPTSChỉ ảnh hưởng đến tiến trình hiện tại hoặc môi trường hiện tạiKhông ghi vào tệp tinChẩn đoán tạm thời, chèn vào môi trường container/dịch vụ

Nên đặt các tham số dài hạn vào các nhiệm vụ GUI hoặc lệnh CLI, và sử dụng APP_JAVA_OPTS để ghi đè tạm thời. Sau khi chỉnh sửa trực tiếp script tạo ra, cần ghi lại những thay đổi vào cấu hình triển khai; lần đóng gói lại tiếp theo sẽ cần áp dụng lại chúng.

2. Cấu hình trong giao diện GUI

  1. Chọn Advanced — customise the options yourself trên trang nhập liệu; chế độ đơn giản cho phép truy cập vào các tham số nâng cao bằng cách nhấp vào Customize… trên trang cuối cùng.
  2. Tìm JVM startup options trong Common options.
  3. Nhập một tham số hoàn chỉnh cho mỗi dòng, ví dụ:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Kiểm tra lại trong tóm tắt tham số cuối cùng, sau đó thực hiện việc bảo vệ.

Các tham số này sẽ được tự động ghi vào các tập tin run.shrun.bat được tạo ra; run.command trên macOS sẽ chuyển hướng đến run.sh, vì vậy sử dụng cùng các tham số đó. Các tham số của Tomcat cũng sẽ được đưa vào các đường dẫn khởi động của bin/catalina.shbin/catalina.bat. Tính năng Library Encryption chỉ tạo tập tin nén mà không tạo script khởi động, nên không hỗ trợ cấu hình này.

Các tùy chọn khởi động JVM trong giao diện người dùng

3. Cấu hình trong CLI

Mỗi tham số sử dụng --jvm-option một lần; không nên kết hợp nhiều tham số JVM thành một giá trị duy nhất:

p4j javaapp app.jar dist \
  --jvm-option -Xms512m \
  --jvm-option -Xmx2g \
  --jvm-option -Dfile.encoding=UTF-8

Spring Boot:

p4j springboot app.jar dist \
  --jvm-option -Xms1g \
  --jvm-option -Xmx2g

Tomcat:

p4j tomcat app.war dist \
  --context /app \
  --jvm-option -Xms1g \
  --jvm-option -Xmx2g

Các tham số đơn chứa khoảng trắng hoặc ký tự đặc biệt cần được đặt trong dấu ngoặc để bảo vệ toàn bộ nội dung:

--jvm-option '-Dexample.message=hello world'

Bộ mã hóa sẽ thực hiện việc thoát ký tự cho các script shell và batch tương ứng dựa trên giới hạn tham số.

4. macOS / Linux: Chỉ cần sửa đổi trực tiếp script.

Các ứng dụng Java và Spring Boot thông thường sẽ chỉnh sửa giá trị run.sh của thư mục đầu ra. run.command chỉ là phiên bản chuyển đổi của run.sh, vì vậy không cần phải chỉnh sửa lại.

Tìm kiếm JVM_OPTS=(...) cùng các file JVM_OPTS+=(...) có thể tồn tại sau đó, và thêm một dòng trước khi kiểm tra APP_JAVA_OPTS:

JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
  # ...
fi

Đừng xóa các tham số --add-opens, --module-path hoặc --add-modules đã được tạo bởi Spring Boot/JavaFX.

Chỉnh sửa Tomcat thành bin/catalina.sh, sau JVM_OPTS=(...) trong run_java() hãy thêm nội dung sau:

run_java() {
  JVM_OPTS=(...)
  JVM_OPTS+=("-Xms1g" "-Xmx2g")
  # ...
}

Thay đổi này cùng lúc ảnh hưởng đến việc vận hành giao diện người dùng của run.sh và việc khởi động phía sau của bin/startup.sh.

5. Windows: Điều chỉnh trực tiếp script

Đối với các ứng dụng Java và Spring Boot thông thường, hãy chỉnh sửa thư mục đầu ra của run.bat. Tìm dòng set "JVM_OPTS=..." được tạo ra, sau đó thêm nội dung vào trước dòng APP_JAVA_OPTS:

set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g -Dfile.encoding=UTF-8"
if defined APP_JAVA_OPTS set "JVM_OPTS=%JVM_OPTS% %APP_JAVA_OPTS%"

Hãy giữ nguyên nội dung của JVM_OPTS, không được xóa các tham số nội bộ cần thiết cho Spring Boot/JavaFX.

Chạy Tomcat ở chế độ nền trên Windows

Chỉnh sửa bin\catalina.bat, sau đó thêm nội dung vào sau dòng set "JVM_OPTS=...":

set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"

Điều này sẽ ảnh hưởng đến run.bat hoặc bin\catalina.bat run.

Khởi động Tomcat ở chế độ nền trên Windows

bin\startup.bat sử dụng PowerShell để tạo tiến trình nền. Cách chỉnh sửa lâu dài đơn giản nhất là thiết lập APP_JAVA_OPTS trước khi gọi catalina.bat:

@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%

Nếu cần hỗ trợ cả môi trường tiền tố và hậu tố mà không phải bảo trì hai bộ script, nên ưu tiên tạo lại gói Tomcat thông qua --jvm-option của GUI hoặc CLI.

6. Sử dụng tạm thời APP_JAVA_OPTS.

macOS / Linux

APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh

Tomcat:

APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh

Windows CMD

Đặt trong phiên CMD hiện tại (các lệnh sau vẫn sẽ kế thừa giá trị này; sử dụng set APP_JAVA_OPTS= để xóa).

set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat

Chỉ có hiệu lực trong phạm vi cục bộ, môi trường sẽ được khôi phục sau khi chạy xong.

setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal

Tomcat:

set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat

Windows PowerShell

$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS

7. Thứ tự các tham số và những lưu ý cần biết.

  • Các tham số bắt buộc tạo ra bởi công cụ sẽ được đặt ở phía trước, các tham số được cấu hình qua GUI/CLI sẽ được thêm vào sau, và APP_JAVA_OPTS sẽ được thêm vào cuối cùng.
  • Các giá trị xuất hiện sau một số tham số JVM sẽ ghi đè lên giá trị trước đó, nhưng không phải tất cả tham số đều cho phép lặp lại; nên tránh dựa vào việc ghi đè bằng tham số lặp.
  • APP_JAVA_OPTS được tách bằng dấu cách, không phù hợp với các tham số đơn phức tạp chứa dấu cách; đối với loại tham số này, nên ưu tiên sử dụng GUI, --jvm-option hoặc chỉnh sửa trực tiếp mảng script.
  • Các tham số JVM phải nằm trước lớp chính hoặc -jar; các tham số ứng dụng được đặt sau lệnh run.sh/run.bat.
  • Sau khi thay đổi kích thước bộ nhớ heap, cần kiểm tra lại bằng cách xem xét giới hạn bộ nhớ của container, lượng bộ nhớ có sẵn trên hệ điều hành và tải công việc thực tế.
  • Việc đóng gói lại sẽ ghi đè lên script khởi động; những thay đổi thủ công sẽ không được tự động kết hợp.