Ulimit kullanımı nasıl kontrol edilir?


29

Belirli bir kullanıcı için ulimitlerin kullanımını kontrol etmenin bir yolu var mı? Çalıştırırken tek bir işlem için ulimitleri veya çalıştırırken tek bir kabuk için değiştirebileceğinizi biliyorum ancak bir kullanıcının sınırlarını ne kadar yakın tuttuğunu "izleyebilmek" istiyorum. bashŞu anki kullanım yüzdesine ve istatistiklere geri dönecek bir senaryo yazmayı planlıyorum . Özellikle, izlemek istiyorum:

  1. dosyaları aç ( ulimit -n)
  2. maksimum kullanıcı işlemleri ( ulimit -u)
  3. bekleyen sinyaller ( ulimit -i)

İstediğim şey kullanım yüzdesi (0-100).


Çekirdekte işlem muhasebesi açıksa, kullanıcılarınız hakkında detaylı kullanım istatistiklerini toplayabilirsiniz.
casey

İşlem muhasebesini nasıl açarsınız?
hazmat

Peki bu ne kadar ek yük sağlıyor?
hazmat

Yanıtlar:


22

Belki bu ilk soru için yardımcı olur:

Belirli bir kullanıcının işlem kimliklerini (PID) biliyorsanız, her işlem için sınırlamaları alabilirsiniz:

cat /proc/<PID>/limits

Her PID için açılan dosya sayısını aşağıdakilerle elde edebilirsiniz:

ls -1 /proc/<PID>/fd | wc -l

Ve sonra sadece bir Max open fileskomut almak için ikinci komuttaki açık dosya tanımlayıcılarının sayısını karşılaştır .


8

Geçerli olmayan kullanıcıların açık dosya, proc ve bekleyen sinyallerin yüzdesini uygun olmayan birkaç yöntem ve standart araçla alın:

paste <(grep 'open files\|processes\|pending signals' /proc/self/limits | 
        cut -c27-38) \
      <(i=`whoami` ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l; 
                     ps --no-headers -U $i -u $i u | wc -l ; 
                     ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
                                        xargs grep -s 'SigPnd' |
                                        sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done

Sistemimdeki çıktı:

59%
9%
0%

Bu sayıların iyi olduğunu varsayarsak, bu cevabın gösterdiği şey kabuğun içinde yapılabileceği, ancak çok daha iyi kabuk yöntemleri olmadığı sürece muhtemelen olmamalıdır. Aksine, bu Q daha iyi yapılabilir olurdu gccya python, vb


-4

Birimler, işlemlerin özellikleridir ve alt işlemlere miras edilir.

Başka bir işlem için sınır alamazsınız.


2
Saçmalık. man lsof,, man ps
Gilles 'ÇÖZÜNMEYEN' eylül

1
UNIX'in nasıl çalıştığını ve sonuçların nasıl elde edildiğini yanlış anlamış gibisiniz. Değer almak için çekirdek hafızasını okursa, lsof tarafından kullanılan belgelenmiş bir arabirim yoktur, bu nedenle iç çekirdek veri yapılarında küçük değişiklikler yapılması durumunda lsof başarısız olur.
schily

2
Bu, bakıcı için bir baş ağrısı lsof. Ancak son kullanıcı için uygun değil. Ayrıca bu soru bağlamında yanlıştır, çünkü arayüzleri ( man proc) belgeleyen Linux hakkında özellikle sormaktadır .
Gilles 'SO- kötülük yapmayı kes'

Bu durumda önceden haber verilmeksizin değişime tabi olan belgelenmemiş arayüzlerden bahsediyorsunuz.
schily

1
Düşük temsilcimin bu nedenini aşağı alamıyorum, bu yüzden sadece yorum yapacağım-1
Zun
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.