Bir Linux Sunucusunda kaç tane çekirdek kullanıyorum?


30

Bir kullanıcının şu anda bir Linux Sunucusunda kaç CPU çekirdeği kullandığını nasıl öğrenebileceğimi merak ediyorum.

Sunucuya çok miktarda arka plan işi gönderiyorum, bu nedenle, bana gönderilen çalışan işler (işlemler) çok fazla ise, başkalarına izin vermem gerektiğinden, bir işi göndermeden önce kontrol etmek için bir bash betiği yazmak istiyorum. kullanıcıların işleri için kullanabilecekleri kadar çekirdekleri vardır. Hangi bash komutunun bana işimin kaç tane çekirdek kullandığını söyleyebileceğini bilmek istiyorum.

Teşekkürler ve saygılar!

Yanıtlar:


39

CPU başına CPU çekirdeği sayısını almak için :

grep "^core id" /proc/cpuinfo | sort -u | wc -l

Veya fiziksel CPU sayısını almak için :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l

Belirli bir kullanıcı için bu nasıl kontrol edilir?
makis,

26

İşe yarayıp yaramadığını bilmiyorum, ancak mpstatyardımcı programı tek tek işlemci (veya çekirdek) tarafından CPU kullanımını parçalamak için kullanabilirsiniz . Örneğin:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

Bu örnekte, söz konusu CPU görebilirsiniz 0, 1ve 6bunların geri kalanından daha fazla iş yapıyoruz. Bazen tek bir CPU'nun% 100'e yakın (veya altında) olduğunu görürsünüz, diğerleri sıfır iken. Bu, tek iş parçacıklı ve aynı anda yalnızca bir CPU kullanabilen programın (veya programın bir bölümünün) bir göstergesi olabilir.

mpstatFedora, RHEL veya CentOS sistemine kurmak için kullanın yum install sysstat.


Bu cevabı verdiğiniz için teşekkür ederiz! Meslektaşlarım "top" komutunu kullanıyordu ve ben onlara mpstat komutunu gösterene kadar işlemci kullanımıyla ilgili tüm yanlış sonuçları çıkardılar.
Nav

Ubuntu mevcut değildir: # aptitude search mpstat #.
Alix Axel

2
@AlixAxel aptitude search systatyerine deneyin .
Matt Solnit

@ MattSolnit: Hala şans yok.
Alix Axel

mpstat, sysstat Debian ve Ubuntu'daki paket tarafından sağlanmaktadır . Debian kaynaklı dağıtımların çoğunun aynı paket adını kullanmasını bekliyorum. Debian kaynaklı dağıtımlarda, başlamak apt-cache search --full mpstat.
CVn

2

Açıkça yapılandırılmadığı sürece (yani, bir işlemi belirli bir CPU'ya sabitlemek), tüm çekirdeklerin her zaman kullanımda olduğu varsayılabilir. Zamanlayıcı, bir sonraki kullanılabilir çekirdeği işlemlere tahsis eder. Örnek olarak, "Sistem Monitörü" (GNOME’un bir parçası), makinemin 4 çekirdeğindeki yükümü neredeyse aynı gösteriyor.


Sunucuya çok miktarda arka plan işi gönderiyorum, bu nedenle, bir iş göndermeden önce, bana gönderen çalışan işler (işlemler) çok fazla olup olmadığını kontrol etmek için bash betiği yazmayı seviyorum, çünkü diğer kullanıcıların izin vermesi gerekiyor işleri için kullanılacak kadar çekirdek. Bu yüzden hangi bash komutunun bana işimin kaç tane çekirdek kullandığını söyleyebileceğini bilmek istiyorum.
Tim

3
Cevabımı anladığını sanmıyorum. Kullanılan çekirdek sayısı HER ZAMAN mevcut toplam çekirdek sayısıdır. İş gönderimin engellenip engellenmeyeceğini belirlemek için genel sistem yükünü bir faktör olarak kullanın.
EmmEff

Teşekkür ederim! Genel sistem yükünü kontrol ediyorum. Meslektaşlarımdan biri tarafından tüm çekirdeği kullanamayacağımı, çünkü başkalarının işlerini yakında yürüteceklerini ve işlerimin bir süre devam edeceğini bilenler söylendi. Ayrıca kullandığım çekirdekleri sınırlamam gerektiğini düşünüyor musunuz?
Tim

2

Böylece, burada çekirdeklerinizin nasıl kullanıldığını size söyleyecek yanıtlar olduğunu göreceksiniz.

NASIL - Bu gerçekten size bir servis yapmıyor. Asıl işe yaramayan temel bir varsayımda bulundun - işlerinin kendilerini bir çekirdek alt kümesinde gruplandırma eğiliminde olacağı varsayıldı.

Bunun yerine, işleriniz bir şekilde "kaleme alınmış" bir şey yapmazsanız tüm çekirdeğe yayılır. (Not: Bunu önermiyorum; sadece "olmadıkça" demek)

İşte alternatif bir strateji: Diğer kullanıcılar için daha fazla iş eklemenin "kabul edilebilir" olduğunu düşündüğünüzde, özel sisteminiz için LOAD seviyesinin ne olduğunu belirleyin. Ardından, yükleme seviyesi bu sınırın altına düştüğünde yalnızca yeni bir arka plan işi gönderen bir şey oluşturun.

Bu şekilde, çözüm çekirdek sayısından bağımsız, daha taşınabilir, daha esnek ve "ince ayarlaması" kolay olacak.


Şimdi başka bir posterin cevabına eklediğiniz bir yorumu fark ettim, bunun bir meslektaşınızın size söylediği bir şey olduğunu gösteriyor. Öyleyse, aslında, yanlış anlaşılma sizindir, sizindir. Bunun için üzgünüm!
pbr

Teşekkür ederim! Mevcut yük esas olarak çalışan işlerimden kaynaklanmıyorsa, "Özel sisteminiz için YÜKLEM seviyesinin ne olduğunu" diğer kullanıcıların daha fazla iş eklemesi için "kabul edilebilir" olarak kabul edersek " kalan CPU'lar, ancak mevcut yükte çalışan işlerim makul bir miktar alırsa, muhtemelen kalan CPU'ları kullanmaktan vazgeçmem gerekir. Hala çalışan toplam işimin CPU kullanımını tahmin etmek zorunda olmadığımı mı düşünüyorsun?
Tim

Hayır, mevcut yükün ne kadarının işlerinizle diğer işleriniz arasında olduğunu ayırt etmenin gerçekten mantıklı olmadığını düşünüyorum. Sadeliği düşünün: işiniz iyi bir vatandaş olmaya çalışır ve yalnızca yük kabul edilebilir olduğunu düşündüğünüz seviyenin altındaysa, kendini gönderir. Fikir, kalan kapasiteyi ASLA kullanmamaktır; Bu, gelecekteki diğer kullanıcıları zor durumda bırakıyor. İdeal olarak, tüm kullanıcılar bunun için aynı mantığı kullanıyor olacaktır.
pbr

2

Bunu linux ve OS X üzerinde çalışacak şekilde yapmak istiyorsanız, şunları yapabilirsiniz:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

1

topKoşarak, ' U' tuşuna basarak ve kullanıcı adınızı belirleyerek ve ardından ilk birkaç işleminizin CPU kullanımını artırarak kabaca bir tahmin alabilirsiniz .


Bana bir bash betiğinde kullanmak istediğim için bana numarasını söyleyebilecek bir bash komutu bilmek hoşuma gidiyor.
Tim

@Tim top, -b anahtarıyla toplu halde çalışabilir. İhtiyacınız olan yineleme sayısını almak için -n anahtarıyla birleştirin.
nagul

1
Bir kullanıcı tarafından gönderilen tüm işler (işlemler) tarafından kullanılan çekirdek sayısını elde etmek için bir kod örneği verebilir misiniz?
Tim

@Tim Yarasa kapalı değil. topÇıktıyı ayrıştırıp böyle bir komut dosyası yazmak zorunda kalacağım ya da birisinin daha önce yapıp yapmadığını görmek için google'ı kullanmak zorunda kalacağım . Bununla birlikte, çabalarına değer vermediğine ikna olmadım, çünkü bağlam geçişinin gerçekleştiği hızda verilen her koşu için farklı çıktılar alacağımı düşünüyorum. Sistem yeterince iyi bir gösterge yüklemiyor mu? İşlem sırasını (CPU'da bekleyen işlemler) işlemek için kaç tane sanal çekirdeğin gerekli olduğunu etkili bir şekilde söyler.
nagul

@ nagul: Evet sistem yükü iyi ve ben de kontrol ediyorum. Ancak bazı insanlar bana tüm çekirdeği kullanamayacağımı söylemeye devam ediyor, çünkü kim bilir başkaları yakında işlerini yürütecek. Bu yüzden kullandığım çekirdekleri sınırlamam gerek. Bu arada, CPU ve bellek yükünü kontrol eden ve kullanıma bağlı olarak işleri dinamik olarak gönderen çevrimiçi bir komut dosyası gördünüz mü? Onları uzun zamandır arıyorum. Teşekkürler!
Tim
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.