Đây có phải là một thực tiễn Công nghiệp tốt nhất để khởi động lại máy chủ web định kỳ? [đóng cửa]


28

Chúng tôi có một ứng dụng web (được phát triển bởi bên thứ ba) chạy trên Tomcat. Chúng tôi đã nhận được hiệu suất rất xấu từ ứng dụng. Nhà phát triển ứng dụng tuyên bố rằng đây là cách tốt nhất trong ngành để khởi động lại máy chủ web mỗi tối, để giải phóng tất cả việc sử dụng bộ nhớ và bắt đầu lại.

Từ góc độ khách hàng làm giảm bớt vấn đề của họ về việc trang web bị sập trong ngày, nhưng từ góc độ SysAdmin, đó là một giải pháp khủng khiếp.

Chúng tôi lưu trữ 20 ứng dụng này trong các máy chủ khác nhau cho các khách hàng khác nhau và việc phối hợp để đảm bảo rằng tất cả đang được khởi động lại mỗi đêm dường như không đúng.


41
Nói với họ rằng đó là Cách thực hành tốt nhất trong ngành để các nhà phát triển ứng dụng tìm và khắc phục rò rỉ bộ nhớ của họ.
Bart Silverstrim

4
@Bart ơi!
mfinni

1
+1 chỉ để thực hiện ngày của tôi (PS: Bản thân tôi là nhà phát triển)
RN.

1
Anh ấy nói máy chủ hay dịch vụ? Chúng tôi có một ứng dụng tomcat cần dịch vụ khởi động lại mỗi đêm. Nếu tôi không làm điều đó, đến một lúc nào đó trong tương lai nó sẽ sụp đổ. Tôi thà không làm điều đó, nhưng dịch vụ trong ngày quan trọng hơn.
Bồn tắm

1
Nhận một số giám sát tệp nhật ký đi và tải xuống một số công cụ giám sát JVM. Nếu nội dung bị sập vào ban ngày, bạn sẽ thấy ngoại lệ hoặc nội dung nào đó được ghi lại - ngay cả khi chúng là ngoại lệ mặc định. Điều đó sẽ cung cấp cho bạn một cái nhìn sâu sắc về bản chất chung của lỗi. Ngoài ra, hãy xem phần sử dụng bộ nhớ JVM. Các tỷ lệ cược thực sự tốt khi chúng bị rò rỉ bộ nhớ và bạn sẽ nắm bắt được nếu bạn xem heap máy chủ JVM. Chống lại sự phát triển xấu với dữ liệu sysadmin tốt. Nó phá hủy hệ thống phòng thủ "Bạn chỉ không biết mình đang làm gì" và khiến họ thực sự phải trả lời vì sao mọi thứ lại rối tung lên.
FloppyDisk

Câu trả lời:


29

Đây chắc chắn không phải là một thực hành tốt nhất. Trong khi nó tốt để khởi động lại máy chủ của bạn theo định kỳ chỉ để chắc chắn rằng mọi thứ đều đi lên một cách chính xác, cần phải khởi động lại điểm ban đêm để rò rỉ bộ nhớ rất nghiêm trọng trong việc áp dụng.


1
Đây là một điểm rất tốt. Nếu bạn không bao giờ khởi động lại máy chủ của mình như được đề xuất bên dưới, bạn có thể không biết rằng mình có một số dịch vụ không khởi động đúng cách. Sau đó, trong trường hợp mất điện / khởi động lại cứng, máy chủ của bạn có thể không hoạt động trở lại.
einstiien

1
+1. Hàng tháng có thể có ý nghĩa hơn - không chỉ cho khởi động lại, mà đối với quy trình hoạt động bình thường để áp dụng các bản vá, v.v. Tôi đã từng là thành viên của nhóm quản trị viên cho khoảng 1500 máy chủ, 24/7 và mỗi tháng có 3 đêm khởi động lại "theo lịch trình, tại đó tất cả các bản vá, vv cũng sẽ được đưa vào máy chủ. Điều này cho thấy một số kế hoạch ổn định và một quy trình vận hành tiêu chuẩn.
TomTom

12

Có một sự khác biệt giữa "Thực hành tốt nhất", những điều mà nhiều người làm vì lý do chính đáng và "Thực tiễn chung", những điều mà nhiều người làm vì họ lười biếng và / hoặc không biết gì.

Các ứng dụng và máy chủ (tệ hơn) cần được khởi động lại hoặc khởi động lại thường xuyên để tiếp tục chạy tốt khá phổ biến. Nhưng đó cũng là một dấu hiệu rõ ràng rằng bạn có một lỗi nghiêm trọng.

Bằng cách làm cho nó khởi động lại một ứng dụng thường xuyên, công ty của bạn đang che giấu một lỗi nghiêm trọng dưới thảm. Điều này là không thể tha thứ được, con bọ cần phải úp xuống và đè bẹp, hoặc nó sẽ quay lại cắn bạn sau đó.

Tốt nhất, công ty của bạn nên tìm một nhà phát triển tốt hơn. Thật không may, điều này có thể dẫn đến khá nhiều công việc để viết lại các vùng lớn của mã của bạn. Việc nhà phát triển nghĩ rằng mã viết kém có thể chấp nhận được hoặc không biết đủ để nhận ra các triệu chứng của mã lỗi, cho thấy chất lượng của mã thấp. Một nhà phát triển giỏi sẽ không có khả năng hiến pháp để lại nó trong trạng thái đó.

Cho rằng bạn có thể không ở vị trí để thay thế nhà phát triển, một vài gợi ý:

  • Xem nếu bạn có thể có một nhà phát triển tốt hơn xem xét mã và báo cáo đánh giá của họ cho ai đó có thể làm gì đó về nó,
  • Có một cái nhìn vào các công cụ định hình. Nếu bạn đã có các kỹ năng và / hoặc thiên hướng, hãy thử tự cấu hình mã để tìm rò rỉ và báo cáo nó.

Ngay cả khi không truy cập vào các công cụ định hình theo định hướng của nhà phát triển, vẫn có rất nhiều công cụ hướng sysadmin để định hình và giám sát việc sử dụng bộ nhớ trên các ứng dụng Java. Bạn thực sự nên thiết lập giám sát bộ nhớ (đặc biệt là heap) trên các máy chủ sản xuất của bạn trong mọi trường hợp. Tôi khuyên bạn nên điều này ngay cả khi bạn đang chạy mã chất lượng. Nó có thể đưa ra cảnh báo trước khi các ứng dụng lỗi của bạn sắp sửa lật đổ.

Nhưng tốt hơn hết, những điều này sẽ giúp bạn thu thập bằng chứng rằng có rò rỉ, và thậm chí có thể chỉ ra vấn đề nằm ở đâu trong ứng dụng. Điều này sẽ cung cấp cho bạn đạn tốt hơn để vận động hành lang cho nó được cố định.


2
Trên thực tế, rất nhiều lần đó là cơ sở hạ tầng có lỗi chứ không phải mã của nhà phát triển. Chúng tôi không gặp rắc rối với các ứng dụng J2EE đi vào địa ngục thu gom rác định kỳ trên JBoss nhưng hoạt động tốt trên các máy chủ ứng dụng thương mại khác. Vì vậy, nó có thể không phải là lỗi của nhà phát triển, mà là môi trường triển khai.
rmalayter

6

Nhà phát triển ứng dụng có nhiều khả năng tuyên bố rằng đó là lợi ích tốt nhất của riêng anh ta dành cho bạn để che mông anh ta bằng cách làm việc xung quanh công việc không chuyên nghiệp mà anh ta đã làm. Anh ta có thể đã dừng việc thừa nhận rằng anh ta đã viết một cái gì đó với sự rò rỉ bộ nhớ lớn, nhưng không quá ngắn.


3

Nhiều câu trả lời ở đây dường như rơi ra khỏi các giải pháp thực tế. Họ dường như tránh khỏi giáo điều - máy chủ không bao giờ nên được khởi động lại - tại sao chúng ta có 5 số tiền? khả năng chịu lỗi? Vâng, đó là khi họ cần phải ở lại, họ ở lại.

Ngoài ra, để nêu nguyên nhân của các nhà phát triển xấu hoặc thực tiễn phát triển xấu không đi đến gốc rễ của vấn đề. Nó có thể nhưng thường xuyên hơn không phải là mã ứng dụng không tồi. Những vấn đề này đã được tích hợp vào phần lớn mã hệ thống. Rò rỉ bộ nhớ nhỏ, các vấn đề heap Java và permgen nếu bạn đang chạy nhiều ứng dụng nhỏ như chúng tôi. Các máy chủ hiện đại và phần mềm họ chạy rất phức tạp. Khi bạn nghĩ về những gì một máy chủ như tomcat phải làm - phục vụ các tệp, xử lý các yêu cầu web, truyền thông mạng, truyền thông cơ sở dữ liệu, v.v., nó sẽ làm rất nhiều. Ở trong ngăn xếp đó có rất nhiều bộ phận chuyển động.

Chủ động khởi động lại máy chủ cho phép mỗi tuần một lần hoặc tháng là thông minh và hiệu quả theo quan điểm của tôi. Nếu bạn được phân cụm và bạn xoay các máy chủ, bạn sẽ không ảnh hưởng đến máy khách một chút. Khách hàng sẽ hạnh phúc hơn nhiều với hiệu suất của máy chủ của bạn.


2

Máy chủ IMO nên được tắt càng ít càng tốt. Nhiều khả năng Nhà phát triển ứng dụng đã xây dựng một ứng dụng kém chất lượng với rò rỉ bộ nhớ.


Hoàn toàn - Tôi nghĩ OP cần nói với ai đó rằng họ cần tìm một nhà phát triển tốt hơn.
Helvick

2
Có một lý do khiến các công ty lớn trả nhiều tiền cho thời gian hoạt động nhiều lần và tại sao các công ty chi hàng ngàn đô cho nguồn cung cấp năng lượng dự phòng, RAID, lồng trao đổi nóng, v.v., và chắc chắn là họ không cần phải khởi động lại mỗi ngày một lần.
Bart Silverstrim

1

Tôi có một kịch bản khởi động lại một trong những máy chủ web của chúng tôi mỗi đêm nhưng điều đó nhiều hơn vì một ứng dụng java được viết kém hơn là một tiêu chuẩn công nghiệp. Tôi sẽ nói rằng nó không phải là hiếm khi khởi động lại các dịch vụ web. Điều này có thể làm sạch bộ nhớ mà bạn đang tìm kiếm và giảm bớt sự căng thẳng cho máy chủ so với khởi động lại đầy đủ.


1

Một máy chủ tốt nhất không bao giờ nên được khởi động lại. Đó là một trong những lý do tại sao chúng tôi có khả năng chịu lỗi . Nếu bạn phải khởi động lại máy chủ của mình vì các ứng dụng của bạn, thì các ứng dụng của bạn bị rò rỉ bộ nhớ và được xây dựng tồi.

Tôi đã làm việc với Tomcat trước đây và tôi cũng gặp vấn đề tương tự, lần tới tôi sẽ làm việc với một thùng chứa Java, tôi sẽ tìm một cái khác, có thể là JBoss hoặc GlassFish.

Chỉnh sửa: Nếu bạn phải khởi động lại nó mỗi tối bây giờ, thì có lẽ bạn phải khởi động lại nó thường xuyên hơn nếu / khi tải tăng. Hãy chắc chắn để có các ứng dụng vững chắc, đó là giải pháp tốt nhất.


4
Tôi không nghĩ tôi đồng ý khi bạn nói rằng máy chủ không bao giờ được khởi động lại. Máy chủ nên được khởi động lại để áp dụng sửa lỗi bảo mật. Họ không bao giờ cần phải được khởi động lại cho những thứ khác sau đó lên kế hoạch bảo trì.
Zoredache

Đúng là một số máy chủ phải được khởi động lại để áp dụng các bản sửa lỗi bảo mật. Nhưng nếu bạn có một hệ thống đủ tốt, thì bạn không phải khởi động lại hệ thống. Nó tồn tại các hệ thống đang chạy hàng năm. Bạn nên nhắm đến tính sẵn sàng cao nếu bạn đang phục vụ một dịch vụ trên Internet. Nếu bạn có một hệ thống chịu lỗi như một cụm, bạn có thể gỡ từng nút một xuống và cập nhật chúng, khi dịch vụ vẫn đang chạy.
Jonas

1
Nếu bạn chỉ có một máy chủ duy nhất và / hoặc một phần cứng, sẽ không có thứ gọi là Tính sẵn sàng cao. Bạn đang làm sai nếu bạn chỉ cung cấp một máy chủ và dịch vụ của bạn rất quan trọng đến mức không thể chịu đựng được 15 phút ngừng hoạt động mỗi lần để khởi động lại máy chủ. Nếu bạn có ứng dụng "không thời gian chết", thì bạn sẽ có một hệ thống HA thực sự với nhiều nút. Trong trường hợp này, khởi động lại định kỳ cho các bản vá, vv là khá dễ dàng như bạn đã chỉ ra.
EEAA

1
"Lần tới ... tôi sẽ tìm một [thùng chứa Java khác ngoài Tomcat]". Tôi sẽ không đổ lỗi cho Tomcat. Tôi đã chạy các dịch vụ sản xuất trên đó trong nhiều năm và mỗi lần tôi gặp vấn đề này thì hóa ra đó là một vấn đề về ứng dụng. "Hãy chắc chắn có các ứng dụng vững chắc, đó là giải pháp tốt nhất" Chính xác. Thật thú vị, mọi máy chủ ứng dụng Java khác mà tôi đã sử dụng cho đến nay đều gặp phải vấn đề tương tự khi tôi chạy mã bị rò rỉ trên nó. Điều đó nói rằng, Tomcat 7 được cho là có một số loại phát hiện rò rỉ bộ nhớ chủ động.
Kief

0

Thường xuyên nhất tôi từng thấy là hàng tuần. Nơi tôi đang ở hiện tại chúng tôi là một cửa hàng và chúng tôi làm việc đó hàng tháng vào cuối tuần sau Patch thứ ba.


Khi tôi bắt đầu làm việc tại một nơi, tôi thấy rằng họ đã khởi động lại hàng đêm tại chỗ ... Điều đó thật kinh khủng, đặc biệt là khi máy chủ có khoảng 1-2% cơ hội không hoạt động trở lại (lỗi thời gian trong trình điều khiển ổ cứng ). Mất một thời gian để khắc phục "nguyên nhân" cho việc khởi động lại. Thời gian cũng dành.
Brian Knoblauch

0

Mặc dù tôi đồng ý rằng không lý tưởng để khởi động lại máy chủ liên tục, có những tình huống không phải là lỗi của nhà phát triển cũng không phải là điều sai. Chúng tôi có một ứng dụng hoạt động tốt đang bị rò rỉ bộ nhớ vì các vấn đề trong thư viện Python Popen. Đây là một ứng dụng cũ sẽ sớm ngừng hoạt động, nhưng nó rất quan trọng trong kinh doanh. Chúng tôi phải giữ cho nó chạy với tối thiểu phiền phức cho khách hàng của chúng tôi. Vì vậy, chúng tôi chỉ quyết định khởi động lại máy chủ mỗi đêm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.