CPULimit persis seperti yang Anda butuhkan. Anda memulai program, lalu menjalankan cpulimit terhadap nama program atau PID, menentukan persentase yang ingin Anda batasi.
Perintah berikut membatasi proses pada PID 7777 hingga 5% penggunaan CPU.
cpulimit -p 7777 -l 5
Atau, Anda dapat menggunakan nama yang dapat dieksekusi:
cpulimit -e myprogram -l 5
Atau jalur absolut dari yang dapat dieksekusi:
cpulimit -P /path/to/myprogram -l 5
Perhatikan persentasenya dari semua inti; jadi jika Anda memiliki 4 inti, Anda dapat menggunakan 400%.
Anda dapat membatalkan proses yang sedang berjalan untuk memberikan prioritas lebih atau kurang (yang disebut "nilai bagus"). Perhatikan bahwa skala prioritas UNIX agak kontra-intuitif:nilai negatif berarti suatu proses lebih disukai daripada proses bersamaan, yaitu, ia memiliki prioritas "lebih".
Dengan demikian Anda dapat mencoba untuk "memperlambat" proses Anda dengan memberikan PID-nya melalui:
# lower priority of a process
renice +1 "PID"
Setiap kali Anda menjalankan ini, proses "nilai bagus" dinaikkan 1; Anda dapat menggunakan nilai integer selain +1
tentu saja.
Perintah bagus memungkinkan Anda untuk memulai proses dengan +10 penyesuaian nilai bagus (ubah ini dengan opsi -n
). Misalnya:
# start a CPU-intensive task with low priority
nice ./cpu-hog
Namun, "nilai bagus" hanya memengaruhi seberapa banyak penjadwal lebih suka menjalankan proses tertentu daripada yang lain dalam sistem:jika komputer Anda pada dasarnya diam, menaikkan "nilai bagus" dari satu proses tunggal tidak hentikan proses itu dari mengambil 100% CPU. Saya mengutip dari halaman manual getpriority(2):(Penekanan ditambahkan oleh saya.)
Sejauh mana nilai bagus relatif mereka memengaruhi penjadwalan proses bervariasi di seluruh sistem Unix, dan, di Linux, di seluruh versi kernel. Dimulai dengan kernel 2.6.23, Linux mengadopsi algoritma yang menyebabkan perbedaan relatif dalam nilai bagus memiliki efek yang jauh lebih kuat. Hal ini menyebabkan nilai bagus yang sangat rendah (+19) untuk benar-benar menyediakan sedikit CPU untuk proses kapan pun ada yang lain _memuat dengan prioritas lebih tinggi pada sistem._
Alasannya terletak pada cara proses dijalankan pada kernel mirip UNIX:setiap kali kernel memutuskan untuk menjalankan suatu proses, proses tersebut memiliki kendali penuh atas inti CPU untuk jangka waktu tertentu (tetap dan pendek). "Nilai bagus" dapat memengaruhi seberapa sering penjadwal kernel bersedia memberikan slot waktu untuk suatu proses, tetapi Anda tidak dapat mengubah fakta bahwa, setelah dijadwalkan, suatu proses berjalan tanpa gangguan untuk jumlah waktu yang tetap.
Oleh karena itu, selain memperlambat CPU Anda, tidak ada cara untuk membuat proses berjalan lebih lambat jika tidak ada proses lain dalam sistem yang dapat memperebutkan akses CPU.
cgroup diciptakan tepat untuk alasan ini.
http://www.kernel.org/doc/Documentation/cgroups/http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
Butuh sedikit waktu untuk membiasakan diri dengan mereka, dan saya yakin Anda memerlukan akses root untuk menyiapkannya, tetapi semuanya dapat dituliskan. Ubuntu yang lebih baru memiliki file .conf sehingga Anda tidak perlu menulis skrip Anda sendiri. Saya tidak yakin tentang 10.10.
Tempat yang bagus untuk memulai ada di jawaban ini:https://askubuntu.com/a/94743/170177
Perhatikan bahwa cgroups masih dalam pengembangan aktif sehingga beberapa fitur mungkin tidak tersedia di kernel Anda saat ini.
Menggunakan cpu.shares cgroup tidak melakukan apa pun yang baik nilai tidak akan berhasil. Sepertinya Anda ingin benar-benar membatasi prosesnya, yang pasti bisa dilakukan.
Anda perlu menggunakan satu atau dua skrip, dan/atau mengedit /etc/cgconfig.conf untuk menentukan parameter yang Anda inginkan.
Khususnya, Anda ingin mengedit nilai cpu.cfs_period_us dan cpu.cfs_quota_us . Proses kemudian akan diizinkan berjalan untuk cpu.cfs_quota_us mikrodetik per cpu.cfs_period_us mikrodetik.
Misalnya:
Jika cpu.cfs_period_us =50000 dan cpu.cfs_quota_us =10.000 maka proses akan menerima 20% dari waktu maksimum CPU, apa pun yang terjadi.
Dalam tangkapan layar ini saya telah memberikan proses 2% dari waktu CPU:
Sejauh menyangkut proses, ini berjalan pada 100%.
Setelan cpu.shares di sisi lain dapat dan akan tetap menggunakan 100% waktu CPU yang tidak digunakan.
Dalam contoh serupa ini saya telah memberikan proses cpu.shares =100 (dari 1024):
Seperti yang Anda lihat, prosesnya masih menghabiskan semua waktu CPU yang menganggur.
Referensi:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.htmlhttp://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups. html