Cuối cùng!
Kể từ Java 8u191, bây giờ bạn có các tùy chọn:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
có thể được sử dụng để định cỡ heap theo tỷ lệ phần trăm của RAM vật lý có thể sử dụng. (giống như RAM được cài đặt ít hơn những gì kernel sử dụng).
Xem Ghi chú phát hành cho Java8 u191 để biết thêm thông tin. Lưu ý rằng các tùy chọn được đề cập dưới tiêu đề Docker nhưng thực tế chúng áp dụng cho dù bạn đang ở trong môi trường Docker hay trong môi trường truyền thống.
Giá trị mặc định cho MaxRAMPercentage
là 25%. Điều này là vô cùng bảo thủ.
Quy tắc riêng của tôi: Nếu máy chủ của bạn ít nhiều dành riêng để chạy ứng dụng java đã cho, thì bạn có thể không gặp sự cố tăng đáng kể. Nếu bạn đang dùng Linux, chỉ chạy các trình tiện ích tiêu chuẩn và đã cài đặt RAM từ đâu đó khoảng 1 Gb trở lên thì tôi sẽ không ngần ngại sử dụng 75% cho heap của JVM. Một lần nữa, hãy nhớ rằng đây là 75% RAM có sẵn , không phải RAM được cài đặt . Những gì còn lại là các quy trình đất người dùng khác có thể đang chạy trên máy chủ và các loại bộ nhớ khác mà JVM cần (ví dụ cho ngăn xếp). Tất cả cùng nhau, điều này thường sẽ phù hợp độc đáo trong 25% còn lại. Rõ ràng, với RAM được cài đặt nhiều hơn, 75% là đặt cược an toàn và an toàn hơn. (Tôi ước rằng những người JDK đã triển khai một tùy chọn trong đó bạn có thể chỉ định một cái thang)
Đặt MaxRAMPercentage
tùy chọn trông như thế này:
java -XX:MaxRAMPercentage=75.0 ....
Lưu ý rằng các giá trị phần trăm này thuộc loại 'gấp đôi' và do đó bạn phải chỉ định chúng bằng dấu chấm thập phân. Bạn gặp một lỗi hơi kỳ lạ nếu bạn sử dụng "75" thay vì "75.0".