Pertanyaan Cara menetapkan batas cpu untuk proses yang diberikan secara permanen. Cpulimit dan bagus tidak berfungsi


Ada banyak pertanyaan serupa tetapi tidak satupun dari mereka membantu saya dengan masalah saya.

Saya memiliki ubuntu 11.10 di server (itu versi desktop). Saya memiliki situs web yang berjalan di dalamnya. Ada satu proses yang sangat penting, tetapi tidak harus dijalankan dengan prioritas tinggi. Saya ingin membatasi penggunaan cpu secara permanen untuk proses, bukan untuk pengguna. Proses ini dijalankan oleh fungsi exec (fungsi php, bukan proses sistem). 

Jadi saya melihat 2 opsi: 1. Tambahkan semacam batasan setiap fungsi waktu dijalankan. 2. Batasi penggunaan cpu secara permanen untuk proses ini.

Saya telah mencoba menggunakan "nice" dan cpulimit, tetapi sepertinya tidak ada yang berhasil. Bagus tidak memiliki efek dan cpulimit (dengan -e) mengatakan: "tidak ada proses target yang ditemukan".

Saya benar-benar pemula, jadi tolong beranggapan saya hampir tidak tahu apa-apa.


12
2018-01-11 14:48


asal


Bisakah Anda memberi tahu kami apa yang Anda coba. cgroup dapat melakukan ini untuk Anda. - Panther
Untuk konfigurasi, Anda dapat menjalankan cgsnapshot -s untuk mengambil informasi tanpa menulis file konfigurasi secara manual, yang terakhir tidak disarankan. - Mingliang Liu
Apakah Anda ingin benar-benar mencekik prosesnya, yaitu memastikannya tak pernah melebihi jumlah waktu yang ditetapkan? - Ken Sharp
Saya menggunakan metode ini dan itu berhasil untuk saya .. ubuntuforums.org/showthread.php?t=992706 - Mustafa Salman


Jawaban:


Dengan tidak adanya rincian yang diminta ...

Di sini adalah bagaimana saya menggunakan cgroup di ubuntu.

Sepanjang pos ini, Anda harus mengubah variabel "$ USER" ke pengguna yang menjalankan proses

Saya menambahkan informasi untuk memori serta yang akan menjadi FAQ, jika Anda tidak membutuhkannya tidak menggunakannya.

1) Pasang cgroup-bin

sudo apt-get install cgroup-bin

2) Reboot. cgroup sekarang berada di /sys/fs/cgroup 

3) Buat cgroup untuk pengguna Anda (pemilik proses)

# Change $USER to the system user running your process.
sudo cgcreate -a $USER -g memory,cpu:$USER

4) Pengguna Anda dapat mengelola sumber daya mereka. Secara default, pengguna mendapatkan 1024 unit cpu (pembagian), jadi untuk membatasi sekitar 10% cpu, memori dalam byte ...

# About 10 % cpu
echo 100 > /cgroup/cpu/$USER/cpu.shares

# 10 Mb
echo 10000000 > /cgroup/memory/$USER/memory.limit_in_bytes

5) Mulai proses Anda (ubah exec ke cgexec)

# -g specifies the control group to run the process in
# Limit cpu
cgexec -g cpu:$USER command <options> &

# Limit cpu and memory
cgexec -g memory,cpu:$USER command <options> &

Konfigurasi

Dengan asumsi cgroup bekerja untuk Anda;)

Edit /etc/cgconfig.conf , tambahkan cgroup khusus Anda

# Graphical
gksudo gedit /etc/cgconfig.conf

# Command line
sudo -e /etc/cgconfig.conf

Tambahkan cgroup Anda. Sekali lagi ubah $ USER ke nama pengguna yang memiliki proses.

group $USER {
# Specify which users can admin (set limits) the group
perm {    
    admin {
        uid = $USER;
    }
# Specify which users can add tasks to this group
    task {
        uid = $USER;
    }
}
# Set the cpu and memory limits for this group
cpu {
    cpu.shares = 100;
    }
memory {
    memory.limit_in_bytes = 10000000;
    }
}

Anda juga dapat menentukan grup gid=$GROUP , /etc/cgconfig.conf dikomentari dengan baik.

Sekarang jalankan lagi proses Anda dengan cgexec -g cpu:$USER command <options>

Anda dapat melihat proses Anda (oleh PID) di /sys/fs/cgroup/cpu/$USER/tasks

Contoh

bodhi @ ufbt: ~ $ cgexec -g cpu: bodhi tidur 100 &

[1] 1499

bodhi @ ufbt: ~ $ cat / sys / fs / cgroup / cpu / bodhi / tasks

1499

Untuk informasi tambahan, lihat: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/


19
2018-01-11 23:18



Saya berhasil menyelesaikan bagian 1. Ini berfungsi, tetapi Anda harus menambahkan informasi bahwa proses hanya terbatas sementara beberapa proses lain membutuhkan cpu / memori. Tidak jelas - dan butuh waktu lama untuk mengetahuinya (seperti yang saya permulaan). Apakah saya mengerti benar bahwa "Konfigurasi" adalah untuk menyimpan pengaturan bahkan setelah reboot? - Rafal
Senang Anda mendapatkannya diurutkan. Ada sedikit kurva belajar =) Ya, konfigurasi adalah untuk menjaga pengaturan di booting. - Panther
Ketika saya menggunakan cgroup dari baris perintah, itu berfungsi dengan baik. Tapi ketika saya menjalankan perintah yang sama dari fungsi exec di php: (<? Php exec ("cgexec -g cpu: GroupHere NameOfProcess InputFile OutputFile"); tidak berfungsi. Hanya perbedaannya adalah bahwa dari baris perintah saya menggunakan file yang ada di dalam folder saya masuk dan dari php saya menggunakan jalur panjang untuk file-file tersebut.Tahu apa yang bisa menjadi masalah? Saya menggunakan pengguna yang sama dalam kedua kasus. - Rafal
@Rafal: Saya tidak punya Anda komentar pertama benar, memori harus dibatasi meskipun tidak ada proses lain yang mengambil banyak memori. - Flimm
@Flimm Hanya 2 proses yang sedang berjalan ketika saya menguji solusi ini - apache dan proses yang harus dibatasi. Ketika tidak ada koneksi apache atau hanya ada satu koneksi ke apache, proses yang terbatas itu membutuhkan 100% cpu. Itu mendapat terbatas hanya sekali beberapa koneksi ke apache naik (saya melakukan ini dengan menyegarkan kembali situs web banyak dari web browser). Jadi mungkin tidak ada proses lain yang berjalan. - Rafal