Як обмежити цілого користувача менше ніж 10% процесорного процесу, а не лише процес?


10

Я працюю centos, cpanel / whm, і у мене встановлено cpulimit.

Проблема, яка виникає у мене, полягає в тому, що один з моїх користувачів використовує надзвичайно багато використання процесора. Більше 100% послідовно, і це сповільнює роботу мого сервера.

Подальша проблема полягає в тому, що вони є другом, а не злісними, тому я не хочу їх призупиняти.

Крім того, що далі полягає в тому, що я не можу обмежити це процесом, оскільки цей процес змінюється щосекунди. Це кожен раз різний процес.

Я спробував наступне, але це не працює.

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

Я просто повертаюся,

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

тощо

Є дві речі, які використовують це екстремальне використання процесора.

Перше , що файл в цьому місці index.php. Інше - це [php], що б це не означало в WHM. Але в основному index.phpце проблема.

Якщо я можу обмежити цей index.phpфайл у цьому місці, це може допомогти пом'якшити цю проблему.

До речі, я спробував -Pпрапор, але він недоступний як варіант на відміну від документації.

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

повертає

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)

Так виглядає, що я маю це зробити з -eпрапором.

Однак в ідеалі я хотів би обмежити весь обліковий запис користувача.

І так, я знаю про cloudlinux, але не можу це зробити зараз. Поки я не можу зробити це, мені потрібна допомога, щоб зробити це вручну з тим, що не вимагає перезавантаження сервера.

Відповіді:


1

Ви впевнені, що не можете обмежити свого друга за допомогою процесу (PID), Apache створює новий процес (Worker) для кожного отриманого запиту, призначаючи кожен PID кожен раз.

Залежно від того, який PHP-обробник ви встановите WHM -> MultiPHP Manager -> PHP Handlers, Apache буде або запускати PHP-скрипти як сам, або запускати їх як користувач, який належить файлу. Якщо ви використовуєте suPHPяк обробник, процес PHP буде виконуватися як обліковий запис, який належить файлу.

Якщо сценарій виконується власником, ви можете обмежити використання процесора в обліковому записі, додавши його у /etc/security/limits.confфайл. Хоча ви не можете використовувати це для точного обмеження відсотка процесора, ви можете змінити їх значення "nice", щоб їх процеси брали нижчий пріоритет, ніж інші процеси на сервері. Іншим процесам не доведеться чекати так довго.

Я ніколи цього не використовував (запускаю CloudLinux), але вважаю, що наступний запис повинен допомогти у вирішенні проблеми:

username    hard    priority    30

Це встановлює максимальний пріоритет для процесів, що виконуються користувачем, на 30. З того, що я розумію, більш високий пріоритет насправді означає, що інші процеси (з нижчим пріоритетом) отримують більше часу в процесорі.

На моєму сервері, на якому працює cPanel, більшість процесів мають пріоритет 20, тому, дотримуючись наведеної вище логіки, встановлення пріоритету для цього користувача на 30 повинно дозволяти іншим процесам виконуватись перед цими процесами.


7

Ви пробували Cgroups ?


  • Встановіть послугу sudo yum install libcgroupта запустіть її sudo service cgconfig start.
  • Після цього перегляньте конфігурацію підсистеми для груп шляхом запуску sudo ls /cgroup

Створіть групу з назвою limitcpu. Рядки, які починаються з групи, створюють групи та встановлюють параметри підсистеми.

Приклад /etc/cgconfig.conf:

group limitcpu{

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

        }
}

Для обмеження процесора є кілька настроюваних параметрів, які можна використовувати для обмеження кричущого використання процесора

Якщо завданням у групі повинна бути можливість отримати доступ до одного процесора протягом 0,1 (10%) секунд з кожної 1 секунди, встановіть cpu.cfs_quota_us на 100000, а cpu.cfs_period_us - на 1000000.


Cgred - це служба (яка запускає службу cgrulesengd), яка переміщує завдання в cgroups відповідно до параметрів, встановлених у файлі /etc/cgrules.conf. Записи у файлі /etc/cgrules.conf можуть мати одну з цих двох форм:

user subsystems control_group
user:command subsystems control_group

Де userз ім'ям користувача або назвою групи з префіксом символу "@". Замініть subsystemsсписком розділених комами імен підсистем, control_groupпредставляє шлях до групи і commandпозначає ім'я процесу або повний командний шлях процесу.

Приклад тощо / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefoxпроцеси, якими керує будь-який користувач, будуть автоматично додані до браузерів cgroupі обмежені в підсистемах процесора та пам'яті.

  • memhogпроцеси, що виконуються будь-ким із adminгрупи, будуть додані до групи limitmemта обмежені в підсистемі пам'яті.

    - Ваш користувач, cpuhogбуде доданий до групи limitcpu та обмежений у підсистемах cpu.


Заздалегідь використовуючи випадки, ви можете спробувати використовувати шаблон замість цього.

Наприклад, вкажіть такий шаблон у /etc/cgconfig.conf:

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

Потім використовуйте шаблон user /% g /% u в третьому рядку запису /etc/cgrules.conf, який може виглядати так:

peter:ftp       cpu     users/%g/%u

Ці %g and %uзмінні , використовувані вище, автоматично замінюється групою і ім'я користувача в залежності від власника процесу FTP.

Якщо процес належить петеру з групи адмінстафф, перерахований вище шлях users/adminstaff/peter.

Потім служба cgred шукає цей каталог, і якщо його не існує, cgred створює його і призначає процес користувачам / adminstaff / peter / task.

Зауважте, що правила шаблонів застосовуються лише до визначень шаблонів у файлах конфігурації, тому навіть якщо "group users / adminstaff / peter" було визначено в /etc/cgconfig.conf, воно буде ігноруватися на користь "користувачів шаблонів /% g /% u ".

Підручник від Digital Ocean.

Вступ до контрольних груп.


0

Можливо, ви можете спробувати налаштувати /etc/security/limits.conf там, ви повинні мати можливість регулювати, скільки часу та процесора може споживати користувач. Докладніше див. Https://linux.die.net/man/5/limits.conf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.