2010-04-27 29 views
21

Có rất nhiều câu hỏi đặt câu hỏi này hoặc một câu hỏi tương tự.Làm thế nào để tăng không gian heap Java cho một ứng dụng tomcat

Tất cả đều đưa ra lệnh phải được thực thi, những gì tôi không hiểu là tôi viết lệnh này ở đâu. Tôi muốn tăng vĩnh viễn không gian heap cho các ứng dụng tomcat của tôi.

Tôi đọc trang này http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html và nó nói dưới phần Tomcat

Stop Tomcat server, set environment variable CATALINA_OPTS, and then restart Tomcat. Look at the file tomcat-install/bin/catalina.sh or catalina.bat for how this variable is used. For example,

set CATALINA_OPTS=-Xms512m -Xmx512m (Windows, no "" around the value)
export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash, "" around the value)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh, "" around the value)

Vì vậy, tôi thay thế dòng

set CATALINA_OPTS=

với

set CATALINA_OPTS=-Xms512m -Xmx512m

Nhưng tôi vẫn nhận được lỗi .

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.OutOfMemoryError: Java heap space java.lang.reflect.Array.multiNewArray(Native Method) java.lang.reflect.Array.newInstance(Array.java:90) nom.tam.util.ArrayFuncs.newInstance(ArrayFuncs.java:1028) nom.tam.fits.ImageData.read(ImageData.java:259) nom.tam.fits.Fits.readHDU(Fits.java:573) controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206) controller.ScanServerFiles.doPost(ScanServerFiles.java:39) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

+0

Bạn gặp phải lỗi gì? – laz

+0

@ laz - Tôi đã thêm dấu vết ngăn xếp – Ankur

Trả lời

7

Thay đổi của bạn có thể hoạt động tốt. Ứng dụng của bạn có cần nhiều bộ nhớ hay không - theo dõi ngăn xếp hiển thị một số tính năng liên quan đến Hình ảnh.

Tôi đoán rằng lỗi xảy ra ngay lập tức, với một tệp lớn hoặc xảy ra sau một số yêu cầu.

Nếu lỗi xảy ra ngay lập tức, sau đó bạn có thể tăng thêm bộ nhớ hoặc điều tra tìm hiểu lý do tại sao rất nhiều bộ nhớ là cần thiết cho một tệp.

Nếu lỗi xảy ra sau nhiều yêu cầu, bạn có thể bị rò rỉ bộ nhớ - nơi các đối tượng không được thu thập bởi bộ thu gom rác. Sử dụng một công cụ như JProfiler có thể giúp bạn theo dõi lượng bộ nhớ đang được VM sử dụng và có thể giúp bạn xem bộ nhớ đang sử dụng bộ nhớ gì và tại sao đối tượng không được bộ thu gom rác thu hồi lại.

+5

Câu trả lời này không thực sự trả lời câu hỏi của OP về * cách * để tăng khoảng trống java cho ứng dụng Tomcat? – 8bitjunkie

9

Trước hết, bạn không thể thay đổi cài đặt bộ nhớ chỉ dành cho ứng dụng tomcat mà là cho tất cả cá thể tomcat.

Nếu bạn đang chạy tomcat từ bảng điều khiển (sử dụng startup.bat), bạn sẽ cần phải chỉnh sửa catalina.bat và chơi xung quanh với CATALINA_OPTS. Ví dụ:

set CATALINA_OPTS=-Xms512m -Xmx512m 

Khởi động lại tomcat sẽ áp dụng cài đặt mới.

Nếu bạn vẫn nhận được OutOfMemoryError, bạn cần phải biết bao nhiêu bộ nhớ ứng dụng của bạn cần tại thời điểm cụ thể (nom.tam.util.ArrayFuncs ...). Bạn sẽ phải tối ưu hóa ứng dụng hoặc đơn giản là tăng bộ nhớ cung cấp cho tomcat.

+0

Tôi đang chạy tomcat trên cửa sổ và tôi chỉ lấy các tệp tomcat và giải nén chúng. Tôi không cài đặt bất kỳ dịch vụ nào. – Ankur

22

Có một cơ chế để làm điều đó mà không sửa đổi bất kỳ tệp nào trong bản phân phối. Bạn có thể tạo một tệp riêng biệt %CATALINA_HOME%\bin\setenv.bat hoặc $CATALINA_HOME/bin/setenv.sh và đặt các biến môi trường của bạn ở đó.Hơn nữa, các thiết lập bộ nhớ áp dụng cho JVM, không Tomcat, vì vậy tôi muốn đặt biến JAVA_OPTS thay vì:

set JAVA_OPTS=-Xmx512m

+0

Tôi không thể tìm thấy tập tin setenv.bat bên trong thư mục bin trong tomcat8 –

4
  • mở tab máy chủ trong nhật thực
  • nhấn chuột phải mở
  • nhấp chuột trên cấu hình công khai mở
  • Chuyển đến đối số
  • Tại đây bạn có thể thêm vào đối số VM sau khi được xác nhận

    -Xms64m -Xmx256m 
    
2

nếu bạn đang sử dụng Windows, nó rất đơn giản. Chỉ cần vào các biến System Environnement (máy tính phải clic> Properties> Các tham số hệ thống nâng cao> Biến môi trường); tạo biến hệ thống mới với tên = CATALINA_OPTS và giá trị = -Xms512m -Xmx1024m. khởi động lại Tomcat và tận hưởng!

1

Bạn cần phải thêm các dòng sau vào tệp catalina.sh của mình.

export CATALINA_OPTS="-Xms512M -Xmx1024M" 

CẬP NHẬT: catalina.sh nội dung nói rõ ràng -

Do not set the variables in this script. Instead put them into a script setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

Vì vậy, bạn có thể thêm nêu trên trong setenv.sh thay vì (tạo ra một tập tin nếu nó không tồn tại).

+2

bạn nên đặt nó trong một tệp riêng biệt: bin/setenv.sh –

+0

+1 để đặt nó trong setenv.sh, ví dụ trên ubuntu, bạn có thể có /usr/share/tomcat7/bin/catalina.sh và bạn có thể đặt thay thế dòng đơn đó cho CATALINA_OPTS trong /usr/share/tomcat7/bin/setenv.sh –

-1

bạn có thể thiết lập này trong catalina.sh như CATALINA_OPTS = -Xms512m -Xmx512m

Mở tomcat-dir/bin/file catalina.sh của bạn và thêm dòng sau bất cứ nơi nào -

CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx3024m" 

và khởi động lại tomcat của bạn

Các vấn đề liên quan