как узнать uptime linux

Посмотреть время работы компьютера после перезагрузки

Иногда хочется (или необходимо) увидеть, сколько компьютер работал времени без перезагрузки. В данной инструкции приведены примеры команд для Windows и Linux.

Для определения возраста компьютера или ноутбука, не стоит полагаться на 100% на данную информацию — система может быть переустановлена, а вместе с этим, сбивается общее время работы системы.

Windows

Открываем командную строку.

Для этого нажимаем комбинацию клавиш Win + R и в появившемся окне вводим cmd:

как узнать uptime linux. windows uptime 01. как узнать uptime linux фото. как узнать uptime linux-windows uptime 01. картинка как узнать uptime linux. картинка windows uptime 01.

И нажимаем OK. Откроется командная строка.

1. Команда net stats

Введем команду net stats srv

как узнать uptime linux. windows uptime 02. как узнать uptime linux фото. как узнать uptime linux-windows uptime 02. картинка как узнать uptime linux. картинка windows uptime 02.

Это и будет, так называемый, uptime windows или время работы с момента последнего запуска.

2. Команда systeminfo

Для более детальной информации также можно ввести следующую команду:

Она покажет детальную информацию, в том числе общее (суммарное) время работы компьютера:

как узнать uptime linux. windows uptime 03. как узнать uptime linux фото. как узнать uptime linux-windows uptime 03. картинка как узнать uptime linux. картинка windows uptime 03.

* где дата установки — дата и время, когда система была запущена в первые; время загрузки системы — дата и время, когда система была перезагружена последний раз.

Время выключения Windows

Открываем журнал Windows (команда eventvwr) и находим последнее событие с кодом 6006:

как узнать uptime linux. windows uptime 04. как узнать uptime linux фото. как узнать uptime linux-windows uptime 04. картинка как узнать uptime linux. картинка windows uptime 04.

как узнать uptime linux. windows uptime 05. как узнать uptime linux фото. как узнать uptime linux-windows uptime 05. картинка как узнать uptime linux. картинка windows uptime 05.

Linux

Любая из приведенных ниже команд позволит посмотреть общее время работы Linux:

1. Uptime

13:28:16 up 27 days, 2:46, 1 user, load average: 0.00, 0.02, 0.05

* где 13:28:16 — текущее время; up 27 days — дней с последней перезагрузки.

* по сути, ответ тот же, что и после ввода команды uptime, с подробными сведениями подключения пользователей.

3. Top

Команда top предназначена для отображения состояния загруженности Linux, но она также показывает, сколько компьютер работал после перезагрузки:

* в данном случае, нас интересует верхняя строчка, которая нам напоминает вывод, все той же, uptime.

Источник

linux-notes.org

как узнать uptime linux. Kak uznat uptime v Linux i. как узнать uptime linux фото. как узнать uptime linux-Kak uznat uptime v Linux i. картинка как узнать uptime linux. картинка Kak uznat uptime v Linux i.

Как узнать uptime в Linux/Unix

Нужно проверить uptime сервера? Нужно узнать когда был последний reboot ( перезагрузка)? Не знаете как? Я расскажу вам как можно проверить uptime вашей ОС (Linux\Unix), приведу в своей статье «Как узнать uptime в Linux/Unix» 3 способа как это можно сделать.

1. Команда top.

Top — программа для слежения за активностью процессора в реальном времени. Он отображает список наиболее ресурсоемких задач в системе и может обеспечить интерактивный интерфейс для управления процессами. Программа может сортировать задачи по загрузке процессора, использование памяти и времени автономной работы. Так же есть улучшенная версия под названием htop, которая дает возможность пролистывать и смотреть каждый процесс. Так же данная программа может показать время последней перезагрузки (uptime), чтобы посмотреть это, выполните:

как узнать uptime linux. lazy placeholder. как узнать uptime linux фото. как узнать uptime linux-lazy placeholder. картинка как узнать uptime linux. картинка lazy placeholder.

посмотреть uptime с помощью утилиты top

2. Команда w.

Команда (утилита) w — отображает информацию о пользователях которые в настоящее время есть на машине, и их процессов. Внутри заголовка, показывается текущее время, как долго система работает, сколько пользователей в настоящее время вошли в систему, и среднюю нагрузку системы за последние 1, 5 и 15 минут

как узнать uptime linux. lazy placeholder. как узнать uptime linux фото. как узнать uptime linux-lazy placeholder. картинка как узнать uptime linux. картинка lazy placeholder.

посмотреть uptime с помощью утилиты w

3. Команда uptime.

uptime дает одно строчную информацию на экран. Он показывает текущее время, как долго система работает уже, сколько пользователей в настоящее время залогинились в системе и среднюю нагрузку системы за последние 1, 5 и 15 минут.

как узнать uptime linux. lazy placeholder. как узнать uptime linux фото. как узнать uptime linux-lazy placeholder. картинка как узнать uptime linux. картинка lazy placeholder.

посмотреть uptime с помощью утилиты uptime

Моя тема «Как узнать uptime в Linux/Unix» завершена. Спасибо за посещение моего сайта http://linux-notes.org

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Команда Uptime в Linux

как узнать uptime linux. Komanda Uptime v Linux. как узнать uptime linux фото. как узнать uptime linux-Komanda Uptime v Linux. картинка как узнать uptime linux. картинка Komanda Uptime v Linux.

Как следует из названия, основная цель команды uptime – показать, как долго работает система. Также будет отображаться текущее время, количество зарегистрированных пользователей и средняя загрузка системы.

Как использовать команду Uptime

Синтаксис для команды uptime следующий:

Чтобы отобразить время работы системы, вызовите команду без каких-либо опций:

Вывод будет выглядеть примерно так:

Средняя нагрузка на Linux может немного сбивать с толку. В отличие от других операционных систем, которые показывают средние значения загрузки процессора, Linux показывает средние значения загрузки системы.

Средняя загрузка системы измеряет количество заданий, которые в данный момент выполняются или ожидают дискового ввода-вывода. В основном это говорит о том, насколько занята ваша система в течение заданного интервала.

Если средние значения нагрузки равны 0,0, то система в основном простаивает. Если среднее значение нагрузки за последние 1 минуту выше, чем среднее значение за 5 или 15 минут, то нагрузка увеличивается, в противном случае нагрузка уменьшается. Средняя нагрузка увеличивается из-за более высокой загрузки процессора, нагрузки на диск.

Параметры команды Uptime

Команда uptime принимает только несколько опций, которые используются редко.

Вывод покажет только, как долго работает система:

Другие два варианта:

Заключение

Команда uptime легко запоминается и дает вам информацию о текущем времени, онлайн-пользователях, длительности работы вашей системы и средней загрузке системы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Мониторинг использования CPU на сервере Linux

Объем памяти, размер кеша, скорость чтения и записи на диск, скорость и доступность вычислительной мощности – это ключевые элементы, влияющие на производительность любой инфраструктуры.

Данное руководство ознакомит с базовыми понятиями мониторинга CPU. Вы узнаете, как использовать утилиты uptime и top, чтобы узнать о нагрузке и использовании ЦП.

Требования

Основные понятия

Прежде чем приступить к работе с утилитами, нужно понять, как измеряется использование ЦП и к каким результатам нужно стремиться.

Загрузка и использование ЦП

Загрузка (CPU Load) и использование процессора (CPU Utilization) – два разных способа взглянуть на использование вычислительной мощности компьютера.

Чтобы оценить основное различие между ними, попробуйте представить, что процессоры – это кассиры в продуктовом магазине, а задачи – это клиенты, которых нужно обслужить. Загрузка процессора – это, по сути, одна очередь, в которой клиенты ждут, пока освободиться один из кассиров. Нагрузка – это в данном случае количество клиентов в очереди, включая тех, что уже на кассе. Чем длиннее очередь, тем дольше ждать.

Использование ЦП оценивает исключительно занятость кассиров и не знает, сколько клиентов в очереди.

Если говорить конкретнее, задачи создают очередь за ресурсами процессоров. Когда подходит очередь той или иной задачи, она должна получить определенное количество времени обработки. Если задача была выполнена, он снимается; в противном случае она возвращается в конец очереди. После этого обрабатывается следующая задача в очереди.

Загрузка ЦП – это длина очереди запланированных задач, включая те, что находятся в обработке. Задачи могут переключаться в пределах миллисекунд, поэтому один снапшот загрузки не так полезен, как среднее значение из нескольких снапшотов, взятых за определенный период времени. Потому загрузка ЦП часто представляется как среднее значение.

Загрузка процессора отображает спрос на процессорное время. Высокий спрос может привести к сбоям и ухудшению производительности.

Использование ЦП сообщает, насколько загружены процессоры, не беря во внимание количество ожидающих задач. Мониторинг использования ЦП может отображать тенденции во времени, выделять пики использования процессора и выявлять нежелательную активность на сервере.

Ненормированные и нормированные значения

В одной процессорной системе общая емкость всегда равна 1. В многопроцессорной системе данные могут отображаться двумя разными способами. Суммарная емкость всех процессоров рассчитывается как 100% независимо от количества процессоров, такое значение считается нормированным. Другой вариант предлагает считать каждый процессор как единицу, так что 2-процессорная система в полном объеме имеет емкость 200%, 4-процессорная система в полном объеме имеет мощность 400% и т. д.

Чтобы правильно интерпретировать загрузку или использование CPU, нужно знать количество процессоров на сервере.

Отображение информации о ЦП

Чтобы узнать количество процессоров, можно использовать команду nproc с опцией –all. Без этого флага команда отобразит количество обрабатывающих блоков, доступных для текущего процесса, что будет меньше общего количества процессоров.

В большинстве современных дистрибутивов Linux также можно использовать команду lscpu, которая отображает не только количество процессоров, но и архитектуру, имя модели, скорость и многое другое:

lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Model name: Intel(R) Xeon(R) CPU E5-2650L v3 @ 1.80GHz
Stepping: 2
CPU MHz: 1797.917
BogoMIPS: 3595.83
Virtualization: VT-x
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 30720K
NUMA node0 CPU(s): 0,1
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm vnmi ept fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat

Знание точного количества процессоров важно для интерпретации результатов тех или иных утилит.

Оптимальные значения загрузки и использования ЦП

Оптимальное значение использования ЦП зависит от того, какую работу должен выполнять сервер. Стабильно высокое использование процессора негативно влияет на отзывчивость системы. Часто приложениям и пакетным заданиям с интенсивными вычислениями необходим весь или почти весь объем ЦП. Однако, если система должна обслуживать веб-страницы или поддерживать интерактивные сеансы сервисов (например, SSH), тогда может понадобиться свободная вычислительная мощность.

Как и во многих других аспектах производительности, ключом к оптимизации ресурсов является изучение потребностей сервисов системы и мониторинг непредвиденных изменений.

Мониторинг ЦП

Существует множество инструментов для получения данных о состоянии ЦП системы. Мы рассмотрим две команды: uptime и top. Обе утилиты являются частью стандартной установки большинства популярных дистрибутивов Linux и обычно используются для исследования загрузки и использования ЦП.

Примечание: Следующие примеры выполнены на 2-ядерном сервере.

Утилита uptime

Команда uptime позволяет отследить загрузку процессора. Она может быть полезна, если система медленно реагирует на интерактивные запросы (вероятно, ей не хватает системных ресурсов).

Утилита uptime сообщает следующие данные:

uptime
14:08:15 up 22:54, 2 users, load average: 2.00, 1.37, 0.63

В этом примере команда была запущена в 14:08 на сервере, который работал почти 23 часа. При запуске uptime подключились два пользователя. Этот сервер имеет 2 процессора. За минуту до запуска команды средняя загрузка процессора была 2,00, что означает, что в течение этой минуты процессоры использовали в среднем две задачи, а ожидающих задач не было. Среднее значение загрузки з а5 минут указывает на то, что в течение некоторого интервала времени один из процессоров бездействовал около 60% времени. Среднее за 15 минут значение указывает на то, что было доступно больше времени обработки. Вместе эти три значения показывают увеличение загрузки за последние пятнадцать минут.

Утилита uptime сообщает полезные средние значения загрузки ЦП, но для того, чтобы получить более подробную информацию, нужно использовать top.

Утилита top

Как и uptime, утилита top доступна как в Linux, так и в Unix-системах, но помимо отображения средних значений нагрузки для заданных временных интервалов она предоставляет информацию о потреблении ЦП в реальном времени, а также другие полезные показатели производительности. Если uptime запускается и сразу завершает работу, top работает на переднем плане и регулярно обновляется.

Заглавный блок

Первые пять строк содержат сводную информацию о процессах на сервере:

Первая строка почти идентична выводу утилиты uptime. Здесь показаны средние значения за одну, пять и пятнадцать минут. Эта строка отличается от вывода uptime только тем, что вначале указывается утилита top и время последнего обновления данных.

Вторая строка предоставляет краткий обзор состояния задач: общее количество процессов, количество запущенных, спящих, остановленных и зависших процессов.

Третья строка говорит об использовании ЦП. Эти цифры нормируются и отображаются в процентах (без символа %), так что все значения в этой строке должны составлять до 100% независимо от количества процессоров.

Четвертая и пятая строки сообщают об использовании памяти и swap соответственно.

После заглавного блока следует таблица с информацией о каждом отдельном процессе, которую мы вскоре рассмотрим.

Давайте рассмотрим подробнее все компоненты строки CPU.

Таблица процессов

Все процессы, выполняемые на сервере, независимо от их состояния перечисляются под заглавным блоком вывода. Ниже приведены первые шесть строк таблицы процессов из предыдущего примера. По умолчанию таблица процессов сортируется по% CPU, поэтому в начале находятся процессы, которые потребляют больше CPU.

Столбец %CPU представлен как процентное значение, но он не нормируется, поэтому в этой двухъядерной системе общее количество всех значений в таблице процессов должно составлять до 200%, если оба процессора полностью используются.

Примечание: Если вы предпочитаете работать с нормированными значениями, вы можете нажать SHIFT + I, и отображение переключится с режима Irix в режим Solaris. Этот режим выводит ту же информацию, которая усредняется по всему количеству процессоров, так что используемая сумма не будет превышать 100%. Перейдя к режиму Solaris, вы получите краткое сообщение о том, что режим Irix выключен.

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10081 8host 20 0 9528 96 0 R 50.0 0.0 0:49.18 stress
10082 8host 20 0 9528 96 0 R 50.0 0.0 0:49.08 stress
1439 root 20 0 223832 27012 14048 S 0.2 0.7 0:11.07 snapd
1 root 20 0 39832 5868 4020 S 0.0 0.1 0:07.31 systemd

Заключение

Теперь вы умеете работать с утилитами uptime и top и интерпретировать их вывод.

Источник

htop и многое другое на пальцах

как узнать uptime linux. image loader. как узнать uptime linux фото. как узнать uptime linux-image loader. картинка как узнать uptime linux. картинка image loader.

На протяжении долгого времени я не до конца понимал htop. Я думал, что средняя загрузка [load average] в 1.0 означает, что процессор загружен на 50%, но это не совсем так. Да и потом, почему именно 1.0?

Затем я решил во всём разобраться и написать об этом. Говорят, что лучший способ научиться новому — попытаться это объяснить.

htop на Ubuntu Server 16.04 x64

Ниже скриншот htop, который я буду рассматривать в статье.

как узнать uptime linux. image loader. как узнать uptime linux фото. как узнать uptime linux-image loader. картинка как узнать uptime linux. картинка image loader.

Uptime

Uptime показывает время непрерывной работы системы. Это можно узнать и командой uptime.

Где же программа uptime это берёт? Она считывает информацию из файла /proc/uptime.

Первое число — количество секунд работы системы. Второе же показывает сколько секунд система находилась в бездействии. Стоит отметить, что на системах с несколькими процессорами, второй показатель может оказаться больше, чем первый, так как это сумма по процессорам.

Как я об этом узнал? Я посмотрел какие файлы открывает uptime при запуске. Для этого, можно воспользоваться утилитой strace.

Будет много вывода, лучше сделать grep для поиска системного вызова open. Но это не совсем сработает, т.к. по умолчанию он выводит в стандартный поток ошибок (stderr). Можно перенаправить stderr в стандартный поток с помощью 2>&1.

Если можно взять это прямо из файла, то зачем нужна утилита uptime? Дело в том, что uptime форматирует вывод в читаемом виде, тогда как секунды в файле удобно использовать при написании собственных скриптов и программ.

Load average

Помимо времени непрерывной работы, uptime показывает и среднюю загрузку системы, они отображены как 3 числа.

А взяты они из файла /proc/loadavg. Если еще раз посмотреть на вывод strace, то можно заметить, что этот файл тоже был открыт.

Первые 3 числа измеряют среднюю загрузку системы за последние 1, 5 и 15 минут. 4-ый параметр это количество активных процессов и их общее число. Последнее число это ID последнего использованного процесса.

Когда запускается процесс, ему присваивается ID. Как правило, они идут в возрастающем порядке, за исключением случаев, когда число исчерпалось и системе приходится начинать отсчёт заново. ID 1 присваивается процессу /sbin/init, который запускается при старте.

Взглянем ещё раз на /proc/loadavg и попробуем запустить команду sleep в фоновом режиме. При запуске в фоновом режиме, можно увидеть ID процесса.

Таким образом, 1/123 означает, что 1 процесс выполняется или готов к выполнению, а всего их 123.

Когда при запуске htop, вы видите, что выполняется только один процесс, это сам процесс htop.

Если запустить sleep 30 и открыть htop, то число выполняющихся процессов всё равно будет 1. Это потому, что процесс sleep не выполняется, а «спит», т.е. находится в состоянии покоя, иными словами ждёт определённого события. Выполняющийся или активный процесс, это процесс который на данный момент обрабатывается в процессоре (CPU), либо ждёт своей очереди в процессоре.

Попробуйте запустить cat /dev/urandom > /dev/null, где генерируемые случайные байты записываются в особый файл, считывание из которого невозможно. Тогда вы увидите, что выполняющихся процессов теперь уже 2.

Так, активных процессов ровно 2 (генератор случайных чисел и утилита cat, которая читает файл /proc/loadavg), еще можно заметить что средняя загрузка возросла.

load average это средняя загрузка системы на протяжении определённого периода времени.

Число загрузки считается как сумма количества процессов, которые запущены (выполняются или находятся в ожидании запуска) и непрерываемых процессов (о видах процессов будет рассказано ниже). Т.е. это просто число процессов.

А средняя загрузка получается просто усреднённое значение за 1, 5 и 15 минут, так?

Оказывается, не всё так просто.

Говоря математическим языком, все три значения усредняют среднюю загрузку за всё время работы системы. Они устаревают экспоненциально, но с разной скоростью. Таким образом, средняя загрузка за 1 минуту это сумма 63% загрузки за последнюю минуту + 37% загрузки с момента запуска без учёта последней минуты. То же соотношение верно и для 5, 15 минут. Поэтому не совсем верно, что средняя загрузка за последнюю минуту включает активность только за последнюю минуту, но бОльшей частью за последнюю минуту.

Вернёмся к генератору случайных чисел.

Хотя это не совсем правильно, но вот как я упростил для понимания показатель средней загрузки.

В данном случае генератор использует процессор, средняя загрузка за последнюю минуту 1.00, другими словами в среднем 1 выполняющийся процесс.

В моей системе это означает что процессор загружен на 100%, т.к. процессор один, а выполнять он может только один процесс за раз.

Если бы процессоров было 2, то загрузка соответственно была бы 50%, т.к. можно было бы одновременно выполнять 2 процесса. Максимальная средняя загрузка (100% использования CPU) системы с двумя процессорами составляет 2.00.

Количество процессоров в системе можно узнать в левом верхнем углу htop или при помощи nproc.

Процессы

В правом верхнем углу, htop показывает общее количество процессов и сколько из них активны. Но почему там написано задания [Tasks], а не процессы?

Задание это синоним процесса. В ядре Linux процессы это и есть задания. htop использует термин задания, возможно, потому, что это название короче и экономит немного места.
В htop можно увидеть и потоки [threads]. Для переключения этой опции нужно использовать комбинацию Shift+H. Если отображается что то вроде Tasks: 23, 10 thr, то это значит они видимы.

Отображение потоков выполнения ядра [kernel threads] можно включить комбинацией Shift+K, и тогда задания будут выглядеть как Tasks: 23, 40 kthr.

ID процесса / PID

При каждом запуске процесса, ему присваивается идентификатор (ID), сокращенно PID.

Если запускать программу в фоновом режиме (&) из bash, то номер задачи[job] выводится в квадратных скобках, а рядом с ним PID процесса.

Ещё один способ, это использовать переменную $! в bash, которая хранит PID последнего процесса, запущенного в фоне.

ID процесса очень полезна. С помощью него можно узнать подробности процесса и управлять им.

Существует псевдо файловая система procfs, с помощью которой программы могут получить информацию от ядра системы путём чтения файлов. Чаще всего она монтируется в /proc/ и для пользователя выглядит как обычный каталог, который можно смотреть командами, такими как ls и cd.

Вся информация о процессе находится в /proc/ /.
$ ls /proc/12503

Например в /proc/ /cmdline содержится команда при помощи которой процесс запустился.

Эмм. не совсем так. Разделителем тут служит байт \0,

который можно заменить пробелом, либо переводом строки

В каталоге процесса могут быть и ссылки! Для примера, cwd ссылается на текущий рабочий каталог, а exe на запущенный исполняемый файл.

Дерево процессов

Когда запускается новый процесс, процесс который его запускает принято называть родительским или просто родителем. Таким образом новый процесс это дочерний процесс родительского. Эти отношения образуют структуру в виде дерева.

Если нажать F5 в htop, то можно увидеть иерархию процессов.

Тот же эффект и от флага f команды ps.

Если вы когда нибудь задумывались, почему bash или sshd являются родительскими для некоторых процессов, то вот почему.

Ниже я написал, что происходит, если вы, к примеру, вызовите date из консоли bash.

Я предпочитаю использовать древовидную структуру в htop когда хочется увидеть все потоки.

Владелец процесса

У каждого процесса есть владелец — пользователь. У пользователей, в свою очередь, существуют численные ID.

Можно воспользоваться командой id, чтобы узнать имя этого пользователя.

Как выяснилось, id берёт эту информацию из файлов /etc/passwd и /etc/group.

Это обычные текстовые файлы, в которых ID привязаны к именам пользователей.

passwd? Но где пароли? А они на самом деле в /etc/shadow.

Если вы запустите программу, то она запустится от вашего имени, даже если вы не являетесь её владельцем. Если же вам нужно запустить её как root, то нужно использовать sudo.

Если не хочется каждый раз вводить пароль администратора при запуске программ, то можно отключить эту функцию, добавив своё имя пользователя в файл /etc/sudoers.

Да, точно, это можно сделать только с привилегиями root.

Тут мы пытаемся вызвать echo от имени администратора, но при этом пишем в файл /etc/sudoers всё так же от нашего имени.

Как правило, есть 2 выхода из данной ситуации:

Допустим, вы захотели поменять свой пароль. Команда passwd вам в помощь. Она сохранит пароль в файле /etc/shadow, который мы видели выше.

Этот файл доступен для записи только для root:

Как же это возможно, что программа запускаемая от имени пользователя может записывать в защищённый файл?

Я уже говорил, что при вызове, программа запускается от имени пользователя, запускающего её, даже если она принадлежит другому пользователю.

Оказывается, это поведение можно изменить правками разрешения файла. Давайте посмотрим.

Обратите внимание на символ s. Она была добавлена при помощи sudo chmod u+s /usr/bin/passwd. И означает, что исполняемый файл будет всегда запускаться от имени владельца, в данном случае это root.

Так же это можно осуществить и для групп (g+s).

Состояния процесса

Дальше, мы будем разбираться со столбцом состояния процессов в htop, в котором, на примере, находятся символы S.

Возможные значения состояния:

Заметьте, что при запуске ps, он может ещё показывать подсостояния как Ss, R+, Ss+ и т.д.

R — Запущенные или в очереди

Процессы в этом состоянии либо запущены, либо находятся в очереди для запуска.

Когда вы компилируете код, то на выходе получаете исполняемый файл в виде инструкций для процессора. При запуске, этот файл помещается в память, где процессор выполняет эти инструкции, проще говоря занимается вычислениями.

S — Прерываемый сон

При этом состоянии инструкции программы не исполняются в процессоре, проще говоря спят. Процесс ждёт события или какого нибудь условия для продолжения. После того, как событие произошло, состояние меняется на запущенное.

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

Так это прерываемый сон, как же его можно прервать? С помощью сигнала.

Послать сигнал с помощью htop можно нажав клавишу F9 и выбрав нужный вид сигнала в меню.

Передача сигнала, так же известна как команда kill, потому что это на самом деле системный вызов, который может послать сигнал процессу. Существует одноимённая программа /bin/kill, которая может исполнить системномный вызов из пользовательского окружения и по умолчанию посылает сигнал TERM, который уничтожает процесс, убивает его.

Сигнал это всего лишь число. Числа сложно запомнить, поэтому их назвали именами. Их имена обычно пишут заглавными буквами и могут быть с префиксом SIG.

Часто используемые сигналы, это: INT, KILL, STOP, CONT, HUP.

Попробуем прервать спящий процесс, послав ему сигнал INT, он же SIGINT, просто 2, или сигнал прерывания с терминала.

Этот же сигнал посылается, если нажать комбинацию CTRL+C. bash пошлёт сигнал SIGINT процессу на переднем плане, точно так же, как мы это сделали вручную.

Кстати, в bash команда kill встроена, хотя во многих системах есть программа /bin/kill. Почему? Чтобы можно было «убить» процесс даже если превышен лимит на количество создаваемых процессов.

Следующие команды идентичны:

При написании программы, можно эти сигналы ловить и создавать функции, которые будут запускаться когда соответствующий сигнал получен. Например, можно очищать память или же аккуратно завершить работу. Поэтому отправка сигнала, такого как сигнал прерывания с терминала, не означает что процесс будет прекращён.

Возможно, вы встречали такое исключение при запуске скриптов на Python:

Но существует сигнал способный остановить процесс, не дав ему возможности на него ответить. Это сигнал KILL.

D — непрерываемый сон

В отличии от прерываемого сна, процессы в таком состоянии невозможно остановить с помощью сигналов. Поэтому многие не любят это состояние.

При этом состоянии процесс ожидает и не может быть прерван, например, если событие продолжения вот вот наступит, такое как чтение/запись на диск. Как правило, это происходит за доли секунды.

Непрерываемые процессы обычно находятся в ожидании IO после page fault. Процесс не может быть прерван в это время сигналом, потому что не сможет их обработать. Если бы он мог, то снова возник бы page fault и всё бы осталось как есть.

Другими словами, это может случиться, если, например, использовать протокол сетевого доступа NFS и требуется время для чтения/записи с/на него.

По своему опыту могу сказать, что такое случается когда процесс часто подкачивается, т.е. для него недостаточно свободной памяти.

Попробуем вызвать это состояние.

8.8.8.8 это публичный DNS от Google. Там нет NFS, но это нас не остановит.

Как же узнать, что заставляет процесс оказаться в таком состоянии? strace!

Вызовим strace для команды ps выше.

И тут мы увидим, что системный вызов mount блокирует процесс.

Z — Зомби процесс

Когда процесс заканчивает свою работу с помощью exit и у неё остаются дочерние процессы, дочерние процессы становятся в состоянии зомби.

Устанавливаем компилятор С, GNU C Compiler (GCC).

Скомпилируем и запустим программу

Посмотрим на иерархию процессов

У нас есть зомби! Когда родительский процесс завершается, зомби исчезает.

Если заменить sleep(20) инструкцией while (true), зомби исчезнет сразу.

При вызове exit, освобождается вся занимаемая память и ресурсы, чтобы они были доступны другим. Почему же нужны тогда процессы зомби?

У родительских процессов есть возможность узнать код завершения работы дочерних процессов (в обработчике сигналов) с помощью системного вызова wait. Если дочерний процесс спит, то родительский сперва подождёт.

Почему же тогда принудительно не разбудить процесс и завершить его? По той же причине, по которой вы не избавитесь от своего ребёнка, если он вас не слушается. Всё может закончится плохо.

T — Остановлен сигналом управления заданиями

Я открыл два терминала и могу посмотреть на свои процессы командой ps u.

Ниже я опущу упоминание процессов -bash и ps.

Теперь в одном из терминалов запустим cat /dev/urandom > /dev/nul. Его состояние будет R+, из чего следует что он активен.

Нажмём CTRL+Z, чтобы остановить процесс.

Сейчас, он в состоянии T. Если нужно продолжить процесс, то можно вызвать fg в первом терминале.

Есть и другой способ останова процессов, для этого нужно послать им сигнал STOP с помощью kill, а для продолжения, соответственно, сигнал CONT.

t — Остановлен отладчиком

Для начала установим отладчик GNU Debugger (gdb)

Запустим программу для прослушивания порта 1234.

Он находится в состоянии сна, потому как ждёт входящих сообщений.

Запустим отладчик и привяжем его к процессу с PID 3905.

Теперь процесс будет прослеживаться [trace] в отладчике и его состояние изменится на t.

Время обработки процесса

Linux — многозадачная операционная система, это означает что даже если процессор один, то можно одновременно запускать на нём несколько заданий. Например, можно подключиться к удалённому серверу через SSH и посмотреть на вывод htop, а при этом сам сервер будет показывать ваш блог читателям в интернете.

Как же возможно, что единственный процессор может одновременно выполнять несколько заданий?

Каждый процесс выполняется определённый интервал времени, при котором другие приостановлены, затем выполняется следующий процесс и т.д.

Как правило, интервал времени выполнения составляет миллисекунды, поэтому пользователь этого и не заметит, если, конечно же, система не нагружена.

Любезность и приоритет процессов

Когда количество заданий превышает количество процессоров, но выполнить их все необходимо, нужно каким то образом определить порядок их выполнения. За это отвечает планировщик заданий.

Планировщик в ядре Linux решает какой процесс выбрать из очереди на запуск и это зависит от результата алгоритма, заложенного в ядре.

Пользователь, как правило, не может прямо влиять на планирование, но может подсказать какой из процессов ему особо важен и планировщик, возможно, прислушается к нему.

Из того, что я прочёл на StackOverflow и других сайтах, следует что увеличение любезности процесса на 1 ведёт к уступке 10% времени работы процессора.

Приоритет (PRI) же в свою очередь это параметр приоритета в пространстве ядра. Приоритет варьируется от 0 до 139. Приоритеты от 0 до 99 зарезервированы для процессов реального времени, а выше, т.е от 100 до 139, для пользовательских.

Можно изменить любезность процесса, и тогда, возможно, ядро примет это к сведению, но сам приоритет менять нельзя.

Соотношение любезности и приоритета следующее: PR = 20 + NI.
Таким образом область определения PR = 20 + (-20 to +19) лежит в отрезке от 100 до 139.

Можно установить любезность процесса непосредственно перед запуском.

А менять любезность во время выполнения можно с помощью renice.

Память — VIRT/RES/SHR/MEM

У процессов создаётся иллюзия, что память кроме них никто не использует. Такая иллюзия — результат работы виртуальной памяти.

Процессы не имеют прямого доступа к физической памяти. Для них выделяется участок виртуальной памяти, адреса в которой, проецируются ядром уже на адреса в физической памяти, либо на диск. Поэтому, иногда кажется, что процессы используют больше памяти, чем установлено в системе.

Я хочу сказать, что из-за этого не совсем легко понять сколько же именно памяти использует процесс. А что насчёт общих [shared] библиотек и памяти, выгруженной на диск? Но, к счастью, ядро и, в частности, htop позволяют извлечь некоторую информацию чтобы понять аппетит процесса по отношению к памяти.

VIRT/VSZ — Виртуальный образ

Общее количество памяти, занимаемая процессом. Оно включает в себя весь код, данные, общие библиотеки, страницы которые были перемещены на диск, а также страницы, которые проецировались ядром, но не были использованы.

Таким образом VIRT это всё, что используется процессом.

Если приложение запрашивает 1 Гб памяти, но использует при этом только 1 Мб, то память VIRT будет отображаться всё равно как 1 Гб. Даже если оно вызовет mmap для файла весом в 1 Гб и никогда им не воспользуется, то VIRT всё равно останется 1 Гб.

В большинстве случаев этот показатель бесполезен.

RES/RSS — Резидентная память

Память RSS [resident set size] это область, которая не выгружена на диск и находится в оперативной памяти.

RES, возможно, лучше отображает реальное использование памяти процессора чем VIRT, но нужно иметь ввиду:

SHR — Разделяемая память

Объём памяти, который может быть совместно использован другими процессами.

(прим. Этот раздел не дописан до конца, как только статья обновится, я опубликую обновления)

MEM% — Использование памяти

Процент использования физической памяти. Это RES, делённый на общий объём оперативной памяти.

Если, например, RES составляет 200М и в системе установлено 8 Гб памяти, то MEM% будет 200/8192*100 = 2.4%

Процессы

Я запустил виртуальную машину с Ubuntu Server в Digital Ocean. Какие же процессы запускаются при старте системы? Необходимы ли они?

Ниже приведён анализ процессов, которые запускаются на чистой версии машины с Ubuntu Server 16.04.1 LTS x64 в Digital Ocean.

/sbin/init

Эта программа координирует все остальные приложения при запуске и конфигурирует окружение пользователя. После запуска, она становится родителем или прародителем всех автоматически запускающихся процессов.

Да, он самый. Что произойдёт, если его остановить? Ничего.

/lib/systemd/systemd-journald

systemd-journald это системная служба, которая собирает и сохраняет логи. Она создаёт структурированные, проиндексированный журналы на основе информации, полученной с разных источников и управляет ими.

Одним из основных преимуществ journald является замена обычных текстовых файлов логов специально отформатированными структурированными сообщениями. Это позволяет администраторам эффективнее работать с журналами событий.

Если нужно найти событие, лучше использовать journalctl.

Демон lvmetad кэширует метаданные LVM, чтобы команды LVM получали доступ к метаданным без сканирования диска. Кэширование помогает избежать возможного вмешивания в работу других приложений и сэкономить время сканирования диска.

Но что такое LVM [Logical Volume Management] (Менеджер логических томов)? Можно считать, что LVM это динамические разделы, что подразумевает создание/изменение/удаление разделов, так называемых «логических томов» из командной строки на лету, без надобности перезагрузки системы.

Звучит так, что нужен он только если пользоваться LVM.

/lib/systemd/udevd

systemd-udevd следит за событиями uevents ядра. Для каждого события, systemd-udevd запускает соответствующую инструкцию на основе правил в udev.

udev это диспетчер устройств ядра Linux. Как преемник devfsd и hotplug, udev в основном работает с устройствами в каталоге /dev.

Я не уверен о его необходимости в виртуальной среде.

/lib/systemd/timesyncd

systemd-timesyncd это системная служба которая синхронизирует локальное время с удалённым сервером NTP.

Посмотрим на открытые порты системы:

Красота! В Ubuntu 14.04 это выглядело так:

atd запускает задания, назначенные в определённое время с помощью at.

В отличии от cron, который исполняет задания с периодичностью, at единовременно выполняет задание в определённое время.

Кстати, я ни разу не использовал его до этого момента.

/usr/lib/snapd/snapd

Snappy Ubuntu Core это новое исполнение Ubuntu с обновлёнными решениями — минимальный образ сервера с теми же библиотеками что и Ubuntu, но приложения предоставляются через более простой механизм.

Разработчики нескольких дистрибутивов Linux и компании призвали к сотрудничеству для создания универсального формата «snap» для пакетов Linux, чтобы один и тот же бинарный пакет успешно и безопасно работал на любом компьютере, сервере, облаке и устройстве с Linux.

Оказывается, это упрощенный пакет deb, где нужно прикреплять все зависимости. Я никогда не пользовался snappy для установки или создания приложений на серверах.

/usr/bin/dbus-daemon

D-Bus — система межпроцессного взаимодействия, которая позволяет приложениям в операционной системе общаться друг с другом.

Я так понимаю, что это нужно только для домашнего окружения, но зачем это серверу веб приложений?

Интересно, который сейчас час и синхронизируется ли время с NTP?

Упс, возможно, это стоило оставить.

/lib/systemd/systemd-logind

systemd-logind это системная служба, управляющая авторизациями в систему.

cron — демон для запуска заданий по расписанию (Vixie Cron)
-f — не демонизировать процесс.

С помощью cron можно запускать задания с периодичностью.

Но если нет, то перед удалением, его нужно остановить и отключить

Иначе при попытке удаления командой apt remove cron, он попытается установить postfix!

Похоже, что cron нужен сервер почты для рассылки.

Rsyslogd — утилита помогающая вести логи.

Другими словами, это то, что создаёт файлы в /var/log/, такие как /var/log/auth.log для сообщений о попытках аутентификации пользователя через SSH.

Файлы конфигурации тут /etc/rsyslog.d.

Можно настроить rsyslogd таким образом, что он будет отправлять файлы на удалённый сервер, создав тем самым централизованную систему логирования.

Командой logger можно сохранить сообщение в /var/log/syslog в фоновых скриптах, таких как автозагрузчики.

Да, но у нас уже есть systemd-journald. Нужен ли ещё и rsyslogd?

Rsyslog и Journal, это два приложения протоколирования в системе. У них есть несколько различающихся функций, которые более предпочтительны в той или иной ситуации. В большинстве случаев лучше сочетать возможности обоих, например, для создания структурированных сообщений и сохранения их в файлах. Интерфейс связи для кооперирования предоставляется модулями ввода и вывода Rsyslog и сокетом Journal.

И всё же? На всякий случай, я его оставлю.

/usr/sbin/acpid

acpid — демон для усовершенствованного интерфейса управления конфигурацией и питанием.

acpid нужен чтобы уведомлять пользовательские программы о событиях ACPI. По умолчанию, он запускается при старте системы в фоновом режиме.

ACPI это интерфейс с открытым стандартом, который используют операционные системы чтобы управлять аппаратными средствами, чтобы, например, отключать неиспользуемые девайсы для экономии энергии.

Но у меня виртуальная машина и я не собираюсь отключать устройства. Ради эксперимента я попробую удалить его.

Мне удалось успешно перезагрузить машину при помощи reboot, но после halt, Digital Ocean всё ещё думал, что машина включена и мне пришлось выключить её через веб интерфейс провайдера.

Поэтому, я бы оставил эту службу.

/usr/bin/lxcfs /var/lib/lxcfs/

Lxcfs это своего рода предохраняющая файловая система. В Ubuntu 15.04 она используется по двум причинам: первое, визуализировать некоторые файлы в /proc и второе, ограничить доступ к файловой системе cgroup хоста.

В итоге, можно создавать контейнеры привычным образом с lxc-create и у контейнера будут правильные значения uptime, top, и т.д. Файловая система позволяет контейнеру больше вести себя как отдельная система, нежели без данной файловой системы.

Если не используете контейнеры LXC, то можно удалить с помощью

/usr/lib/accountservice/accounts-daemon

AccountsService предоставляет интерфейсы D-Bus для манипуляций с учётными данными пользователей. Использование интерфейсов реализовано в командах usermod(8), useradd(8) и userdel(8).

Когда я удалил D-Bus, это сломало timedatectl. Мне интересно, что сломается, когда я удалю эту службу.

/sbin/mdadm

mdadm это утилита Linux для администрирования и мониторинга программных RAID устройств.

RAID — технология виртуализации данных, которая объединяет несколько дисков в один логический элемент. У RAID есть 2 основные задачи: 1) увеличения объёма логического диска: RAID 0. Если объединить 2 диска по 500 Гб, то получится 1 Тб. 2) Избежать потерю данных если один из дисков откажет: например, RAID 1, RAID 5, RAID 6, и RAID 10.

Можно удалить с помощью:

polkit это фреймворк авторизации. Я так понимаю, что это своего рода sudo и он позволяет непривилегированным пользователям выполнять определённые команды от имени администратора, например, перезагружать систему.

Но у меня сервер. Можно удалить с помощью

Мне до сих пор интересно, что из-за него сломается.

sshd (OpenSSH Daemon) демон для ssh. С -D он не будет переведен в режим работы демона. Это позволит легче осуществлять мониторинг sshd.

/sbin/iscsid

iscsid это системная служба, запускаемая в фоновом режиме, работающая с конфигурацией iSCSI и управляющая подключениями.

Я никогда не слышал о iSCSI:

iSCSI — протокол, который базируется на TCP/IP и разработан для установления взаимодействия и управления системами хранения данных, серверами и клиентами.

agetty — Linux альтернатива getty.

getty это Unix программа, работающая на системах с физическими или виртуальными терминалами. При подключении, она запрашивает имя пользователя и запускает программу login для аутентификации.

Это позволяет войти в систему при физическом доступе к нему. В Digital Ocean, например, можно открыть консоль из браузера и подключиться к этому терминалу (кажется через VNC).

Раньше, можно было наблюдать как несколько терминалов стартовали систему (настроенных в /etc/inittab), но сейчас всё делает systemd.

Ради эксперимента, я удалил файл конфигурации, который запускает и создаёт agetty:

При перезагрузке сервера, я по прежнему мог аутентифицироваться через SSH, но не через веб консоль провайдера.

sshd: root@pts/0 означает, что была установлена SSH сессия для пользователя root в псевдотерминале (pts) №0.

bash это командная оболочка, которую я использую. Но почему перед bash стоит дефис? Пользователь Reddit под ником hirnbrot объяснил:

htop — интерактивная программа для просмотра процессов, которая изображена на скриншоте.

После

Крайняя степень:

Я так же попробовал установить программное обеспечение по своей инструкции об автоматической установке WordPress на Ubuntu Server и всё работало.

Тут nginx, PHP7 и MySQL.

За кадром

Исходный код

Иногда не достаточно только strace. Другой способ посмотреть, что же программа делает это взглянуть на исходный код

Сперва, надо найти где начать искать.

Тут видно, что uptime находится в /usr/bin/uptime и что в Ubuntu это часть пакета procps.

Затем, можно зайти на packages.ubuntu.com и найти этот пакет.

Внизу есть ссылки на репозитории с исходными кодами:

Дескрипторы файлов и перенаправление

Если нужно перенаправить стандартный поток ошибок (stderr) в стандартный выходной поток, нужно это делать с 2&>1 или 2>&1?

Можно запомнить положение амперсанда пониманием того, что echo нечто > файл запишет нечто в файл файл. Это тоже самое, что echo нечто 1> файл. А вот echo нечто 2> файл запишет поток ошибок в файл.

Если написать echo нечто 2> 1, то поток ошибок перенаправится в файл, с именем 1.

Если поставить перед 1 амперсанд &, то это будет означать, что 1 это не имя файла, а идентификатор потока. Поэтому правильно echo нечто 2>&1.

Цвета в PuTTY

Если некоторые элементы сверху не отображаются при использовании PuTTY, то можно это исправить так.

Командная оболочка на C

Попробуем написать очень простую командную оболочку на C, которая бы использовала системные вызовы fork/exec/wait. Программа shell.c:

Вы когда нибудь интересовались почему при запуске программы в фоновом режиме вы видите, что она завершила свою работу, только после нажатия Enter?

Это потому, что оболочка ждёт ввода. Только после ввода команды, оболочка проверяет состояния процессов в фоне и выводит, что они завершились.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *