2012-05-23 20 views
6

Chúng tôi có một ứng dụng web Tapestry-Spring-Hibernate chạy trên Tomcat 6, bàn giao khoảng 1.000 yêu cầu một giây. Ngẫu nhiên, không có lý do rõ ràng, một trang chỉ hiển thị một loạt các ký tự ngẫu nhiên trên trình duyệt. Tuy nhiên, khi trang được làm mới, nó sẽ hiển thị tốt. Dưới đây là một màn hình-shot của nguồn của trang bị cắt xén trên Chrome:Ứng dụng web Tapestry trên Tomcat thỉnh thoảng phun ra rác

Page from tomcat on Chrome

đây là những gì tôi đã tìm thấy cho đến nay:

  1. Nó dường như không phải là trình duyệt cụ thể. Tôi đã chứng kiến ​​điều này trên Chrome và Firefox, nhưng người dùng cũng đã báo cáo điều này trên IE 7 trở lên.
  2. Tải trên máy chủ dường như không có tương quan với thời điểm điều này xảy ra.
  3. Làm mới trang hiển thị trang bình thường, dường như không có gì xảy ra.
  4. tôi không thấy bất cứ điều gì có liên quan trong các máy chủ hoặc các bản ghi ứng dụng
  5. Các content-type tag cho trang là <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
  6. Có một vài webapps khác triển khai trên cùng một container, một là Alfresco, nhưng họ dường như không biểu lộ điều này chút nào.

Câu hỏi của tôi là, có người nào đó gặp phải điều này trước đây không và nếu có, họ có thể chỉ cho tôi nơi tôi nên bắt đầu tìm không? Đây có phải là sự cố với trang có nội dung nào đó không đúng loại hoặc máy chủ không thể xử lý được vì lý do nào đó không? Hoặc điều này có thể là một lỗi khuôn khổ trong Tapestry hoặc trong chính ứng dụng? Mọi con trỏ đều được chào đón. Tại thời điểm này, tôi không chắc chắn vấn đề là ở đâu, vì vậy tôi đã không chắc chắn nếu điều này đi trên ServerFault hoặc ở lại đây.

+0

Tôi đã thấy điều này trước khi quá. – pstanton

Trả lời

0

Điều này dường như liên quan đến các vấn đề nén gzip trong khuôn khổ Tapestry (như đề xuất bởi @barnyr) và có thể là lỗi hồi quy trong Tapestry 5.3. Để báo Howard từ một mailing list thread:

Tôi tin rằng đây là một lỗi mà trong những trường hợp nhất định, một tham nhũng dòng GZIP của nội dung trang sẽ được xem trực tiếp cho khách hàng; đây là cố định trong 5.2.6 chắc chắn, nhưng tôi nghĩ rằng nó đã được cố định trong 5.2.5 là tốt.

Việc sửa chữa nhanh chóng là để thêm các biểu tượng cấu hình sau đây trong phương pháp contributeApplicationDefaults của lớp mô-đun của ứng dụng:

configuration.add(SymbolConstants.GZIP_COMPRESSION_ENABLED, "false"); 

Điều này tất nhiên sẽ vô hiệu hóa nén gzip, nhưng có thể một trade-off giá trị thực hiện.

vấn đề Có thể liên quan:

+0

Bạn có thể dễ dàng bật nén gzip ở cấp vùng chứa, ví dụ: http://viralpatel.net/blogs/enable-gzip-compression-in-tomcat/ hoặc google để biết thêm thông tin. – Kalle

2

Rất có thể là lỗi trong ứng dụng. (Hầu hết các lỗi là ... mặc dù xu hướng tự nhiên của các lập trình viên đổ lỗi cho một cái gì đó khác.)

Tuy nhiên, có thể là một chút khó khăn để theo dõi vấn đề này. Tôi khuyên bạn nên bắt đầu với những điều tiêu chuẩn:

  • Xem nhật ký lỗi máy chủ để xem có bất kỳ điều gì lạ xuất hiện tại thời điểm xảy ra một trong các sự kiện hay không.
  • Xem nhật ký truy cập máy chủ để xem bạn có thể xác định yêu cầu đã tạo dữ liệu rác hay không.
  • Bật trình gỡ lỗi trình duyệt của bạn và xem liệu bạn có thể theo dõi yêu cầu xấu theo cách đó hay không.

Nếu bạn có thể tìm ra yêu cầu đưa ra phản hồi xấu là gì, bạn sẽ có thêm lực kéo trong việc tìm nguyên nhân.


FWIW - không giống như kết quả của sự cố mã hóa ký tự. Điều đó trông giống như dữ liệu nhị phân hoặc nén.

+2

Ứng dụng của bạn có nén phản hồi không? Dường như dữ liệu được nén mà không có tiêu đề để cho trình duyệt biết rằng nó đã được nén. Có máy chủ web ở phía trước ứng dụng của bạn không? – barnyr

+0

Có, ứng dụng sẽ giải quyết phản hồi. Và không, chúng tôi không có một máy chủ web phía trước nó. Chúng tôi đã từng, nhưng đó là một tập hợp hoàn toàn khác nhau. Tôi nghĩ bạn có thể đang ở một thứ gì đó với tiêu đề gzip. Tôi sẽ bắt đầu tìm kiếm ở đó cảm ơn! – Jeshurun

1

Đây là một tình huống khiến tôi thấy một trang bị cắt xén. Trên trang lỗi Tapestry thiết lập một tiêu đề phản hồi được gọi là X-Tapestry-ErrorMessage. Rõ ràng dòng mới không được phép trong tiêu đề (ít nhất là trên một số trình duyệt) vì vậy nếu tiêu đề đó có một dòng mới trong đó, bạn sẽ có được vô nghĩa. Một thông báo lỗi mà chúng tôi đã thiết lập đã xảy ra để có một dòng mới. Tôi đã thay đổi nó để xóa bất kỳ dòng mới nào trước khi đặt tiêu đề đó và sau đó trang lỗi hiển thị chính xác.