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àmPhạm vi tác độngCòn giữ sau khi đóng gói lạiHợp nhất với
Tùy chọn khởi chạy JVM trên giao diệnCác tập lệnh khởi chạy sinh ra cho mọi nền tảng trong lượt nàyCó, 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ệnhCác tập lệnh khởi chạy sinh ra cho mọi nền tảng trong lượt nàyCó; câu lệnh hoặc tệp tác vụ chính là nguồn tham chiếuCI/CD và các lần dựng lặp lại được
Sửa run.sh, run.bat hay tập lệnh TomcatChỉ thư mục đã triển khai mà bạn sửaKhô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_OPTSChỉ tiến trình hoặc môi trường hiện tạiKhông ghi gì xuống đĩaChẩ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

  1. Ở 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.
  2. Trong mục Tùy chọn chung, tìm Tùy chọn khởi chạy JVM.
  3. 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
  1. 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.shrun.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.shbin/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.

Tùy chọn khởi chạy JVM trên giao diện đồ họa

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ệnh run.sh hay run.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.