2009-06-06 35 views
11

Chúng tôi đang chạy máy chủ ứng dụng tomcat xử lý hơn 100 phiên đồng thời. Trong 2 tháng qua, người dùng tích cực nhất nhận thấy rằng đôi khi họ bị đuổi khỏi hệ thống.Phiên Tomcat hết hạn bất ngờ

Như tôi đã hiểu từ các phiên đăng nhập tomcat đang hết hạn mà không có lý do nào.

Tôi thấy không có vấn đề gì từ phía ứng dụng web. Có vấn đề gì từ phía tomcat không?

Tomcat 6.0.18.

+2

Bạn tìm thấy nguyên nhân gì? –

Trả lời

8

Nếu đã có cơ hội không có mã kích hoạt này, tôi sẽ xem xét sử dụng bộ nhớ. Điều này có thể là hiệu ứng của Tomcat hết bộ nhớ và các phiên không hợp lệ để khôi phục.

Nếu ở tất cả các bộ sưu tập rác có thể theo dõi, và/hoặc đặt giám sát trên với jconsole hoặc jvisualvm.

2

có một thời gian chờ, bạn có thể cấu hình trong web.xml của bạn:

<web-app> 
    ... 
    <session-config> 
    <session-timeout>-1</session-timeout> 
    </session-config> 
</web-app> 

sử dụng -1 cho không thời gian chờ

+1

Vấn đề không có ở đó. Thời gian chờ hiện tại được đặt thành một giờ. Nhưng người dùng đang bị đá trong khi chủ động sử dụng ứng dụng –

-1

Mặc dù tôi không biết nguyên nhân của vấn đề, một sửa chữa có thể (mà tôi đã thực hiện tại dự án trước đây của tôi) sẽ chạy ứng dụng trên cụm tomcat và có phiên chuyển đổi dự phòng. Phiên có thể được mặc định dính và khi một nút đi xuống, các nút lành mạnh nhận các phiên và tất cả điều này là minh bạch cho người dùng cuối.

+3

Dường như việc phân cụm có nhiều khả năng gây ra vấn đề với phiên hơn là khắc phục chúng. – erickson

2

Tăng ghi nhật ký các phiên, điều này có thể làm sáng tỏ vấn đề của bạn.

Trang cấu hình Tomcat Logging in Tomcat bao gồm ví dụ về tăng ghi nhật ký phiên.

0

Bạn có thể tìm kiếm cơ sở dữ liệu lỗi của Tomcat, nhưng tốt hơn hết bạn nên xem xét ứng dụng web của mình trước. Cơ hội có điều gì đó sai với Tomcat là rất thấp.

Cố gắng điều tra điều gì gây ra việc vô hiệu phiên. Bạn đang sử dụng bộ lọc? Bạn có yêu cầu đa ngữ cảnh không? Hãy thử thêm thông tin đăng nhập cho mọi yêu cầu để tìm hiểu, khi nào chính xác phiên bị mất.

4

Tôi sẽ tăng giám sát máy chủ nói chung và các phiên cụ thể.

Ứng dụng giám sát tốt là lambda probe - nó cho phép bạn xem các phiên hiện tại và dữ liệu của chúng. Tôi cũng sẽ thêm một HttpSessionListener để đăng nhập tạo và hủy phiên.

Sửa

là có khả năng là bạn thêm một số đối tượng không serializble để phiên và Tomcat không passivate chúng vào đĩa?

Chỉnh sửa 2

Lambda thăm dò có vẻ là đã chết, và có một ngã ba tốt hơn nhiều của dự án qua tại http://code.google.com/p/psi-probe/

7

Nguyên nhân có thể là bạn đưa vào phiên giao dịch một đối tượng mà không triển khai giao diện Serializable. Tomcat thỉnh thoảng viết một số phiên trên đĩa. Nếu một phiên chứa các đối tượng không thể tuần tự hóa, nó sẽ đơn giản được loại bỏ khỏi vùng chứa (vì NotSerializableException). Nếu điều này xảy ra, bạn sẽ thấy Ngoại lệ trong tệp nhật ký tomcat.

+0

Trong trường hợp nào tomcat viết phiên trên đĩa? trong môi trường dựa trên cụm hoặc khi nó hết bộ nhớ? –

2

Chúng tôi chỉ chạy vào này với tomcat 6_0_18 và ibm 1,5 JVM

Hóa ra đó là một vấn đề JVM ibm với các hoạt động nguyên tử.

Có một sửa chữa trong tomcats lớn hơn 6_0_19 để xử lý.

Nó cũng không xảy ra trong ánh nắng mặt trời 1,5 JVM

đây là một số chi tiết

tomcat bugzilla case

2

Tôi đã thấy vấn đề tương tự khi điều kiện tiên quyết sau đây tồn tại:

  • nhiều các phiên bản ứng dụng tomcat được cài đặt trên nhiều JVMs
  • tải ba lancing (giữa máy chủ web và các JVM Tomcat) không được định cấu hình chính xác.
  • tính năng phiên bản sao Tomcat là không kích hoạt

Do tải không chính xác cân bằng cấu hình, máy chủ web có thể quyết định một cách ngẫu nhiên để phá vỡ phiên mối quan hệ và gửi yêu cầu đến một Tomcat JVM mà chưa bao giờ nhìn thấy phiên trước đó. Tomcat JVM sẽ phát hành một phiên mới và người dùng sẽ mất tất cả dữ liệu phiên previouS của họ và bắt đầu lại hiệu quả.

+0

Bạn có thể cụ thể hơn về cách cân bằng tải không được định cấu hình chính xác không? – fool4jesus

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