Apa yang dapat menyebabkan SEMUA layanan di server turun, namun masih merespons ping? dan cara mencari tahu

9

Ini telah terjadi pada saya sudah dua kali dalam beberapa hari server saya benar-benar mati, yang berarti http, ssh, ftp, dns, smtp, pada dasarnya SEMUA layanan berhenti merespons, seolah-olah server telah dimatikan, kecuali masih merespons ping , itulah yang paling membuatku bingung.

Saya memang memiliki beberapa skrip php yang menyebabkan beban besar (cpu dan memori) pada server dalam semburan singkat, yang digunakan oleh sekelompok kecil pengguna, tetapi biasanya server "bertahan" dengan sangat baik untuk semburan ini, dan ketika turun itu tidak pernah bertepatan dengan puncak seperti dalam penggunaan (saya tidak mengatakan itu tidak dapat dikaitkan, tetapi itu tidak terjadi setelah itu).

Saya tidak meminta Anda untuk secara ajaib dapat memberi tahu saya penyebab utama dari crash ini, pertanyaan saya adalah: apakah ada satu proses yang kematiannya dapat menyebabkan semua layanan ini turun secara bersamaan? Yang lucu adalah bahwa semua layanan jaringan turun, kecuali ping. Jika server memiliki 100% dari CPU dimakan oleh beberapa proses, itu tidak akan menanggapi ping juga. Jika apache macet karena (misalnya) skrip php yang rusak, itu akan mempengaruhi http saja, bukan ssh dan dns .... dll.

OS saya adalah Cent OS 5.6

Yang paling penting, setelah me-reboot server, log sistem apa yang harus saya lihat? / var / log / messages tidak mengungkapkan sesuatu yang mencurigakan.

matteo
sumber

Jawaban:

8

( tl; dr masih merespons ping adalah perilaku yang diharapkan, periksa penggunaan memori Anda)

Permintaan echo ICMP (yaitu ping) ditangani oleh tumpukan jaringan di-kernel, tanpa ketergantungan lainnya.

Kernel dikenal sebagai "memory resident", yang artinya akan selalu disimpan dalam RAM, dan tidak dapat ditukar ke disk seperti halnya aplikasi biasa.

Ini berarti dalam situasi di mana Anda kehabisan aplikasi memori fisik ditukar ke disk, tetapi kernel tetap di tempatnya. Ketika memori fisik dan swap penuh (dan sistem tidak dapat lagi mengelola program Anda), mesin akan jatuh. Namun karena a) kernel masih dalam memori dan b) dapat menanggapi permintaan ping tanpa bantuan yang lain, sistem akan tetap merespons ping meskipun semuanya mati.

Sehubungan dengan masalah Anda, saya sangat mencurigai masalah memori. Instal "sysstat" dan gunakan perintah "sar" untuk melihat log memori / cpu / load / io dll. Saya harapkan pada saat crash Anda akan melihat 100% fisik dan swap digunakan.

Saya juga akan mempertimbangkan melihat pesan dmesg atau / var / log / untuk tanda-tanda pembunuh OOM (out-of-memory-killer) dipanggil. Ini adalah sistem darurat kernel yang akan mulai mematikan proses jika memori habis. Efektivitasnya sangat tergantung pada proses apa yang sedang dibunuh. Satu proses memakan memori akan terbunuh secara efisien dan memori dibebaskan, namun situs web berbasis apache akan menelurkan proses penggantian segera setelah proses anak dibunuh.

Koperasi
sumber
+1 untuk OOM Killer
HTTP500
Terima kasih banyak, saya hampir yakin ini masalahnya, karena RAM dan swap penuh sebelum kegagalan server. (Saya bisa melihat pada statistik Manajer ovh). Dan mungkin beberapa skrip php gila saya menggunakan banyak memori. Namun itu membingungkan saya karena beberapa alasan. (1) sepertinya memori yang dimakan oleh php tidak dibebaskan setelahnya, tetapi itu tidak masuk akal; (2) dalam hal apa pun, saya tidak akan mengharapkan sistem operasi yang tepat untuk mati sepenuhnya hanya karena satu (atau bahkan beberapa) proses menggunakan terlalu banyak memori ... Saya harapkan
Matteo
menolak untuk mengalokasikan memori ke program yang memintanya ketika tidak ada ram cukup untuk sistem untuk tetap bekerja dengan benar ... Maksud saya kereta atau bahkan program jahat seharusnya tidak dapat menghancurkan seluruh sistem ...
matteo
3
@matteo Linux memiliki apa yang disebutnya "overcommit": hanya karena Anda malloc()1GB ram sebenarnya tidak berarti Anda akan menggunakannya, sehingga manajer memori melacak berapa banyak memori yang dipikirkan oleh program Anda dan berapa banyak memori yang diperlukan. Program sebenarnya telah digunakan, dan itu benar-benar berfungsi dengan baik, sebagian besar waktu. Setidaknya, hingga lebih dari satu program benar-benar ingin menggunakan semua 1GB yang menurutnya sudah ada.
DerfK
1
@matteo Saya tidak melihat indikasi bahwa ini adalah masalah OOM. Biasanya, pembunuh-OOM akan memilih proses tertentu atau yang memenuhi kriteria tertentu, tetapi tidak selalu membunuh daemon seperti ssh. Ini jelas di sisi I / O. Anda tidak menjelaskan situasi / spesifikasi perangkat keras Anda seperti yang saya minta dalam jawaban saya.
ewwhite
5

Biasanya, ini adalah masalah subsistem I / O atau disk. Sering kali, ini akan digabungkan dengan rata-rata beban sistem yang sangat tinggi. Sebagai contoh, sistem yang diperinci dalam grafik di bawah ini menjadi tidak responsif (belum dapat ping) ketika skrip berjalan serba salah, mengunci banyak file dan beban naik menjadi 36 ... pada sistem 4-CPU.

masukkan deskripsi gambar di sini

Layanan yang berjalan dalam RAM dan tidak memerlukan akses disk terus berjalan ... Dengan demikian, tumpukan jaringan (ping) naik, tetapi layanan lain berhenti ketika akses disk diperlukan ... SSH ketika kunci direferensikan atau diperlukan pencarian kata sandi. SMTP cenderung ditutup ketika rata-rata memuat mencapai 30 atau lebih ...

Ketika sistem dalam keadaan ini, coba remote nmapterhadap IP server untuk melihat apa yang terjadi.

Pencatatan Anda mungkin tidak berfungsi jika ini masalah disk atau penyimpanan ...

Bisakah Anda menjelaskan pengaturan perangkat keras? Apakah ini mesin virtual? Apa tata letak penyimpanan?

Lebih dari sekadar pencatatan, Anda ingin melihat apakah Anda dapat membuat grafik kinerja sistem dan memahami kapan ini terjadi. Lihat apakah ini berkorelasi dengan aktivitas tertentu.

putih
sumber
Seandainya ini masalahnya, Apakah ada cara untuk memberitahu SSH untuk menyimpan kata sandi dalam memori, jadi bahkan jika server dalam keadaan ini saya setidaknya bisa masuk ke dalamnya melalui ssh dan menjalankan beberapa perintah untuk melihat apa yang sedang terjadi?
matteo
1
Jika itu I / O, Anda harus masuk ke bagian bawah masalah. Jika disk array timeout atau interaksi driver, itu berbeda dari skrip yang dieksekusi dengan buruk atau masalah pertentangan sumber daya.
ewwhite