Làm thế nào để ngăn chặn rất nhiều trường hợp chạy apt-check?


18

Tôi có một máy chủ Ubuntu 12.04 vừa bị sập vì một nguyên nhân rất rõ ràng: hơn 30 apt-checkquy trình tiêu thụ hết bộ nhớ, kẻ giết người OOM đá vào, giết chết các dịch vụ quan trọng. Tôi không chắc chắn các apt-checkquy trình đến từ đâu, nhưng tôi đoán các plugin Nagios / Icinga của tôi check_aptcó thể sử dụng nó, cũng như byobudòng trạng thái có thể muốn hiển thị đầu ra của nó. Tôi đoán một cái gì đó bị khóa và tất cả các quá trình chỉ chờ đợi, nhưng vẫn giữ bộ nhớ.

Làm thế nào tôi có thể ngăn chặn để có rất nhiều phiên bản apt-checktrên hệ thống? Nó không có ý nghĩa với tôi và nó nên thoát ngay khi nó không thể có được khóa đọc trên cơ sở dữ liệu dpkg.

Có vẻ như tôi không phải là người duy nhất gặp rắc rối ở đây. Tất cả các đề xuất apt-checkđều khá tiêu cực:

nhập mô tả hình ảnh ở đây

(trình duyệt sạch, không đăng nhập, không tìm kiếm cá nhân)

Câu trả lời:


8

Một số người apt-checkđã cho tôi những manh mối này vì đây là một kịch bản rất cùn cần sửa chữa. Với tất cả sự tôn trọng đối với các tác giả của nó, nó đang thất bại trên các máy chủ của tôi. Đây là suy nghĩ của tôi:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • lực lượng 19 cho chính nó
  • không có thời gian chờ nào được thiết lập

Sự kết hợp của hai cái cuối cùng cho phép nó chồng chất vô tận theo hình xoắn ốc xuống dưới. Nếu hệ thống được sử dụng cho một số mục đích khác với mức độ ưu tiên cao hơn, số lượng quy trình sẽ chỉ tăng lên và không có kết thúc nào, vì apt-checksẽ không bao giờ có bất kỳ ưu tiên nào đối với nó. Rắc rối sẽ chỉ trở nên tồi tệ hơn khi kẻ giết người OOM quyết định giết chết các quy trình hệ thống quan trọng của bạn.

Nếu một trong hai khía cạnh này trong hành vi là khác nhau, nó sẽ không cho phép hệ thống kết thúc trong tình trạng bị hỏng như vậy là giả định của tôi.

Mặc dù các chuỗi đúng về các quy trình cha mẹ cũng chịu trách nhiệm trong vấn đề này, tôi tin rằng các điểm dưới đây là sai sót apt-checkvà phải được báo cáo là một lỗi để được xử lý đúng:

  • nó nên gợi ý kẻ giết người OOM phải tự giết mình trước
  • nó không nên thiết lập mã hóa cứng
  • nó sẽ thoát nếu mất một khoảng thời gian không hợp lý để có được thông tin

Trên thực tế, có vẻ như kẻ giết người OOM Linux đang thực hiện một số heuristic về điều này. Các quy trình được tạo ra sẽ có được điểm số tăng lên và các quy trình chạy dài bị giảm. ( Nguồn - nhờ Ulrich Dangel cho trỏ nó ra )

Giải pháp có thể tôi có thể đề xuất:

  • kết quả bộ đệm sau khi xử lý
  • xuất bộ đệm nếu ít hơn N lượng giây mà không tải tất cả các thư viện Python-APT cho mọi lệnh --helpgọi (chẵn ) đơn giản .
  • làm cho cấu hình nicelevel - Vui lòng cho phép tôi thay đổi / vô hiệu hóa điều này! Tôi tin rằng việc đặt nó thành 0 sẽ thực sự có ích
  • làm cho nó tăng điểm sát thủ OOM

Tôi nghĩ rằng bạn đã bỏ lỡ điều lớn nhất cần làm: sử dụng lockfile và không cho phép nhiều hơn một phiên bản chạy cùng một lúc.
derobert

@derobert Đó là tập lệnh mà bất kỳ người dùng nào cũng có thể chạy, không có đặc quyền cụ thể trên Ubuntu, không phải là trình nền. Hoặc tôi có thể sử dụng /var/run/ /tmpcho tệp khóa có thể đọc / ghi trên thế giới này một cách an toàn không? Lỗ hổng lớn ở đó: thêm tệp khóa và quản trị viên sẽ không được thông báo về các cập nhật hệ thống!
gertvdijk

Bất cứ điều gì đang khởi chạy nó tự động (dẫn đến hơn 30 bản sao đang chạy) cần phải thực hiện khóa. Hoặc nó có thể tự làm điều đó, mỗi người dùng. Dù bằng cách nào, đó là một lỗi cần được giải quyết.
derobert

Nagios / Icinga dường như tránh được cạm bẫy. Ít nhất, nó đã hết thời gian 10 giây và cảnh báo nếu vượt quá. (Mặc dù tôi không thể tìm cách định cấu hình thời gian chờ - Tôi thích lâu hơn). Byobu trên Debian là nguyên nhân gây ra sự cố cho tôi; trên Ubuntu nó được cho là đã được sửa .
sourcejedi

4

Bạn cần tìm hiểu quá trình sinh sản apt-check. bạn có thể sử dụng cái gì đó như ps để lấy cây quy trình.

ps -A --forest

Nếu apt-check không có cha mẹ, thì đó có thể là vấn đề với apt-check tự nó và không phải là một chương trình cụ thể. nếu đó là trường hợp tôi sẽ cố gắng gỡ lỗi apt-check.


Cảm ơn. Đã cho tôi một số ý tưởng để nhìn xa hơn. Tuy nhiên, điều này khiến tôi tin rằng đó là một vấn đề apt-checkthực sự - xem câu trả lời của riêng tôi .
gertvdijk

Nếu nó tiêu tốn bộ nhớ và thời gian CPU, thì đó không phải là zombie.
Gilles 'SO- đừng trở nên xấu xa'

@Gilles điểm tốt.
chuỗi

0

Văn bản trên Ubuntu 12.04

Tôi có cùng một vấn đề và phát hiện ra rằng bởi vì byobu, nếu tôi chỉ chạy apt-get updatekhông sử dụng byobu, sẽ không có check-aptquy trình. Ngoài ra, nó liên quan đến update-notifiergói, khi tôi loại bỏ các gói đó (update-notifer-common, update-notifier), sử dụng byobuvà chạy apt-get update, nó chạy một lệnh khác nhưng khá giống bộ nhớ sử dụng : apt-get -s -o Debug::NoLocking=true upgrade.

Một số thứ khác có thể chạy apt-get update(nhưng có thể không chạy check-apt)

  • truyền đối số để check_aptcập nhật / nâng cấp pkg.
  • nếu được định cấu hình, /etc/cron.daily/aptcũng có thể cập nhật danh sách gói (xem https://help.ubfox.com/lts/serverguide/automatic-updates.html ), nhưng nó chỉ chạy một lần một ngày và không phải là vấn đề.

Trên máy tính để bàn, có nhiều thứ có thể liên quan.

Kết luận: byobunắm bắt sự kiện khi bạn chạy apt-get updatevà kích hoạt các check-aptquy trình này , định cấu hình lại thanh trạng thái byobuđể sửa lỗi này.

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.