Ограничить нагрузку процессора linux
Некоторые программы в процессе своей работы нагружают центральный процессор на 100%. Это нормально и процессоры предназначены работать на максимальных своих частотах. Тем не менее, возможно возникновение сопутствующих проблем:
- перегрев компьютера
- подвисания операционной системы, «тормоза»
Есть способы установить ограничения для конкретной программы на то, сколько она может потреблять ресурсов центрального процессора. В этой инструкции я расскажу сразу о двух таких программах, которые позволяют установить, сколько процентов процессора можно использовать определённой программой. Но начнём немного с другого.
Обычно не нужно ограничивать количество процессорного времени, которое доступно для использования программой. Если процессор из-за интенсивной работы начинает перегреваться, то система сбрасывает частоты, то есть центральный процессор просто начинает медленнее работать. Это называется троттлинг. То есть имеется встроенная защита от того, чтобы процессор не сгорел. Если вы сталкиваетесь с перегревом и троттингом, то рекомендуется выполнить:
- чистку компьютера от пыли (особенно актуально для ноутбуков после нескольких лет эксплуатации)
- проверку и замену термопасты (актуально для используемых много лет настольных компьютеров)
Это может значительно улучшить ситуацию и ваша система будет работать быстрее за счёт того, что ЦПУ не будет сбрасывать частоты.
Ещё для ноутбуков существуют охлаждающие подставки. Они представляют из себя подложку с вентиляторами, которые ставятся под ноутбук. Они усиливают конвекцию воздуха и помогают встроенной системе охлаждения. Обычно с помощью охлаждающих подставок удаётся добиться хороших результатов по снижению температуры и предотвращению троттлинга.
Если у вас система подвисает, начинает тормозить из-за слишком большой нагрузки на процессор, то можно изменить приоритет процесса. В Linux за это отвечает величина nice. Если вы понизите приоритет программы, то она всё равно будет работать на полную. Но если вы будете выполнять другие действия на компьютере, то центральный процессор сначала будет обрабатывать ваши действия в других программах и только затем, по остаточному принципу, будет предоставлять процессорные мощности «тяжёлой» программе.
Тем не менее, если вам действительно нужно ограничить мощность процессора, которую может использовать определённая программа, то об этом сказано ниже.
№ 4: uptime – сообщает, как долго работает система
1 можно рассматриваться как оптимальное значение нагрузки. Нагрузка может меняться от системы к системе. Для системы с одним процессором приемлемым может считаться значение от 1 до 3, для мультипроцессорных систем – от 6 до 10.
1. Одно предварительное примечание
Наиболее часто используемые горячие клавиши
При работе команды top можно воспользоваться следующими полезными горячими клавишами:
№ 8: sar – сбор и выдача данных о системной активности
Команда sar используется для сбора информации о системной активности и выдачи ее в виде отчета или ее сохранения. Чтобы увидеть значение считчика сетевой активности, введите:
Для того, чтобы увидеть значения счетчиков сетевой активности, начиная с 24-го:
С помощью команды sar Вы можете также выдавать данные в режиме реального времени:
Пример вывода данных:
Показать потоки (LWP и NLWP)
№ 10: pmap – использование процессами оперативной памяти
Команда pmap выдает данные о распределении памяти между процессами. Использование этой команды позволит найти причину узких мест, связанных с использованием памяти.
Пример вывода данных:
Последняя строка очень важна:
- mapped: 933712K общее количество памяти, отведенного под файлы
- writeable/private: 4304K общее количество приватного адресного пространства
- shared: 768000K общее количество адресного пространства, которое данный процесс использует совместно другими процессами.
Показать потоки после процессов
Контроль нагрузки на центральный процессор создаваемой группой программ
CPUTool – это ещё одна утилита, которая управляет использованием ЦПУ и нагрузкой на систему. Она умеет ограничивать нагрузку от одной программы или группы процесса по заданному лимиту.
CPUTool работает отправляя сигналы SIGSTOP и SIGCONT.
Установка CPUTool (в производные Debian):
Использование CPUTool:
Опции CPUTool:
Как и для предыдущей программы, возможно более 100% процессорной мощности, например, для двухъядерного процессора можно указать до 200 и так далее.
Примеры запуска CPUTool
Ограничить PID 4711 на использование 75% одного ядра ЦПУ:
Запуск rsync для создания резервной копии только когда системная нагрузка не превышает 7.5:
15 Answers 15
I had a slightly similar issue with gzip .
Assuming we want to decrease the CPU of a gzip process:
- I found sleep useful as the cpulimit sometimes didn't pick up the new gzip process immediately
- --limit 10 limits gzip CPU usage to 10%
- -z automatically closes cpulimit when gzip process finishes
Another option is to run the cpulimit daemon.
I don't remember and dont think there was something like this in the unix scheduler. You need a little program which controls the other process and does the following:
the ratio tR/tP controls the cpu load.
Here is a little proof of concept. "busy" is the program which uses up your cpu time and which you want to be slowed-down by "slowDown":
ok, that script needs some more work (for example, to care for being INTR-upted and let the controlled process continue in case it was stopped at that moment), but you get the point. I would also write that little script in C or similar and compute the cpu ratio from a comand line argument.
The cpulimit command works in this way. It monitors the processes you defined. If a process uses more than the limit, it suspends the process. -- You may check the source code in Github.
In case they remove the info, here is again
Install cpulimit package. Code:
sudo apt-get install cpulimit
Install gawk package. Code:
sudo apt-get install gawk
CREATE CPULIMIT DAEMON FILE
Open text editor with root privileges and save bellow daemon script text to new file /usr/bin/cpulimit_daemon.sh
CPU_LIMIT Change this variable in above script if you would like to omit CPU consumption for every process to any other percentage then 20%. Please read "If using SMP computer" chapter bellow if you have SMP computer (more then 1 CPU or CPU with more then 1 core).
DAEMON_INTERVAL Change this variable in above script if you would like to have more/less regular checking. Interval is in seconds and default is set to 3 seconds.
BLACK_PROCESS_LIST and WHITE_PROCESSES_LIST Variable BLACK_PROCESSES_LIST limits only specified processes. If variable is empty (default) all violating processes are limited.
Variable WHITE_PROCESSES_LIST limits all processes except processes defined in this variable. If variable is empty (default) all violating processes are limited.
One or both of the variables BLACK_PROCESSES_LIST and WHITE_PROCESSES_LIST has to be empty - it is not logical that both variables are defined.
You can specify multiple processes in one of this two variables using delimiter characters "|" (without double quotes). Sample: if you would like to cpulimit all processes except mysql, firefox and gedit processes set variable: WHITE_PROCESSES_LIST="mysql|firefox|gedit"
PROCEDURE TO AUTOMATICALLY START DAEMON AT BOOT TIME
Set file permissions for root user: Code:
sudo chmod 755 /usr/bin/cpulimit_daemon.sh
Open text editor with root privileges and save bellow script to new file /etc/init.d/cpulimit
Add script to boot-up procedure directories: Code:
sudo update-rc.d cpulimit defaults
Reboot to check if script starts cpulimit daemon at boot time: Code:
MANUALLY CHECK, STOP, START AND RESTART DAEMON
Note: Daemon and service in this tutorial has equal meaning.
Note: For users using prior to Ubuntu 8.10 (like Ubuntu 8.04 LTS) instead of service command use "sudo /etc/init.d/cpulimit status/start/stop/restart" syntax or install sysvconfig package using command: sudo apt-get install sysvconfig
Check if cpulimit service is running Check command returns: "cpulimit daemon is running" if service is running, or "cpulimit daemon is not running" if service is not running. Code:
Start cpulimit service You can manually start cpulimit daemon which will start to omit CPU consumption. Code:
Stop cpulimit service Stop command stops cpulimit daemon (so no new process will be limited) and also sets to all existing limited processes to have full access to CPU, just like it was before cpulimit was not running. Code:
Restart cpulimit service If you change some variables settings in /usr/bin/cpulimit_daemon.sh like CPU_LIMIT, DAEMON_INTERVAL, BLACK_PROCESSES_LIST or WHITE_PROCESSES_LIST, then after changing settings you must restart service. Code:
- CHECK CPU CONSUMPTION WITH OR WITHOUT CPULIMIT DAEMON
Without daemon 1. stop cpulimit daemon (sudo service cpulimit stop) 2. execute CPU intensive tasks in background 3. execute command: top and check for %CPU column Result of %CPU is probably more then 20% for each process.
With daemon turned on 1. start cpulimit daemon (sudo service cpulimit start) 2. execute the same CPU intensive tasks in background 3. execute command: top and check for %CPU column Result of %CPU should be maximum 20% for each process. Note: Don't forget at beginning %CPU can be more then 20%, because daemon has to catch violating process in interval of 3 seconds (set in script by default)
I have tested this code on Intel dual-core CPU computer - that behaves like SMP computer. Don't forget that top command and also cpulimit by default behaves in Irix mode, where 20% means 20% of one CPU. If there are two CPUs (or dual-core) then total %CPU can be 200%. In top command Irix mode can be turned off with command I (pressing +i when top command is running) and Solaris mode is turned on, where total amount of CPU is divided by number of CPUs, so %CPU can be no more then 100% on any number of CPU computer. Please read more info about top command in top man page (search for I command). Please also read more about how cpulimit is operating on SMP computer in cpulimit official page.
But how does cpulimit daemon operates on SMP computer? Always in Irix mode. So if you would like to spend 20% of CPU power on 2-CPU computer then 40% should be used for CPU_LIMIT variable in cpulimit daemon script.
- UNINSTALL CPULIMIT DAEMON AND CPULIMIT PROGRAM
If you would like to get rid of cpulimit daemon you can clean up your system by removing cpulimit daemon and uninstalling cpulimit program.
Stop cpulimit daemon Code:
Remove daemon from boot-up procedure Code:
Delete boot-up procedure Code:
Delete cpulimit daemon Code:
Uninstall cpulimit program Code:
sudo apt-get remove cpulimit
Uninstall gawk program If you don't need this program for any other script, you can remote it. Code:
Иногда имеем высокую загрузку процессора некими системными задачами.
Не процессами из userland, а именно "система" грузит.
Т.е. явно выполняются какие-то системные вызовы (выделение памяти, переключения контекста), или работают драйверы (обрабатывают прерывания или что-то еще), идёт активный ввод-вывод.
Это всё я всегда предполагаю, Но как узнать ТОЧНО, почему высокая загрузка - не представляю. Поэтому прошу помощи.
Сейчас я использую несколько косвенных методов, но они не всегда подходят: глянуть в iotop, прибвать процессы по одному, и смотреть не спала ли нагрузка.
Но иногда просто нельзя останавливать сервисы. А иногда и процессов работающих уже почти не осталось, а нагрузка всё равно есть.
Вот хочется найти какое-нибудь средство быстро и точно узнавать что же грузит процессор.
что значит "система" грузит? примеры ваших процессов приведите? что для вас "быстро"? если процесс выдает 100% нагрузку в течении 0.5 секунд, с частотой 3 секунды? если раз в минуту грузит 100% на 10 секунд? "быстро" зависит от периода, который конкретно для вас слишком долгий
Сорри, ещё не знаю тут как ответить конкретно человеку. Поэтому отпишу сразу всем: 1) Система - это поле sy в top. Или "красненькая" часть столбца в htop. Короче всё, что не user-space и не i/o. 2) Я рассматриваю сейчас случаи, когда 100% загрузка проца/ядра, и либо все эти 100% значатся как sys.load, либо часть как user, а часть как sys. 3) В основном меня начинает этот вопрос волновать когда эта нагрузка постоянна в течение как минимум часа и никуда не девается, и никак не коррелирует со входящим траффиком. Ну либо девается, когда убиваешь всё-всё-всё, гасишь обмен траффиком с сеткой.
Результат vmstat уже показыватьно нет смысла. В этот раз причиной был DDOS с флудом TCP-пакетами на 80-й порт. И сетевушка просто захлёбывалась. Ядро даже не успевало забирать из её буфера пакеты. Но это я точно выяснил лишь когда хостер прикрыл траффик из инета кроме как от меня. Но не всегда есть такая возможность. Да и опять же. всё это косвенные способы. Я их знаю и умею. Но я хочу найти некую системную утилиту, которая показывает что там происходит под капотом у ядра. Чем оно грузит проц. Какой драйвер, прерывание от какого устройства, какой системный вызов.
Ответить конкретно -- @имя (в одном комментарии допускается только одно). Смотреть статистику прерываний -- /proc/interrupt (вообще, man 5 proc -- полезное чтиво). А тут нагуглил кучу разных мониторов.
Показать каждый процесс для пользователя Vivek
Ограничение использование центрального процессора (с помощью cpulimit)
Изучим как пользоваться cpulimit.
cpulimit – это простая программа, которая пытается ограничить использование ЦПУ процессом (величина выражена в процентах, а не во времени CPU). Это полезно для контроля длительных задач требующих сильной нагрузки на процессор, когда вы не хотите, чтобы они слишком сильно нагружали систему и мешали работе. Примером таких задач может быть: создание резервной копии системы или большого количества файлов, сжатие в архив большого объёма данных, брут-форс паролей и другие операции. Программа cpulimit не влияет на значение nice или другие способы планирования приоритета, она работает с настоящим использованием ЦПУ. Кроме того, эта программа может динамически и быстро адаптироваться к общей нагрузке на систему.
Если у вашей машины один процессор, вы можете ограничить процент от 0% до 100%, что означает, если вы, к примеру, установите 50%, процентов, то ваш процесс не может использовать более чем 500 миллисекунд времени центрального процессора каждую секунду. Но если на вашей машине четыре процессора, то процент можно устанавливать от 0% до 400%. Так установка лимита на 200% означает использование не более чем половины имеющейся мощности. В любом случае, процент — это то же самое, что вы видите когда запускаете программу top.
cpulimit должен быть запущен по крайней мере тем же пользователем от которого запущен контролируемый процесс. Но намного лучше, если вы запустите cpulimit от root, чтобы иметь более высокий приоритет и точный контроль.
cpulimit также ограничивает дочерние процессы указанной программы.
Установка cpulimit (в Ubuntu, Linux Mint, Kali Linux, Debian и другие его производные):
Команда запуска cpulimit имеет следующий вид:
Изучим опции cpulimit:
Примеры запуска cpulimit
Предположим, вы запустили foo --bar и вы обнаружили с помощью top или ps, что этот процесс использует всю мощность вашего ЦПУ, вы можете или:
Ограничить использование CPU процессом воздействуя на исполнимый файл программы (примечание: аргумент "--bar" пропущен):
Ограничить использование CPU процессом воздействуя на, который показывает ps:
Как и -e, но использует абсолютный путь:
Полезно для скриптов, где вы хотите троттлить последнюю запущенную команду:
Запуск веб-браузера Firefox и ограничение использование CPU 20% процентами:
Флаг -c устанавливает количество ядер ЦПУ, которые, как начинает думать программа, доступны. Обычно программа правильно определяет количество ядер, но это значение можно переписать:
Запуск программы Firefox и остановка процесса, если он будет использовать более 20% CPU.
Троттлить процесс 1234 на 20% использования CPU. Если cpulimit настроен для выхода, то он отправляет наблюдаемому процессу сигнал SIGTERM.
Примеры запуска в cpulimit программы с опциями
Запуск веб-браузера Firefox в приватном режиме и ограничение использование центрального процессора на 25%:
Запуск программы aircrack-ng с опциями для взлома пароля Wi-FI:
Ещё раз обратите внимание, как именно считается выделяемый процент. Одно ядро – это 100% Допустим, на компьютере восемь ядер, тогда максимально можно установить значение 100% * 8 = 800%, что соответствует стопроцентному использованию всех восьми ядер. Если мы хотим, чтобы использовалось только половина процессорной мощности, то нужно указать 400%, то есть -l 400.
Контроль использования количества CPU выполняется отправкой процессу сигналов SIGSTOP и SIGCONT POSIX.
При вызове с опциями -e или -P, cpulimit ищет любой процесс в /proc с именем, которое соответствует имени процессу в переданном аргументе. Более того, она использует первый экземпляр найденного процесса. Для управление определённым экземпляром используйте опцию -p и укажите PID.
Показать больше данных
Для того, чтобы включить режим максимальной выдачи данных (будут показаны аргументы командной строки, переданные в процесс):
2 ответа 2
надо сходить сюда, можете найти русский перевод или похожие статьи. Поможет вам ограничить выборочно потребление CPU процессами
почитать про strace и подобные ему sudo strace -t -e trace=open,connect,accept unity сможете увидеть много интересного
для ядра - ftrace или поищите еще kernel tracer-ов
утилиты, которая дает понять это с одного взгляда я не знаю, если вы не нагуглите, я бы пошел следующим способом: настроить мониторинг процессов так, чтобы в случае возникновения нагрузки на K% на N секунд каким-либо процессом, он давал алерт.
Можно наскриптовать так, чтобы при возникновении алерта, мониторинг натравливал trace на этот процесс, на секунду, допустим, и сохранял бы список самых часто выполняемых / долгих функций.
Но тут нужно быть осторожным, чтобы не повалить систему и не заполнить hdd. Т.е. скриптинг должен учитывать, что необязательно ставить trace на процесс, который уже был под трейсом (т.е. для которого уже сохранен tracefile), иначе процессы начнут тормозить еще больше, к примеру. Нельзя трейсить слишком долго - гигабайтные дампы вам не нужны.
Если вы решаете конкретную задачу борьбы с DDoS - ну, или очень много денег и очень много дц (повезло, если у вас есть), или cloudflare - я бы так пошел для начала.
Т.е. тут все от задач зависит, дебажить драйвер ядра - один подход, защищаться от ddos - другой.
№ 18: Cacti – инструментальное веб приложение, используемое для мониторинга
3. Ограничение загрузки CPU
Теперь мы проверим утилиту для ограничения использования процессора. Для этого мы сначала проверим использование ЦП без cpulimit, а затем запустим cpulimit, чтобы оценить ее работу. Давайте проясним это на примере.
Вот пример того, как можно загрузить приложением одноядерный процессор:
Затем мы проверим загрузку процессора командой:
Как мы видим, загрузка ЦП достигла 100%, теперь мы задействуем cpulimit для ограничения использования ЦП. Мы можем вывести этот процесс на передний план, используя команду fg, и закрыть его, нажав CTRL+C.
Теперь мы можем протестировать cpulimit, чтобы увидеть, действительно ли она делает то, что должна. Давайте проверим это следующим образом:
Теперь мы проверим загрузку процессора командой top:
Теперь вы можете видеть, что загрузка процессора снизилась со 100% до 33,8%. Итак, мы успешно проверили в действии утилиту cpulimit, которая может ограничивать использование одноядерного процессора.
Вот пример того, как загрузить приложением многоядерный процессор:
Для проверки количества вашего ядра процессора используйте команду:
В моем случае это было 4.
Теперь мы продолжим проверять загрузку процессора для приложения без cpulimit во всех 4 ядрах следующим образом:
Эта строка запустит команду, используя все ядра, и выдаст вывод в виде:
Теперь проверьте использование процессора с помощью команды top:
Команда dd потребляет почти 100% всех ядер CPU. Далее мы проверим эту команду с помощью утилиты cpulimit. Для этого убейте предыдущие следы команды dd следующим образом:
Теперь используйте cpulimit с той же командой, как показано ниже:
Теперь проверьте использование процессора с помощью утилиты top.
Как вы можете видеть выше, использование CPU ограничено со 100% до почти 20% для многоядерного процессора.
Поздравляем! Мы успешно протестировали cpulimit для ограничения использования процессора в Ubuntu 18.04.
Оригинал: "20 Linux System Monitoring Tools Every SysAdmin Should Know"
Автор: Vivek Gite
Дата публикации: июнь 2009 г.
Перевод: Н.Ромоданов
Дата перевода: 21 октября 2009 г.
Вам нужно контролировать функциональные характеристики Linux-сервера? Попробуйте для этого описанные ниже встроенные команды и несколько дополнительных инструментальных средств. В большинстве дистрибутивов Linux есть масса средств мониторинга. Эти средства измеряют характеристики, которые можно использовать для получения информации об активности системы. Вы можете воспользоваться этим инструментарием для поиска причин возникновения проблемы с производительностью. Ниже перечислены лишь некоторые команды из большого числа тех, которые нужны при анализе системы и отладке сервера для поиска следующих проблем:
- Узкие места общего характера
- Узкие места, связанные с диском (дисковой памятью)
- Узкие места, связанные с процессором и оперативной памятью
- Узкие места, связанные с сетью
Выдать 10 процессов, потребляющих наибольшее количество памяти
Выдать информацию о параметрах безопасности
№ 5: ps – список процессов
Команда ps выдаст краткий список текущих процессов. Для того, чтобы выбрать все процессы, используете параметр -A или –e:
Пример вывода данных:
Команда ps подобна команде top, но выдает больше информации.
№14: tcpdump – детальный анализ сетевого трафика
Команда tcpdump – простая команда, выдающая дамп сетевого трафика. Однако, вам нужно хорошо понимать протоколы TCP/IP для того, чтобы использовать это средство. Например, для того, чтобы показать информацию о трафике DNS, введите следующее:
Для того, чтобы показать все сессии FTP для адреса 202.54.1.5, введите следующее:
Введите следующую команду и используйте для просмотра подробностей программу анализа wireshark :
Выдать дерево процессов
№ 15: strace – системные вызовы
Трассировка системных вызовов и сигналов. Это средство полезно для отладки веб сервера и решения других серверных проблем. О том, как использовать это средство и для чего нужна трассировка процессов, смотрите по ссылке strace .
№ 17: Nagios – мониторинг сервера и сети
№ 19: KDE System Guard – графический монитор, выдающий сведения о системе в режиме реального времени
KSysguard – сетевое приложение для KDE, осуществляющее мониторинг системы и задач. Это средство может работать в ssh сессии. В нем имеется масса возможностей, например, такие, как клиент/серверные технологии, что позволяет осуществлять мониторинг локальных и удаленных хостов. В графической оболочке используются так называемые сенсоры, которые собирают информацию, выдаваемую приложением. Сенсор может возвращать либо простое значение, либо более сложно сформированные данные, например, таблицы. Для каждого вида данных предлагается один или несколько вариантов выдачи данных. Изображаемые данные сгруппированы в виде отдельных листов, которые можно сохранять и загружать независимо друг от друга. Таким образом, KSysguard не только менеджер простых задач, но также и мощное средство для управления большим серверным хозяйством.
Рис.05: KDE System Guard (рисунок взят из Википедии)
Подробности использования смотрите по следующей ссылке: Руководство по KSysguard .
№ 1: top – команда выдачи данных об активности процессов
Программа top динамически выдает в режиме реального времени информации о работающей системе, т.е. о фактической активности процессов. По умолчанию она выдает задачи, наиболее загружающие процессор сервера, и обновляет список каждые пять секунд.
Рис.1: Linux команда - top
Показать имя для PID 55977
Выдать 10 процессов, потребляющих наибольший ресурс процессора
№ 6: free – использование памяти
Команда free показывает общее количество свободной и используемой системой физической памяти и памяти свопинга, а также размеры буферов, используемые ядром.
Пример вывода данных:
Комментарии
Приведены выборочно только те, в которых сообщается об инструментальных программах, не указанных в основном списке – прим.пер.
№ 3, Chris: … для систем с небольшим количеством машин я рекомендую использовать Munin . Его легко устанавливать и конфигурировать. Мое любимое средство мониторинга linux кластера - Ganglia .
№ 4, Ftaurino: Еще один полезный инструмент - dstat , который выдает столько же данных, как вместе взятые vmstat, iostat, ifstat и netstat, и даже больше…
№ 10, Amr El-Sharnoby: Я убедился, что самое лучшее средство для отслеживания узких мест, связанных с процессами, процессором, памятью и жесткими дисками, причем все в одном, – это atop… Но само средство может вызвать массу проблем на сильно загруженных серверах, поскольку учет процессов идет непрерывно и сервис работает постоянно…
Этот инструмент сэкономил мне сотни часов времени, помог найти узкие места и решить связанные с ними проблемы …
№ 14, Cristiano: … хотелось бы добавить IFTOP, это действительно простое и не требующее значительных ресурсов средство, оно очень полезно, когда Вы хотите узнать, откуда был последний доступ к серверу и куда идет трафик…
№ 21, Ponzu: vi – инструметальное средство (хорошо известный мощный текстовый редактор - прим. пер.), используемое для проверки и модификации практически любого конфигурационного файла.
№ 22, Eric Schulman: … стоит упомянуть о dtrace, которое пригодится требовательным хакерам, желающим больше узнать об операционной системе и о внутренней структуре ее программ…
№ 25, Adrian Fita: … мне бы хотелось добавить iotop, отслеживающий использование диска различными процессами, и jnettop – очень простое средство, отслеживающее разделение ширины сетевого канала между различными подключениями в системе Linux …
№ 27, Praveen K: … я бы добавил команды whoami ,who am i, finger, pinky , id …
№ 33, Kburger: … если Вы обсуждаете веб сервер, то прекрасное средство следить за активностью сервера Apache - apachetop
№ 34, Ram: … Вы забыли самое важное - net-snmpd. С его помощью Вы можете собрать сырые данные. Затем с помощью snmpwalk и скриптов Вы можете сделать свой собственный веб NMS, который будет собирать обычные данные, такие как прохождение пингов, использование дискового пространства, падение сервисов…
№ 35, Kartik Mistry: …"iotop" – прекрасное средство, которое следовало бы включить в список. Я очень часто использую "vnstat" для отслеживания закачек данных …
№ 37, Feilong: … обратите внимание на очень мощное средство, называемое nmon. Я использую его в системе AIX IBM, но сейчас оно работает на всех современных системах GNU/linux…
№ 45. Aleksey Tsalolikhin: … я бы еще упомянул "ngrep" – сетевой (network) grep…
№ 48, Komradebob: …удивлен, что среди предложений не обнаружил следующий инструментарий: bmon – отображает / отслеживает в режиме реального времени сетевую активность / ширину пропускания канала; etherape – отличный визуальный индикатор, показывающий сетевой трафик; wireshark – tcpdump на стероидах; multitail – отслеживание в одном терминальном окне состояния многих файлов; swatch – отслеживает состояние регистрационных файлов и выдает оповещения.
№ 50, Jay: … phpsysinfo – еще один прекрасный и не требующий много ресурсов веб инструмент, осуществляющий мониторинг. Очень прост в настройке и использовании …
№ 51, Manuel Fraga: Osmius - инструментальное средство мониторинга (open source) - C++ и Java. С невероятной производительностью мониторит все, что подключается к сети …
№ 55, Balaji: … trafmon – еще одно полезное средство …
№ 56, Stefan: А для тех, кому нравятся несложные и компактные графические средства измерения, - xosview +disk -ints –bat
№ 65, Eddy: Я не вижу в списке ifconfig или iwconfig
№ 66, Kestev: openNMS
Вы можете также прочитать другие статьи о средствах мониторинга системы в Линукс в разделе Разные административные задачи Библиотеки нашего сайта.
I have the following problem: some processes, generated dynamically, have a tendency to eat 100% of CPU. I would like to limit all the process matching some criterion (e.g. process name) to a certain amount of CPU percentage.
The specific problem I'm trying to solve is harnessing folding@home worker processes. The best solution I could think of is a perl script that's executed periodically and uses the cpulimit utility to limit the processes (if you're interested in more details, check this blog post). It works, but it's a hack :/
Any ideas? I would like to leave the handling of processes to the OS :)
Thanks again for the suggestions, but we're still missing the point :)
The "slowDown" solution is essentially what the "cpulimit" utility does. I still have to take care about what processes to slow down, kill the "slowDown" process once the worker process is finished and start new ones for new worker processes. It's precisely what I did with the Perl script and a cron job.
The main problem is that I don't know beforehand what processes to limit. They are generated dynamically.
Maybe there's a way to limit all the processes of one user to a certain amount of CPU percentage? I already set up a user for executing the folding@home jobs, hoping that i could limit him with the /etc/security/limits.conf file. But the nearest I could get there is the total CPU time per user.
It would be cool if to have something that enables you to say: "The sum of all CPU % usage of this user's processes cannot exceed 50%". And then let the processes fight for that 50% of CPU regarding to their priorities.
Guys, thanks for your suggestions, but it's not about priorities - I want to limit the CPU % even when there's plenty of CPU time available. The processes are already low priority, so they don't cause any performance issues.
I would just like to prevent the CPU from running on 100% for extended periods.
Why is it a bad thing? If they're properly niced, they shouldn't interfere with any other processes. They'll just (in effect) get all the leftover cycles.
Reading the blog post, it seems like he wants the CPUs to have some idle time so they don't run so hot. That's why I stopped doing SETI@Home - my CPUs weren't lasting very long because they ran hot all the time.
Yeah, I've never had a CPU fail due to overheating, despite running SETI@Home. And I never used anything fancier than the retail HSF units that came with my processors.
Perhaps he's in a shared hosting environment and wants to throttle his CPU time so his account doesn't get "locked"
If his processes are properly niced, he shouldn't be impacting others' performance. His processes will only take CPU when it isn't in use elsewhere.
№ 11 и № 12: netstat и ss – сетевая статистика
Команда netstat выдает информацию о сетевых соединениях, таблицах маршрутизации, статистике по интерфейсам, маскарадинге соединений и многоадресных рассылках. Команда ss используется для выдачи в дамп статистики о сокетах. Она позволяет выдавать информацию, аналогичную выдаваемой командой netstat. Подробное описание команд ss и netstat смотрите по следующим ссылкам:
Выдать список всех процессов на сервере
Заключение
Итак, с помощью этих программ вы можете ограничить, насколько интенсивно ресурсоёмкие приложение и программы будут использовать центральный процессор. Если ваша проблема заключается в перегреве и троттлинге, то начните с очистки физического компьютера от пыли и улучшения системы охлаждения.
О том, как контролировать текущую частоту и температуру процессора в Linux смотрите здесь.
Оригинал: How to limit CPU usage with CPULimit on Ubuntu Linux
Автор: howtoforge
Дата публикации: 14 августа 2018 года
Перевод: А. Кривошей
Дата перевода: февраль 2019 г.
В этом руководстве описывается, как ограничить загрузку процессора в Ubuntu. Я буду использовать для этой цели утилиту cpulimit. Cpulimit - это утилита, которая ограничивает загрузку ЦП конкретным процессом (задается в процентах, а не во времени ЦП). Это особенно полезно при выполнении пакетных заданий, когда вы не хотите, чтобы они забирали слишком много циклов ЦП. Целью cpulimit является ограничение использования процессора конкретным процессом. Она не изменяет значение nice или другие параметры приоритета планирования, а упраляет реальным использованием процессора. Кроме того, она может динамически и быстро адаптироваться к общей загрузке системы.
Контроль используемого количества циклов ЦП осуществляется путем отправки сигналов SIGSTOP и SIGCONT POSIX процессам. Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП.
№ 20: Gnome System Monitor – графическое средство выдачи информации о системе в режиме реального времени
Приложение System Monitor позволит вам получить базовую информацию о системе, а также следить за системными процессами, использованием системных ресурсов и системными файлами. Вы также можете использовать System Monitor для изменения характеристик своей системы. Хотя это не такое мощное приложение, как System Guard для KDE, оно предоставляет основную информацию, которая может быть полезной для пользователей – новичков:
- Отображается различная основная информация об аппаратном и программном обеспечении компьютера
- Версия ядра Linux
- Версия GNOME
- Аппаратные средства
- Установленная оперативная память
- Процессоры и их скорость
- Статус системы
- Имеющееся в наличии дисковое пространство
- Процессы
- Память и пространство своппинга
- Использование сети
- Файловые системы
- Список всех смонтированных файловых систем вместе с основной информацией о каждой из них
Рис.6: Приложение Gnome System Monitor
№ 7: : iostat – средняя загрузка процессора, активность дисков
Команда iostat выдает статистику использования процессора, а также статистику ввода/вывода для устройств, разделов и сетевых файловых систем (NFS).
Пример вывода данных:
2. Установка CPULimit
Для начала нам нужно установить cpulimit следующим образом:
Бонус: Дополнительные инструментальные средства
И еще несколько инструментальных средств:
Не упустил ли я чего-либо? Пожалуйста, добавьте в комментариях свои любимые средства мониторинга системы.
Настроить выдачу данных в формате, определенном пользователем
№ 2: vmstat – активность системы, информация о системе и аппаратных ресурсах
Команда vmstat выдает информационный отчет о активности процессов, памяти, свопинга, поблочного ввода/вывода, прерываний и процессора.
Пример вывода данных:
Выдача статистики использования памяти
Получение данных об активности / неактивности страниц памяти
Команда w выдает информацию о том, какие пользователи сейчас находятся в системе и какие процессы запущены от их имени.
Пример вывода данных:
№ 9: mpstat – использование мультипроцессора
Команда mpstat выводит данные об активности каждого имеющегося в наличие процессора, процессор 0 будет первым. Команда mpstat -P ALL выводит данные о среднем использовании ресурсов для каждого из процессоров:
Пример вывода данных:
№ 16: Директорий /Proc – различная статистика ядра
В директории /proc имеется подробная информация о различных устройствах и ядре Linux. Подробности смотрите в документации Linux kernel /proc . Самые общие примеры:
№13: iptraf – сетевая статистика в режиме реального времени
Команда iptraf запускает цветной интерактивный монитор, следящий за сетевыми IP. Этот монитор сетевых IP базируется на команде ncurses, которая выдает различную сетевую статистику, в том числе информацию о TCP, ведет подсчет UDP, выдает сведения о ICMP и OSPF, информацию о нагрузке на Ethernet, статистику по узлам сети, данные об ошибках контрольных сумм пакетов IP и многое другое. Монитор предоставляет в удобном для чтения виде следующие данные:
- Статистику сетевого трафика по TCP подключениям
- Статистику IP трафика по сетевым интерфейсам
- Статистику сетевого трафика по протоколам
- Статистику сетевого трафика по портам TCP/UDP и по размерам пакетов
- Статистику сетевого трафика по адресам протоколов второго уровня
Рис.02; Общая статистика по интерфейсам: статистика трафика IP по сетевым интерфейсам
Рис.03: Статистика сетевого трафика по TCP подключениям
Читайте также: