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ức | Phạm vi có hiệu lực | Có được giữ nguyên khi đóng gói lại hay không | Mục đích sử dụng được khuyến nghị |
|---|---|---|---|
| JVM startup options trong giao diện GUI | Ghi tất cả các script khởi động nền tảng được tạo ra lần này | Vâ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 CLI | Ghi tất cả các script khởi động nền tảng được tạo ra lần này | Vâng, các script lệnh/nhiệm vụ có thể được sử dụng làm nguồn cấu hình | CI/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 Tomcat | Chỉ chỉnh sửa thư mục triển khai hiện tại | Khô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_OPTS | Chỉ ảnh hưởng đến tiến trình hiện tại hoặc môi trường hiện tại | Không ghi vào tệp tin | Chẩ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
- 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.
- Tìm JVM startup options trong Common options.
- 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
- 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.sh và run.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.sh và bin/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.

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_OPTSsẽ đượ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-optionhoặ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ệnhrun.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.