Bir sunucudaki TÜM hizmetlerin düşmesine ve yine de ping'e yanıt vermesine ne neden olabilir? ve nasıl anlaşılacağı


9

Sunucum tamamen düştüğü için birkaç gün içinde zaten iki kez oldu, yani http, ssh, ftp, dns, smtp, temelde TÜM hizmetler yanıt vermiyor, sunucu hala kapatılmış gibi duruyor, ancak yine de ping'e yanıt veriyor beni en çok etkileyen şey bu.

Ben küçük bir grup kullanıcı tarafından kullanılan kısa patlamaları, sunucu üzerinde büyük bir yük (cpu ve bellek) neden bazı php komut dosyaları var, ama genellikle sunucu "bu patlamaları mükemmel iyi hayatta" ve aşağı gider kullanımdaki bu zirvelere asla denk gelmez (bunun ilgili olamayacağını söylemiyorum, ama onlardan sonra olmaz).

Bana bu çökmelerin nihai nedenini sihirli bir şekilde söyleyebilmeni istemiyorum, sorum şu: ölümü tüm bu hizmetlerin aynı anda düşmesine neden olabilecek tek bir süreç var mı? Komik olan şey, ping hariç tüm ağ servislerinin düşmesidir. Sunucu CPU'nun% 100'ünü bir işlemle yemiş olsaydı, ping'e de yanıt vermezdi. Apache (örneğin) bozuk bir php betiği nedeniyle çökerse, bu yalnızca http'yi etkiler, ssh ve dns .... vb.

İşletim Sistemim Cent OS 5.6

En önemlisi, sunucuyu yeniden başlattıktan sonra hangi sistem günlüklerine bakmalıyım? / var / log / messages şüpheli bir şey göstermez.

Yanıtlar:


8

( tl; dr hala ping'e yanıt vermek beklenen bir davranıştır, bellek kullanımınızı kontrol edin)

ICMP yankı istekleri (yani ping), başka bir bağımlılık olmaksızın çekirdek içi ağ yığını tarafından işlenir.

Çekirdek "bellekte yerleşik" olarak bilinir, bu da her zaman RAM'de saklanacağı ve normal bir uygulamanın yapabileceği gibi diske değiştirilemeyeceği anlamına gelir.

Bu, fiziksel bellek uygulamalarınızın bittiği durumlarda diske değiştirildiği, ancak çekirdek olduğu yerde kaldığı anlamına gelir. Hem fiziksel hem de takas belleği dolduğunda (ve sistem artık programlarınızı yönetemezse) makine devrilir. Ancak a) çekirdek hala bellekte olduğu ve b) ping isteklerine başka bir şey yardımı olmadan yanıt verebileceği için, sistem her şeye rağmen ölüp yanıt vermeye devam edecektir.

Sorununuzla ilgili olarak bellek sorunlarından şüphelenirim. "Sysstat" yükleyin ve bellek / cpu / load / io yükü vb bir günlük görmek için "sar" komutunu kullanın. Çarpışma zamanlarında% 100 fiziksel ve takas kullanılan göreceksiniz beklenir.

Ayrıca , OOM-katil (bellek dışı katil) herhangi bir işareti çağrılıyor için dmesg veya / var / log / mesajlar bakarak düşünün . Bu, belleğin bitmesi durumunda öldürme işlemlerini başlatacak olan çekirdeğin acil durum sistemidir. Etkinliği büyük ölçüde hangi süreçlerin öldürüldüğüne bağlıdır. Hafızayı yiyen tek bir süreç verimli bir şekilde öldürülecek ve hafıza boşaltılacak, ancak apache tabanlı bir web sitesi, bir çocuk süreci öldürülür öldürülmez değiştirme süreçleri oluşturacaktır.


OOM Killer için +1
HTTP500

Çok teşekkürler, hem RAM ve hem de takas sunucu hatasından önce dolu olduğundan, bu sorunun neredeyse eminim. (Ovh Manager'ın istatistiklerini görebiliyorum). Muhtemelen çok fazla bellek kullanan çılgın php scriptlerimden bazıları. Ancak birkaç nedenden dolayı beni bulmaca. (1) php tarafından yemiş bellek sonradan serbest değil gibi görünüyor, ama bu mantıklı olmaz; (2) her durumda, çok fazla bellek kullanan bir (veya birkaç) işlem nedeniyle düzgün bir işletim sisteminin tamamen ölmesini beklemezdim ... Bunu beklerdim
matteo

Sistemin düzgün çalışmaya devam etmesi için yeterli koç olmadığında bunu isteyen programlara bellek ayırmayı reddedin ... Yani, buggy veya hatta kötü amaçlı bir program asla tüm sistemi yok edemez ...
matteo

3
@matteo Linux "overcommit" olarak adlandırdığı şeye sahiptir: malloc()1GB RAM'in aslında onu kullanacağınız anlamına gelmez, bu nedenle bellek yöneticisi programınızın ne kadar bellek olduğunu düşündüğünü ve ne kadar bellek olduğunu izler. program aslında kullanılmış ve çoğu zaman iyi çalışıyor. En azından, birden fazla program aslında 1GB'ın tamamını kullanmak istedikçe sahip olduğunu düşünüyor.
DerfK

1
@matteo Bunun bir OOM sorunu olduğuna dair hiçbir belirti göremiyorum . Tipik olarak, OOM katili belirli kriterleri karşılayan spesifik veya süreçler seçer, ancak her zaman ssh gibi bir arka plan programı öldürmez. Bu kesinlikle G / Ç tarafında. Cevabımda istediğim gibi donanım durumunuzu / spesifikasyonlarınızı açıklamadınız.
ewwhite

5

Genellikle bir G / Ç veya disk alt sistemi sorunudur. Çoğu zaman, bu son derece yüksek bir sistem yük ortalaması ile birleştirilecektir. Örneğin, aşağıdaki grafikte ayrıntılı olarak verilen sistem, bir komut dosyası ters gittiğinde, bir grup dosyayı kilitlediğinde ve yük bir 4-CPU sisteminde 36'ya yükseldiğinde yanıt vermiyordu (ancak pinglenebilirdi).

resim açıklamasını buraya girin

RAM'de çalışan ve disk erişimi gerektirmeyen hizmetler çalışmaya devam eder ... Bu nedenle, ağ yığını (ping) çalışır, ancak disk erişimi gerektiğinde diğer hizmetler durur ... Bir anahtara başvurulduğunda SSH veya şifre araması gerekiyor. Yük ortalaması 30 ya da daha fazla olduğunda SMTP kapanma eğilimindedir ...

Sistem bu durumda olduğunda, nmapne olduğunu görmek için sunucunun IP'sine karşı bir uzaktan kumanda deneyin .

Bu bir disk veya depolama alanı sorunuysa günlük kaydınız muhtemelen çalışmaz ...

Donanım kurulumunu tarif edebilir misiniz? Bu sanal bir makine mi? Depolama düzeni nedir?

Günlüğe kaydetmenin ötesinde, sistem performansını çizip çizemeyeceğinizi görmek ve bunun ne zaman gerçekleştiğini anlamak istiyorsunuz. Bunun belirli bir etkinlikle ilişkili olup olmadığına bakın.


Bu sorun varsayalım, SSH'ye şifreleri bellekte tutmasını söylemenin bir yolu var mı, bu yüzden sunucu bu durumda olsa bile en azından ssh ile giriş yapabilir ve görmek için bazı komutları çalıştırabilirim neler oluyor?
matteo

1
G / Ç ise, sorunun alt kısmına gitmeniz gerekir. Bir disk dizisi zaman aşımı veya sürücü etkileşimi ise, kötü çalışan bir komut dosyasından veya bir kaynak çekişme sorunundan farklıdır.
ewwhite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.