Tùy chọn khởi chạy JVM
Protector4J cho phép đặt tùy chọn khởi chạy JVM ngay khi đóng gói, thêm tạm thời sau khi triển khai, hoặc sửa thẳng các tập lệnh khởi chạy đã sinh. Những tùy chọn nâng cao khác của giao diện đồ họa được mô tả trong Thiết lập chế độ nâng cao của Protector4J.
1. Bốn cách thiết lập
| Cách làm | Phạm vi tác động | Còn giữ sau khi đóng gói lại | Hợp nhất với |
|---|---|---|---|
| Tùy chọn khởi chạy JVM trên giao diện | Các tập lệnh khởi chạy sinh ra cho mọi nền tảng trong lượt này | Có, chừng nào bạn còn giữ thiết lập tác vụ | Đóng gói thủ công hằng ngày |
--jvm-option trên dòng lệnh | Các tập lệnh khởi chạy sinh ra cho mọi nền tảng trong lượt này | Có; câu lệnh hoặc tệp tác vụ chính là nguồn tham chiếu | CI/CD và các lần dựng lặp lại được |
Sửa run.sh, run.bat hay tập lệnh Tomcat | Chỉ thư mục đã triển khai mà bạn sửa | Không; đóng gói lại sẽ ghi đè | Chỉnh gấp hoặc chỉnh riêng cho một môi trường sau khi triển khai |
Biến môi trường APP_JAVA_OPTS | Chỉ tiến trình hoặc môi trường hiện tại | Không ghi gì xuống đĩa | Chẩn đoán nhất thời và đưa vào từ vùng chứa hay dịch vụ |
Hãy để các tùy chọn dùng lâu dài trong tác vụ trên giao diện hoặc trong câu lệnh, còn APP_JAVA_OPTS dành cho việc ghi đè nhất thời. Nếu bạn sửa thẳng một tập lệnh đã sinh, hãy ghi lại thay đổi đó vào tài liệu triển khai: lần đóng gói sau bạn sẽ phải làm lại.
2. Thiết lập trên giao diện đồ họa
- Ở trang đầu vào, chọn Nâng cao — tự tùy chỉnh các tùy chọn. Nếu đang ở chế độ đơn giản, bấm Tùy chỉnh... trên trang cuối để mở phần tùy chọn nâng cao.
- Trong mục Tùy chọn chung, tìm Tùy chọn khởi chạy JVM.
- Nhập mỗi dòng một tùy chọn hoàn chỉnh, ví dụ:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Kiểm tra lại ở phần tóm tắt cuối rồi chạy bảo vệ.
Các tùy chọn này được ghi vào run.sh và run.bat đã sinh. Trên macOS, run.command gọi chính run.sh đó nên dùng cùng bộ tùy chọn. Với Tomcat, chúng còn được ghi vào đường khởi chạy trong bin/catalina.sh và bin/catalina.bat. Mã hóa thư viện chỉ tạo kho lưu trữ mà không sinh tập lệnh khởi chạy, nên ô nhập này bị vô hiệu.

3. Thiết lập trên dòng lệnh
Lặp lại --jvm-option một lần cho mỗi tùy chọn. Đừng gộp nhiều tùy chọn JVM vào một giá trị.
p4j javaapp app.jar dist \
--jvm-option -Xms512m \
--jvm-option -Xmx2g \
--jvm-option -Dfile.encoding=UTF-8
Với Spring Boot:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Với Tomcat:
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Tùy chọn nào có khoảng trắng hay ký tự đặc biệt thì đặt cả cụm trong dấu nháy:
--jvm-option '-Dexample.message=hello world'
Trình đóng gói sẽ thoát ký tự cho từng tùy chọn riêng biệt theo đúng ranh giới đó, phù hợp với tập lệnh shell và tệp bó.
4. Sửa tập lệnh trên macOS và Linux
Với ứng dụng Java thông thường và Spring Boot, hãy sửa run.sh trong thư mục xuất. Tệp run.command chỉ gọi lại run.sh, không cần đụng tới.
Tìm dòng JVM_OPTS=(...) đã sinh cùng các dòng JVM_OPTS+=(...) sau đó, rồi thêm dòng của bạn trước đoạn 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 tùy chọn --add-opens, --module-path hay --add-modules mà trình đóng gói đã sinh cho Spring Boot hoặc JavaFX.
Với Tomcat, hãy sửa bin/catalina.sh và thêm dòng của bạn sau JVM_OPTS=(...) bên trong run_java().
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Cách này bao trùm cả lúc chạy tiền cảnh bằng run.sh lẫn lúc khởi động hậu cảnh bằng bin/startup.sh.
5. Sửa tập lệnh trên Windows
Với ứng dụng Java thông thường và Spring Boot, hãy sửa run.bat trong thư mục xuất. Tìm dòng set "JVM_OPTS=..." đã sinh và thêm dòng của bạn trước đoạn kiểm tra 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 sẵn có của JVM_OPTS. Đừng xóa những tùy chọn nội bộ mà Spring Boot hoặc JavaFX cần.
Tomcat chạy tiền cảnh trên Windows
Sửa bin\catalina.bat và thêm dòng của bạn sau dòng set "JVM_OPTS=..." sẵn có:
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Cách này áp dụng cho run.bat và cho bin\catalina.bat run.
Tomcat khởi động hậu cảnh trên Windows
Tệp bin\startup.bat tạo tiến trình nền qua PowerShell. Cách đơn giản nhất để đổi lâu dài là đặt APP_JAVA_OPTS trước khi nó gọi catalina.bat:
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Nếu muốn bao trùm cả tiền cảnh lẫn hậu cảnh mà không phải trông hai tập lệnh, tạo lại gói Tomcat với --jvm-option bằng giao diện hoặc dòng lệnh sẽ gọn hơn.
6. Dùng APP_JAVA_OPTS cho một lần chạy
macOS và Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Với Tomcat:
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
CMD trên Windows
Đặt biến cho phiên CMD hiện tại. Các lệnh sau đó sẽ kế thừa; xóa bằng set APP_JAVA_OPTS=.
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Để giới hạn phạm vi và khôi phục môi trường sau đó:
setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal
Với Tomcat:
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat
PowerShell trên Windows
$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS
7. Thứ tự và những điều cần lưu ý
- Các tùy chọn do công cụ sinh ra đứng trước, kế đến là những gì bạn đặt trên giao diện hoặc dòng lệnh, và
APP_JAVA_OPTSđược nối vào sau cùng. - Với một số tùy chọn JVM, giá trị đứng sau sẽ ghi đè giá trị trước, nhưng không phải tùy chọn nào cũng lặp lại được an toàn — đừng dựa vào việc lặp để ghi đè.
APP_JAVA_OPTSđược tách theo khoảng trắng nên không mang được một tùy chọn đơn lẻ có chứa khoảng trắng. Với những trường hợp đó, hãy dùng giao diện,--jvm-option, hoặc sửa mảng ngay trong tập lệnh.- Tùy chọn JVM phải đứng trước lớp chính hoặc
-jar; tham số của ứng dụng thì đặt sau lệnhrun.shhayrun.bat. - Sau khi đổi kích thước vùng nhớ heap, hãy đối chiếu với giới hạn bộ nhớ của vùng chứa, bộ nhớ khả dụng của máy chủ và tải thực tế.
- Đóng gói lại sẽ ghi đè các tập lệnh khởi chạy, và những sửa đổi thủ công không được gộp lại tự động.