TL; DR : Kısa bir araştırmadan, komutları belirli sayıda çekirdekle sınırlamak mümkün görünmektedir, ancak her durumda, kısıtlamayı gerçekten zorlayan bir komut kullanmanız gerekir.
cgroups
Linux, cgroupssüreçler için mevcut kaynakları kısıtlamak amacıyla sıklıkla kullanılan bir Linux yazılımına sahiptir. Çok kısa bir araştırmadan, Arch Wiki'de Matlab (bilimsel bir yazılım) yapılandırmasında bir örnek bulabilirsiniz /etc/cgconfig.conf:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Bu tür bir yapılandırmanın geçerli olması için işlemi cgexeckomutla, örneğin aynı wiki sayfasından çalıştırmanız gerekir:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
taskset
Bir ilgili soru Ubuntu ve Ask üzerinde nasıl Linux bir işlemci çekirdeğine bir süreç sınırlamak için? Unix ve Linux sitesindeki [yinelenen]taskset işlem için CPU'ları sınırlamak için bir örnek gösterir . İlk soruda, belirli bir kullanıcı için tüm süreçlerin ayrıştırılmasıyla elde edilir
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Diğer soruda, tasksetkendi kendine bir süreç başlatılır :
$ taskset -c 0 mycommand --option # start a command with the given affinity
Sonuç
Süreçleri sınırlamak kesinlikle mümkün olsa da, belirli kullanıcılar için bunu başarmak o kadar kolay değil gibi görünüyor. Bağlantılı Ask Ubuntu gönderisindeki örnek, her bir kullanıcıya ait işlemler ve her biri için kullanılan işlemler için tutarlı tarama gerektirir taskset. Çok daha makul bir yaklaşım CPU yoğun uygulamalarını seçici olarak cgexecveya yoluyla çalıştırmak olacaktır taskset; ayrıca tüm süreçleri belirli sayıda CPUS ile sınırlamak da anlamsızdır, özellikle de görevlerini daha hızlı yürütmek için paralellik ve eşzamanlılıktan faydalananlar için - bunları belirli sayıda CPU ile sınırlamak, işlemi yavaşlatma etkisine sahip olabilir. Buna ek olarak, terdon'un cevabının da belirttiği gibi, bu bir kaynak israfı
Belirli uygulamaları çalıştırarak tasksetveya cgexechangi uygulamaları çalıştırabileceklerini bildirmek için kullanıcılarınızla iletişim kurmanızı veya seçili uygulamaları taskselveya aracılığıyla başlatacak sarıcı komut dosyaları oluşturmanızı gerektirir cgexec.
Ayrıca, CPU sayısı için sınır belirlemek yerine, bir kullanıcının veya grubun oluşturabileceği işlem sayısını ayarlamayı düşünün. Bu, /etc/security/limits.confdosya ile sağlanabilir .
Ayrıca bakınız