Bagaimana mencegah begitu banyak contoh menjalankan apt-check?
18
Saya memiliki server Ubuntu 12,04 yang baru saja crash karena sebab yang sangat jelas: 30+ apt-checkproses memakan semua memori, pembunuh OOM menendang, membunuh layanan vital. Saya tidak yakin dari mana apt-checkproses itu berasal, tetapi saya kira plugin Nagios / Icinga saya check_aptmungkin menggunakannya, dan juga byobubaris status mungkin ingin menampilkan outputnya. Saya kira ada sesuatu yang terkunci dan semua proses hanya menunggu, namun menyimpan memori.
Bagaimana saya mencegah agar ada begitu banyak contoh apt-checkpada sistem? Itu tidak masuk akal bagi saya dan harus berhenti begitu saja tidak bisa mendapatkan kunci baca pada basis data dpkg.
Sepertinya saya bukan satu-satunya yang mengalami masalah di sini. Semua saran apt-checksangat negatif:
(browser bersih, tidak login, tidak ada pencarian yang dipersonalisasi)
Beberapa orang apt-checkmemberi saya petunjuk ini karena merupakan skrip yang sangat tumpul yang perlu diperbaiki. Dengan segala hormat kepada penulisnya, ini gagal pada server saya. Inilah pikiran saya:
tidak ada batas waktu yang ditetapkan pada tindakan
Kombinasi dua yang terakhir memungkinkannya menumpuk tanpa henti dalam spiral ke bawah. Jika sistem digunakan untuk tujuan lain dengan prioritas lebih tinggi, jumlah proses hanya akan meningkat dan tidak ada akhirnya, karena apt-checktidak akan pernah mendapatkan prioritas apa pun darinya. Masalah hanya akan bertambah buruk begitu pembunuh OOM memutuskan untuk membunuh proses sistem vital Anda.
Jika salah satu dari dua aspek dalam perilaku ini berbeda, itu tidak akan membiarkan sistem berakhir dalam keadaan rusak seperti itu adalah asumsi saya.
Sementara string benar tentang proses induk yang bertanggung jawab dalam hal ini juga, saya percaya poin di bawah ini adalah cacat apt-checkdan harus dilaporkan sebagai bug untuk ditangani dengan benar:
itu harus keluar jika dibutuhkan jumlah waktu yang tidak masuk akal untuk mendapatkan informasi
Sebenarnya, tampaknya pembunuh OOM Linux melakukan beberapa heuristik pada ini. Proses Niced akan mendapatkan skor yang meningkat, dan proses yang berjalan lama berkurang. ( sumber - terima kasih kepada Ulrich Dangel karena menunjukkannya )
Solusi yang mungkin saya usulkan:
hasil cache setelah diproses
cache keluaran jika kurang dari N jumlah detik tanpa memuat semua pustaka Python-APT untuk setiap --helppemanggilan yang sederhana ( datar).
buatlah nicelevel dapat dikonfigurasi - Izinkan saya untuk mengubah / menonaktifkan ini! Saya percaya bahwa pengaturan ke 0 akan benar-benar membantu
Saya pikir Anda telah melewatkan hal terbesar yang harus dilakukan: gunakan lockfile dan tidak mengizinkan lebih dari satu contoh dijalankan sekaligus.
derobert
@derobert Ini adalah skrip yang dapat dijalankan oleh setiap pengguna, tanpa hak khusus di Ubuntu, bukan daemon. Atau bisakah saya menggunakan /var/run/ /tmpuntuk file kunci yang dapat dibaca dunia / dapat ditulis ini dengan aman? Lubang besar di sana: tambahkan file kunci dan admin tidak akan diberi tahu tentang pembaruan sistem!
gertvdijk
Apa pun yang meluncurkannya secara otomatis (mengarah ke 30+ salinan berjalan) perlu melakukan penguncian. Atau bisa melakukannya sendiri, per pengguna. Either way, itu bug yang perlu dipecahkan.
derobert
Nagios / Icinga tampaknya menghindari jebakan. Setidaknya, ada 10s batas waktu dan memperingatkan jika terlampaui. (Meskipun saya tidak dapat menemukan cara mengkonfigurasi batas waktu - saya lebih suka lebih lama). Byobu pada Debian adalah apa yang menyebabkan masalah bagi saya; di Ubuntu itu seharusnya diperbaiki .
sourcejedi
4
Anda perlu mencari tahu proses apa yang menelurkan apt-check. Anda dapat menggunakan sesuatu seperti ps untuk mendapatkan pohon proses.
ps -A --forest
Jika apt-check tidak memiliki orang tua, maka itu mungkin masalah dengan apt-check sendiri dan bukan satu program tertentu. jika itu masalahnya saya akan mencoba untuk debug apt-check.
Terima kasih. Beri aku beberapa ide untuk melihat lebih jauh. Namun, ini membuat saya percaya itu masalah yang apt-checksangat - lihat jawaban saya sendiri .
gertvdijk
Jika itu menghabiskan memori dan waktu CPU, itu bukan zombie.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles poin bagus.
string
0
Basis tertulis di Ubuntu 12.04
Saya memiliki masalah yang sama dan menemukan itu karena byobu, jika saya hanya menjalankan apt-get updatetidak menggunakan byobu, tidak akan ada check-aptproses. Juga, berkaitan dengan update-notifierpaket, ketika saya dihapus paket mereka (update-notifer-umum, update-notifier), menggunakan byobudan menjalankan apt-get update, itu berlari perintah lain tapi cukup memori yang sama dengan menggunakan: apt-get -s -o Debug::NoLocking=true upgrade.
Beberapa hal lain dapat berjalan apt-get update(tetapi mungkin tidak berjalan check-apt)
meneruskan argumen ke check_aptuntuk memperbarui / meningkatkan pkg.
Di desktop, ada lebih banyak hal yang mungkin terlibat.
Kesimpulan:
byobumenangkap peristiwa ketika Anda menjalankan apt-get updatedan memicu check-aptproses ini , mengkonfigurasi ulang bilah status byobuuntuk memperbaikinya.
/var/run
//tmp
untuk file kunci yang dapat dibaca dunia / dapat ditulis ini dengan aman? Lubang besar di sana: tambahkan file kunci dan admin tidak akan diberi tahu tentang pembaruan sistem!Anda perlu mencari tahu proses apa yang menelurkan apt-check. Anda dapat menggunakan sesuatu seperti ps untuk mendapatkan pohon proses.
Jika apt-check tidak memiliki orang tua, maka itu mungkin masalah dengan apt-check sendiri dan bukan satu program tertentu. jika itu masalahnya saya akan mencoba untuk debug apt-check.
sumber
apt-check
sangat - lihat jawaban saya sendiri .Basis tertulis di Ubuntu 12.04
Saya memiliki masalah yang sama dan menemukan itu karena
byobu
, jika saya hanya menjalankanapt-get update
tidak menggunakanbyobu
, tidak akan adacheck-apt
proses. Juga, berkaitan denganupdate-notifier
paket, ketika saya dihapus paket mereka (update-notifer-umum, update-notifier), menggunakanbyobu
dan menjalankanapt-get update
, itu berlari perintah lain tapi cukup memori yang sama dengan menggunakan:apt-get -s -o Debug::NoLocking=true upgrade
.Beberapa hal lain dapat berjalan
apt-get update
(tetapi mungkin tidak berjalancheck-apt
)check_apt
untuk memperbarui / meningkatkan pkg./etc/cron.daily/apt
dapat memperbarui daftar paket (lihat https://help.ubuntu.com/lts/serverguide/automatic-updates.html ), tetapi hanya berjalan sekali sehari, dan seharusnya tidak menjadi masalah.Di desktop, ada lebih banyak hal yang mungkin terlibat.
Kesimpulan:
byobu
menangkap peristiwa ketika Anda menjalankanapt-get update
dan memicucheck-apt
proses ini , mengkonfigurasi ulang bilah statusbyobu
untuk memperbaikinya.sumber