2013-10-09 13 views
9

tôi sử dụng tùy chọn JVM này để tạo ra các bản ghi gc và cho phép cán:GC dữ liệu luân chuyển log mất trên ứng dụng khởi động lại

$ java -Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 XX:GCLogFileSize=128K 

Tuy nhiên, tôi có một vấn đề khi tôi khởi động lại ứng dụng của tôi. Sau khi khởi động lại, tệp nhật ký đầu tiên gc.log.0 bị ghi đè và dữ liệu của tệp đó không được cuộn đến gc.log.1 và do đó bị mất.

Tôi tự hỏi nếu tôi đúng và nếu có giải pháp cho việc này.

Cảm ơn trước!

Trả lời

7

Bạn cũng có thể sử dụng java timestamps riêng cho rằng:

java -Xloggc:gc-%t.log ...(rest of your line)... 

%t sẽ được thay thế bằng một dấu thời gian bằng java (xem https://bugs.openjdk.java.net/browse/JDK-6950794 cung cấp thông tin và định dạng khác được hỗ trợ bởi -Xloggc

+0

giải pháp ưa thích của tôi cho vấn đề bởi vì nó cũng hoạt động bên trong các tập tin thuộc tính (chẳng hạn như wrapper.conf) Cảm ơn! – dokaspar

+0

Khi tôi thử nghiệm điều này, tệp cho mẫu 'gc_% t.log' trông giống như:' gc_2016-12-06_16-46-30 .log.0.current' mâu thuẫn với tài liệu bạn đã liên kết: '% t - dấu ngày tháng khi tệp nhật ký là cre ated (định dạng: YYYY-MM-DD) ' – joseph

5

Cùng một vấn đề ở đây, tôi cố định nó bằng cách thêm dấu thời gian để tên gc log file như thế này (trong trường hợp này/etc/default/tomcat7):

DATE=`date +%Y-%m-%d-%H-%M` 
JAVA_OPTS="-Xloggc:/var/log/tomcat7/gc-$DATE.log ..." 

cách này bạn giữ các bản ghi gc của bạn sau khi khởi động lại khi jvm bắt đầu bằng dấu thời gian khác và không ghi đè lên gc.log được viết trước đó. bạn cần phải dọn dẹp các tệp này theo cách thủ công theo thời gian (cronjob).

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