Як обмежити використання ресурсів для економії CPU + RAM для певного процесу?


25

У мене є сервер розробників, на якому sshdіноді перестає працювати, оскільки в машині не вистачає оперативної пам'яті. Так, у нас не вистачає пам’яті, і оновлення зараз не є можливим вибором. Що я хочу зробити, це сказати машині: "Робіть все, що завгодно, але залишайте 20 Мб і трохи процесора sshd!".

Як це можна зробити?


Sshd не повинен вибухати так, це, як правило, дуже добре поводиться демон. Переконайтеся, що оновлено до останнього / найбільшого. Що ти з цим робиш? Ви переносите масивні дані через них?
Марцін

2
@Marcin Я не думаю, що я роблю щось велике, редагування тексту. Навіть якщо sshdдобре поводиться, я думаю, що він застряг би, якщо не вистачить процесора / оперативної пам’яті для використання, чи не так?
phunehehe

Коли у Linux не вистачає пам'яті, він починає вибивати процеси для повернення пам'яті. Можливо, ви бачите OOM в дії (не вбивця пам'яті). Я не знаю, чому б він вирішив послідовно вбивати ваш sshd. Ви коли-небудь бачили, як sshd насправді просочується (зростає в розмірах) жахливо, перш ніж він підірветься, або він спрацьовує нормально одну мить і наступний мертвий?
Марцін

@ Марцін шанси, якщо він OOM, система завалилася настільки, що він не може відповісти, але це не проблема sshd, а проблема з його завантаженням. На жаль, я не знаю відповіді на це.
ксенотерацид

@phunehehe Ви впевнені, що проблема не в пам’яті для ssh, і не ваше навантаження через дах? не дає sshd помилок? яке навантаження на коробку? і що змушує систему вичерпати пам'ять.
ксенотеррацид

Відповіді:


9

Ви , ймовірно , можна домогтися чого - то подібного , що за допомогою контрольних груп з контролером ресурсів пам'яті .

Я думаю, ви поставили всі свої трудомісткі завдання обмежено (процесор і оперативна пам’ять) cgroupі залишите sshd"назовні", щоб це не було обмежено.

(Додавання більшої кількості свопів, навіть у формі файлу своп, може бути хорошим варіантом.)


Я все ще вагаюся, це виглядає непросто (зіпсовано Ubuntu).
phunehehe

о, це, звичайно, непросто :-) Додавати своп набагато простіше.
Мат

@phunehehe Ласкаво просимо бути Sys Admin, це непросто. Але тепер ви повинні навчитися робити непрості речі.
ксенотеррацид

6

О, але групи легко! :) Встановіть пакет libcgroup. Створіть /etc/cgconfig.conf:

mount {
    cpu     = /cgroup/cpu_and_mem;
    cpuacct = /cgroup/cpu_and_mem;
    memory  = /cgroup/cpu_and_mem;
}

group sshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

group nosshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

Почніть cgconfigпроцес, який створить ієрархію, групи та встановить межі. Якщо це вдасться, у вас є дві групи, обидві з яких присвоєно 50% центрального процесора та 1G пам’яті (не знаю, який фактичний обсяг наявної пам’яті; якщо в цьому прикладі це 2G). Тепер вам просто потрібно перемістити всі завдання (тобто всі процеси, що працюють в системі) з кореневої групи в групу nosshd:

cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks

Тоді вам просто потрібно отримати PID sshdпроцесу та перемістити його в файл завдань sshd:

cgroup]# echo $PID >> sshd/tasks

Та-да, ти закінчив. Тепер ви можете бути впевнені, що sshd завжди матиме 50% процесора та 1G пам'яті.


1

Використовуйте reniceдля отримання більш високого пріоритету для sshdперевірки бухгалтерського обліку. (acct) -> за допомогою цього ви можете встановити ресурси для користувачів, тому запустіть sshd з s


Я додам ioniceдо цього теж, і, мабуть, почніть sshd з приємного, щоб не відмовляти його пізніше.
ксенотеррацид

1

Більш загальне рішення проблеми використання ресурсів додатків - це запускати додатки в контейнері за допомогою Docker . Потім ви можете запускати контейнери з обмеженнями на використання процесора та пам'яті, подібні до груп.

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