Soru Kullanıcıların bir sunucuda CPU ağır programları çalıştırmasını nasıl engelleyebilirim?


Kullanıcıların SSH üzerinden bağlandıkları 24 çekirdekli bir sunucum var.

Bu gibi CPU ağır programları çalıştırmak için değil MATLAB, R, ya da simülasyonlar ya da bunun gibi şeyler yapan kendi senaryoları.

Algılamanın yolları var mı kill -9 CPU ağır süreçler otomatik olarak?


6
2017-11-04 13:58


Menşei


Onları neden öldürdün? nice Onları yerine? - MSalters
Bu da iyi bir seçenek olabilir. Bu nasıl yapılır? - Sandra
nice -n 19 matlab veya eğer başlatılmışsa: renice -n 19 $(pgrep matlab) - Mircea Vutcovici
Biraz daha etkili, en iyi 5 CPU tüketen süreci seçen küçük bir betik olabilir (ps -eo pcpu,pid,user | sort -k 1 -r | head -5) ve onlardan canlandırın. Bunu bir cronjobden yapabilirsin. - MSalters
@MSalters Zamanla, tüm süreçleri yavaşlatmaz, çünkü önümüzdeki 5 CPU ağır işlemi sadece yasal süreçler olabilir mi? - Sandra


Cevaplar:


Bunu yapmak için gruplarını kullanmalısın.

Bakınız "man cgrules.conf" ve "man cgconfig.conf".

Fedoradaki systemctl'in sonraki sürümleri, kullanıcıları bir grupta doğrudan desteklemeli, böylece daha iyi bir şekilde yapabilirsiniz.

Bu, CPU'yu (hiç kimsenin kullanamadığı) mevcut CPU kaynakları varsa, tüm CPU'yu kullanacağı, ancak CPU'yu da talep ettiği için CPU'nun yapılandırılmış "cpu'yu temel alan bir paylaşımını tahsis edeceği anlamına gelir. hisse "değer.

Ayrıca, CPU zamanı üzerinde bir ulimitin yapıştırılması önerildiği gibi, çok fazla CPU kullanmak için öldürüldükten sonra bir koşu sürecine cumalatif bir jiffi sayısı verilecektir. Bu, bir kullanıcının uzun bir süre boyunca doğal olarak belirli sayıda jiffi biriktirdiği uzun süre çalışan süreçleri olumsuz etkileyebilir.

Ayrıca, tüm kullanıcıların yalnızca çekirdeklerinizden birinde çalışmasını sağlamak için gruplarını kullanabilirsiniz. en azından Bir CPU'nun aşırı yüklenip yüklenmediğini garanti ederse, işletim sistemi işlemlerinin geri kalanı üzerinde olumsuz bir etkisi yoktur.

CGroups ayrıca bellek kullanımını sınırlamak için harika bir yoldur. Çatal bombalanmasını önlemek için pam_limits ile birleştirebilirsiniz.

Düzenleme: Ben de sormak istediğimi düşündüğüm şey mutlaka alakalı değil. İşlemin% 100'ünü kullanması CPU'nun% 100'ünün kötü olması gerekmez, diğer işlemlerin çalışması için zaman verilir. Linux üzerindeki tamamen adil zamanlayıcı, bu davranışı yine de garanti ediyor.

CPU sadece rölantide çalışıyorsa, tüm işlemciyi kullanarak bir işlemin yanlış bir tarafı yoktur. Sorununuz sadece birden çok işlemin CPU zamanını talep ettiği ve işlemlerden birinin CPU'yu aldattığı durumlarda ortaya çıkar. CPU çekişmesi durumunda farklı işlemlere ne kadar cpu tahsis edeceğinizi kontrol etmenize izin verdiği için, grupların yarar sağlaması gereken yer burasıdır.


3
2017-11-06 16:52





Yapabilirsin kullanıcı kaynaklarını sınırla PAM ile kullanım.

Hiç denemedim, düzgün çalışıp çalışmadığı konusunda hiçbir fikrim yok.


6
2017-11-04 14:04



Çok ilginç! "Maksimum CPU zamanı" ne anlama geliyor? Yani, eğer sunucu% 50 kullanılırsa ve bir kullanıcı bir cpu çekirdeğini maksimize edebilecek bir betik başlatırsa. Bu betik daha sonra algılanır mı? - Sandra
Bu tür bir konuda uzman olduğumu iddia etmek istemiyorum ama ... benim anlayışım, kullanıcıların CPU'yu "sarmasına" engel olacak olmasıdır. Böylece toplam x saniye CPU kullanımından sonra işlem arka koltuğu alacaktır. Bu nedenle, tek bir kullanıcıdan% 100 CPU kullanımını önler. - Alex
Ulimit'e başvurduğunu düşünürsek, bu gibi görünüyor. RLIMIT_CPU : "Saniye cinsinden CPU zaman sınırı. Süreç yumuşak limite ulaştığında, bir SIGXCPU sinyali. Bu sinyal için varsayılan eylem işlemi sonlandırmaktır. Bununla birlikte, sinyal yakalanabilir ve işleyici kontrolü ana programa döndürebilir. İşlem CPU saatini tüketmeye devam ederse, gönderilir SIGXCPU sabit limite ulaşılana kadar saniyede bir kez, hangi zamanda gönderilir SIGKILL" - MSalters