Bagaimana membatasi seluruh pengguna hingga kurang dari 10% dari cpu, bukan hanya memproses?


10

Saya menjalankan centos, cpanel / whm, dan saya telah menginstal cpulimit.

Masalah yang saya alami adalah salah satu pengguna saya menggunakan jumlah cpu yang ekstrem. Lebih dari 100% konsisten dan memperlambat server saya.

Masalah selanjutnya adalah mereka adalah teman dan tidak berbahaya jadi saya tidak ingin menangguhkan mereka.

Selain itu, yang menjadi masalah adalah saya tidak bisa membatasi dengan proses, karena proses ini berubah setiap detik. Ini adalah proses yang berbeda setiap saat.

Saya mencoba yang berikut tetapi tidak berhasil.

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

Saya baru saja kembali,

No process found
No process found
No process found
No process found
No process found
No process found

dll

Ada dua hal yang menggunakan penggunaan cpu ekstrim itu.

Hal pertama adalah file di lokasi itu index.php,. Lainnya adalah [php], apa pun artinya di WHM. Tapi terutama index.phpmasalahnya.

Jika saya dapat membatasi index.phpfile itu di lokasi itu, itu mungkin membantu mengurangi masalah ini.

By the way, saya mencoba -Pbendera tetapi itu tidak tersedia sebagai pilihan tidak seperti dokumentasi.

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

kembali

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Jadi sepertinya saya harus melakukannya dengan -ebendera.

Namun idealnya saya ingin membatasi seluruh akun pengguna.

Dan ya saya tahu tentang cloudlinux tetapi saya tidak bisa melakukan itu sekarang. Sampai saya bisa melakukan itu, saya perlu bantuan melakukannya secara manual dengan sesuatu yang tidak memerlukan server reboot.

Jawaban:


1

Anda benar bahwa Anda tidak dapat membatasi teman Anda menggunakan proses (PID), Apache memunculkan proses baru (Pekerja) untuk setiap permintaan yang diterimanya, menetapkan PID baru setiap kali.

Bergantung pada penangan PHP yang Anda siapkan WHM -> MultiPHP Manager -> PHP Handlers, Apache akan menjalankan skrip PHP sendiri, atau menjalankannya sebagai pengguna yang memiliki file tersebut. Jika Anda menggunakan suPHPsebagai penangan, proses PHP akan dieksekusi oleh akun yang memiliki file.

Jika skrip dijalankan oleh pemilik, Anda dapat membatasi penggunaan cpu untuk akun dengan menambahkannya ke /etc/security/limits.conffile. Meskipun Anda tidak dapat menggunakan ini untuk membatasi persentase cpu dengan tepat, Anda dapat mengubah nilai 'bagus' mereka sehingga proses mereka mengambil prioritas yang lebih rendah daripada proses lain di server. Dengan demikian, proses lain tidak harus menunggu selama.

Saya tidak pernah menggunakan ini sendiri (saya menjalankan CloudLinux), tetapi saya yakin entri berikut ini akan membantu masalah:

username    hard    priority    30

Ini menetapkan prioritas maksimum untuk proses yang dijalankan oleh pengguna menjadi 30. Dari apa yang saya pahami, prioritas yang lebih tinggi sebenarnya berarti bahwa proses lain (dengan prioritas yang lebih rendah) mendapatkan lebih banyak waktu CPU.

Di server saya yang menjalankan cPanel, sebagian besar proses memiliki prioritas 20, jadi mengikuti logika di atas, menetapkan prioritas untuk pengguna tersebut menjadi 30 harus memungkinkan proses lain untuk mengeksekusi sebelum proses ini.


7

Sudahkah Anda mencoba Cgroups ?


  • Instal layanan sudo yum install libcgroupdan mulai sudo service cgconfig start.
  • Setelah itu lihat konfigurasi subsistem untuk cgroup dengan menjalankan sudo ls /cgroup

Buat grup bernama limitcpu. Baris yang dimulai dengan grup membuat cgroup dan mengatur parameter subsistem.

Contoh /etc/cgconfig.conf:

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

Untuk pembatasan CPU ada beberapa parameter yang dapat Anda gunakan untuk membatasi penggunaan CPU secara terang-terangan

Jika tugas dalam cgroup harus dapat mengakses CPU tunggal selama 0,1 (10%) detik dari setiap 1 detik, atur cpu.cfs_quota_us menjadi 100000 dan cpu.cfs_ Period_us menjadi 1000000.


Cgred adalah layanan (yang memulai layanan cgrulesengd) yang memindahkan tugas ke dalam cgroups sesuai dengan parameter yang ditetapkan dalam file /etc/cgrules.conf. Entri dalam file /etc/cgrules.conf dapat mengambil salah satu dari dua bentuk ini:

user subsystems control_group
user:command subsystems control_group

Di mana userdengan nama pengguna atau nama grup yang diawali dengan karakter "@". Ganti subsystemsdengan daftar nama subsistem yang dipisah koma, control_groupmewakili jalur ke cgroup, dan commandsingkatan dari nama proses atau jalur perintah penuh dari suatu proses.

Contoh etc / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefoxproses yang dijalankan oleh pengguna mana pun akan secara otomatis ditambahkan ke browser cgroupdan dibatasi dalam cpu dan subsistem memori.

  • memhogproses yang dijalankan oleh siapa pun dalam admingrup akan ditambahkan ke cgroup limitmemdan terbatas pada subsistem memori.

    - Pengguna Anda cpuhog,, akan ditambahkan ke cgroup 'limitcpu' dan dibatasi dalam subsistem cpu.


Dalam kasus penggunaan sebelumnya, Anda dapat mencoba menggunakan templat.

Sebagai contoh, tentukan templat berikut di /etc/cgconfig.conf:

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

Kemudian gunakan template pengguna /% g /% u di baris ketiga dari entri /etc/cgrules.conf, yang dapat terlihat seperti berikut:

peter:ftp       cpu     users/%g/%u

The %g and %uvariabel yang digunakan di atas secara otomatis diganti dengan kelompok dan nama pengguna tergantung pada pemilik proses ftp.

Jika proses tersebut milik peter dari grup adminstaff, jalur di atas diterjemahkan ke users/adminstaff/peter.

Layanan cgred kemudian mencari direktori ini, dan jika tidak ada, cgred membuatnya dan memberikan proses kepada pengguna / adminstaff / peter / tugas.

Perhatikan bahwa aturan templat hanya berlaku untuk definisi templat di file konfigurasi, jadi meskipun "pengguna grup / adminstaff / peter" didefinisikan dalam /etc/cgconfig.conf, itu akan diabaikan demi "pengguna templat /% g /% kamu ".

Tutorial oleh Digital Ocean.

Pengantar Grup Kontrol.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.