2012-07-05 33 views
5

Tình huống của tôi giống như sau:Tắt máy Tomcat RẤT chậm sau khi gọi tắt máy.

Mỗi lần trước khi tải tệp chiến tranh lên thư mục ứng dụng web, tôi dừng Tomcat bằng cách gọi sh shutdown.sh. Nó được sử dụng để mất khoảng 30 giây cho một tắt máy hoàn toàn. Nhưng bây giờ nó không hoạt động tốt nữa.

Trên thực tế, nó đã làm một số công việc, bởi vì khi tôi truy cập vào ứng dụng từ trang web nó ném 503 lỗi (Dưới bảo trì). Nhưng khi tôi sử dụng ps aux | grep tomcat để kiểm tra, quá trình tomcat vẫn còn đó. Và nó sẽ ở đó khoảng 5 - 10 phút.

Tôi hiểu rằng nó có thể cần phải mất thêm thời gian để hoàn thành tất cả các nhiệm vụ, nhưng nó là quá chậm (5 - 10 phút), trước khi nó dừng lại hoàn toàn. Tôi không hiểu tại sao điều này xảy ra, nhưng phải có lý do nào đó. Có thể có điều gì đó liên quan đến mã, hoặc tập lệnh triển khai mới mà chúng tôi đã sử dụng gần đây. Tôi hầu như không có manh mối về nơi để kiểm tra.

Điều này quan trọng đối với nhóm của chúng tôi vì chúng tôi đang sử dụng "tự động triển khai", trong đó chúng tôi sử dụng tập lệnh để tự động đóng gói tệp chiến tranh, tải lên và triển khai vào một thời điểm cụ thể. Nếu chúng ta bắt đầu một cá thể tomcat mới trước khi một phiên bản cũ tắt máy thành công, nó sẽ treo ở đó để vĩnh cửu, và dọn dẹp nhiệm vụ bằng "kill -9" là khó khăn.

Có ai đã thử nghiệm sự cố này không? Bất kỳ đầu mối nào cũng sẽ được đánh giá cao.

+1

Q: Vì vậy, điều cuối cùng là những gì trong nhật ký khi nó lấy này 5-10 phút? CSONG: "ps -eaf" cung cấp cho bạn bất kỳ manh mối nào (hay bạn chỉ thấy một quy trình Java với việc sử dụng CPU bằng 0)? Phiên bản Tomcat của bạn là gì? Hệ điều hành của bạn? CSONG: nếu bạn xác định một "java" quá trình "treo" trong "ps", bạn sẽ nhận được một dấu vết stack: http://wiki.apache.org/tomcat/HowTo#How_do_I_obtain_a_thread_dump_of_my_running_webapp_.3F – paulsm4

+0

@ paulsm4: Nhìn vào nhật ký , Tôi thấy rằng ngay cả sau khi gọi tắt máy, công việc Quartz vẫn chạy. Sau một thời gian một lỗi bị loại bỏ: SEVERE: Ứng dụng web [/ project] dường như đã bắt đầu một chuỗi có tên [Resource Destroyer trong BasicResourcePool.close()] nhưng đã không thể dừng nó. Điều này rất có khả năng để tạo ra một rò rỉ bộ nhớ. –

+0

@ paulsm4: nhân tiện, tôi có công việc thạch anh chạy khoảng 10 giây một lần. Đây có phải là vấn đề không? –

Trả lời

2

Hoàng Long -

Cảm ơn bạn đã cập nhật.

1) Thực tế là bạn thấy việc Quartz của bạn chạy, và thông báo lỗi, cả hai đều có ý nghĩa:

NGHIÊM TRỌNG: Các ứng dụng web [/ dự án] dường như đã bắt đầu một chủ đề mang tên [Resource Destroyer trong BasicResourcePool.close()] nhưng có không thể dừng nó. Điều này rất có khả năng để tạo ra một rò rỉ bộ nhớ.

2) Một gợi ý là cấu hình:

http://forum.springsource.org/showthread.php?17833-Spring-Quartz-Tomcat-no-shutdown

tôi đã cùng một vấn đề. Tôi đã sửa lỗi bằng cách thêm destroy-method="destroy" vào định nghĩa SchedulerFactoryBean. Cách này mùa xuân đóng xuống lịch trình khi ứng dụng là dừng lại.

3) Một giả thuyết khác là thêm một người biết lắng nghe shutdown:

http://forums.terracotta.org/forums/posts/list/15/4341.page

Sử dụng một người biết lắng nghe bối cảnh và giới thiệu một thời gian chờ trên shutdown giải quyết vấn đề đối với tôi. Tôi chỉ chờ đợi một giây sau khi tắt:

public void contextDestroyed(ServletContextEvent sce) { 
    try { 
     factory.getScheduler().shutdown(); 
     Thread.sleep(1000); 
+0

Tôi nghĩ rằng tôi đã tìm ra: lý do chính là tôi vẫn có các công việc giao dịch thạch anh đang chạy. Về phương pháp thứ 3 của câu trả lời của bạn, bạn có nghĩa là tôi phải ghi đè lên Spring "ContextLoaderListener" cho nhiệm vụ này? –

2

Nếu đây là cái gì mà dùng thần thông bắt đầu xảy ra trong vòng vài ngày qua, có lẽ bạn đang chạy vào lỗi thứ hai Linux bước nhảy vọt?Để biết thêm thông tin, xem

https://serverfault.com/questions/403732/anyone-else-experiencing-high-rates-of-linux-server-crashes-during-a-leap-second

https://access.redhat.com/knowledge/articles/15145

http://pedroalves-bi.blogspot.fi/2012/07/java-leap-second-bug-how-to-fix-your.html

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