2012-06-21 31 views
15

Tôi đã có trường hợp của Jenkins thất bại và không có gì, nhưng Jenkins redeployment (Jenkins là một webapp trong Tomcat) đã giúp. Ngay cả các công việc mới thất bại với lỗi không gian PermGen, nhưng tất cả các thiết lập đều tốt (tất cả các tham số -XX:PermSize ở mọi nơi có thể). Vấn đề là sau khi redeployment tất cả mọi thứ làm việc như một say mê. Nhưng đó là một giải pháp khắc nghiệt. Tôi muốn biết, nếu có một số tùy chọn để khôi phục trạng thái Jenkins. Cảm ơn trước.PermGen lỗi trong Jenkins

Cập nhật: Được rồi, đối với những người có thể phải đối mặt với điều gì đó như thế, dưới đây là những gì tôi đã tìm ra. Những người đã viết rằng tốt hơn là triển khai Jenkins như một mô-đun Tomcat có lẽ không gặp phải các vấn đề của bất kỳ triển khai dự án nào (với trình cắm thêm Jenkins Deploy hoặc với một số tomcat-maven-plugin trong Maven's pom.xml). Tôi không có bất kỳ vấn đề nào tôi mô tả khi cài đặt riêng Jenkins. Whew!

+0

bạn có đang chạy dưới ubuntu không? nếu có, bạn cần ghi đè cài đặt/etc/default/tomcat. Nếu không, bạn có thể thử chạy tomcat với JVM Jrockit mà không bị các vấn đề về khoảng trống. – jocelyn

+0

@jocelyn Yep, đó là Ubuntu và tôi đã cố gắng ghi đè các cài đặt đó. Jrockit có thể là một giải pháp, vẫn còn hơi lạ khi thay đổi JVM vì Jenkins. –

Trả lời

6

Tôi từng gặp phải lỗi tương tự: jenkins đang thực thi các bản dựng maven, bao gồm cả việc kiểm tra chắc chắn thực hiện. Tôi phát hiện ra rằng phiên bản của maven tôi đã sử dụng (V2 cái gì đó) đã không vượt qua các tùy chọn bộ nhớ JVM của tôi để fork fork chắc chắn, và một số thử nghiệm đã thất bại vì điều này. MAVEN_OPTS, JAVA_OPTS, không ai làm việc.

Tôi đã kết thúc việc chuyển các tùy chọn bộ nhớ của mình trực tiếp trong tệp settings.xml và các lỗi PermGen đã biến mất.

Dưới đây là các tùy chọn tôi được sử dụng (ứng dụng được khá lớn):

-Xms512m -Xmx1024m -XX: PermSize = 512M -XX: MaxPermSize = 1024M

+1

Cảm ơn, có lẽ tôi sẽ cần điều đó, nhưng trong trường hợp của tôi PermGen luôn xuất hiện ngay từ đầu, không phải trong khi thực hiện các bài kiểm tra hoặc một cái gì đó khác. –

4

hoàn toàn chưa được kiểm tra đề nghị, nhưng this answer gợi ý sử dụng -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled khi khởi động Tomcat (mặc dù có vấn đề trong một ngữ cảnh hoàn toàn khác). Tuy nhiên, This answer cho thấy rằng CMSPermGenSweepingEnabled là không cần thiết trên Java 6 và -XX:+UseConcMarkSweepGC phải được sử dụng cho CMSClassUnloadingEnabled để có hiệu lực.

Ít nhất -XX:+CMSClassUnloadingEnabled có thể thực hiện thủ thuật giả định rằng vấn đề cơ bản là do các lớp được duy trì không cần thiết trong không gian PermGen cho cá thể Tomcat của bạn.

+0

Cảm ơn, nhưng tôi đã thử điều đó. Tôi tìm thấy một giải pháp, xem cập nhật. –

34

Một khung cảnh đó thực sự quan trọng đối với các lỗi không gian PermGen là (và nó phải này chính xác):

-XX:MaxPermSize=512m 

Một dấu gạch ngang, hai Big Xs, Big-M, Big- P, Big-S, không có dấu cách, kích thước-in-megs, chữ thường m. Nếu bạn vít nó lên nó sẽ bị bỏ qua. 99% của tất cả các bản sửa lỗi PermGen tôi thấy rằng "không hoạt động" là bởi vì ai đó không làm theo hướng dẫn chính xác và sử dụng Big-M cho megabyte thay vì một chút, hoặc đặt hai dấu gạch ngang ở phía trước thay vì một cho thí dụ.

Ngoài ra, 512 megs chỉ là một điểm khởi đầu ... điều chỉnh để phù hợp với hệ thống của bạn.

+7

"** Một ** dấu gạch ngang, ** hai ** Big Xs, Big-M, Big-P, Big-S, không có dấu cách, kích thước-in-megs" khiến tôi trở nên tuyệt vời! –

0

Tôi thấy việc chạm vào JRE đến Java 8 đã giúp.Theo mặc định, Jenkins sử dụng JRE trong thư mục chính, được gọi bởi nhiệm vụ jenkins.xml

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