Перейти к содержимому

Как проверить аппаратный watchdog на centos 7

  • автор:

Watchdog в контроллерах Wiren Board

В контроллере есть два сторожевых таймера (англ. watchdog): программный и аппаратный, которые дополняют друг друга.

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

Поэтому при циклической перезагрузке контроллера, подключитесь к Debug Console и смотрите вывод — там будут подсказки, что происходит.

Аппаратный

Как устроен

Аппаратный таймер отсчитывает заданное время и по переполнению счётчика перезагружает контроллер сбросом питания.

Реализация аппаратного таймера зависит от версии контроллера:

  • Wiren Board 7.4 — сделан на Embedded Controller, считает до 60 секунд и сбрасывает питание контроллера.
  • Wiren Board 5, Wiren Board 6, Wiren Board 7 — сделан на специальной микросхеме-компараторе, считает до 15 секунд и сбрасывает питание контроллера.

В актуальном ПО контроллера таймер представлен устройством /dev/watchdog1 .

Отключение

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

  • Wiren Board 7.4 — нажать и держать кнопку кнопку B1 или запаять перемычку Watchdog OFF. Это блокирует работу Wiren Board Embedded Controller, поэтому вместе с отключением таймера у вас перестанут работать: входы Ax, кнопка включения и другие выполненные на нём функции.
  • Wiren Board 7.2…7.3 — запаять перемычку Watchdog OFF.
  • Wiren Board 6.9 нет простого способа аппаратно отключить сторожевой таймер.
  • Wiren Board 6.8 — соединить контакт WD с +5V.
  • Wiren Board 6.7 — соединить контакт WD с GND.
  • Wiren Board 6.3 – 6.6 и Wiren Board 5 соединить один из выводов разъема ON/OFF с GND.

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

На иллюстрациях ниже красными кружками показаны контакты, к которым нужно подключить контакт WD или контакт из разъёма ON/OFF. Фиолетовой стрелкой показан пример подключения.

    Способы отключения аппаратного таймера в разных версиях контроллера

Wiren Board 7.4. Зажать кнопку B1 или запаять перемычку Watchdog OFF

Wiren Board 7.2. Запаять перемычку Watchdog OFF

Wiren Board 6.8. Подключить WD к +5V

Wiren Board 6.7. Подключить WD к GND

Wiren Board 6. Подключить контакт ON/OFF к GND

Wiren Board 5. Подключить контакт ON/OFF к GND

Программный

Как устроен

В качестве программного таймера используется сервис watchdog, который каждые 30 секунд смотрит, запущен ли указанный в конфигурации сервис. Если какой-то из отслеживаемых сервисов упадёт — watchdog отправит всем процессам сигнал SIGTERM, что приведёт к перезагрузке ОС. В логе при этом появится строчка вида: systemd-journald[139]: Received SIGTERM from PID xxxx (watchdog) .

Ещё этот сервис сообщает о нормальной работе операционной системы аппаратному таймеру через сброс его счётчика. А пока сервис не запущен в первые секунды включения контроллера — счётчик аппаратного таймера сбрасывает загрузчик.

Конфигурирование

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

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

Например, добавим слежение за nginx:

  1. Подключитесь к контроллеру по SSH.
  2. Остановите сервис:

systemctl stop watchdog
nano /etc/watchdog.conf
# Test if vital daemons are running pidfile = /var/run/sshd.pid pidfile = /var/run/nginx.pid
systemctl start watchdog

Отключение

Если вы добавили слежение за каким-то сервисом, а он не запускается — контроллер будет загружать операционную систему, а потом перезагружаться.

Чтобы всё исправить, сразу после загрузки операционной системы остановите watchdog, на это у вас есть несколько секунд:

  1. Подключитесь к контроллеру через Debug Console.
  2. Если у вас контроллер Wiren Board 7.2 и старее — включите контроллер переключателем.
  3. Дождитесь загрузки операционной системы и приглашения login.
  4. Войдите в командную строку контроллера, для этого нажмите Enter и введите логин / пароль.
  5. Остановите сервис:

systemctl stop watchdog
systemctl start watchdog

Перезагрузки должны прекратиться.

Не выключается Linux

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

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

Почему не выключается компьютер Linux?

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

Есть несколько путей решения этой проблемы:

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

А теперь давайте рассмотрим пути решения проблемы.

Как исправить ошибку «не выключается Linux»

Чтобы понять, почему система не может выключиться, нам сначала необходимо посмотреть лог её выключения. И тут у нас тоже есть два пути: либо отключить заставку и выводить лог в реальном времени, либо записывать лог выключения с помощью journalctl.

1. Лог выключения в реальном времени

Первый способ не настолько информативный, но всё же может быть полезным. Для отключения заставки откройте /etc/default/grub и в строке GRUB_CMDLINE_LINUX_DEFAULT замените слова quiet splash на verbose:

Затем перезагрузите компьютер. Сначала вы будете видеть полный лог загрузки, а при выключении вы увидите полный лог выключения. Преимущество этого пути в том, что вы увидите, на какой команде загрузка зависает, и сможете понять, куда копать дальше. Например, часто бывает, что Linux не может выключиться из-за ошибки «a stop job is running for Session c2 of user», т.е. мы не можем завершить сессию пользователя. Ещё выключению могут препятствовать примонтированные удалённые файловые системы.

2. Лог выключения в journalctl

Утилита journalctl занимается обработкой логов в Linux, но есть одна проблема: она записывает журналы только из текущей сессии, при перезагрузке всё стирается. Но это можно исправить. Для этого окройте конфигурационный файл /etc/systemd/journald.conf и замените в нём значение строки Storage=auto на Storage=persistent:

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

sudo journalctl -b -1 -n300

Опция —b позволяет вывести лог загрузки, -1 говорит, что нужно брать не текущую загрузку, а предыдущую, а —n300 отображает только последние 300 строк. Здесь вы можете видеть, что по таймауту была завершена именно сессия session-c1. Мы можем отфильтровать сообщения только по ней:

sudo journalctl -b -1 -u session-c1.scope

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

3. Настройка таймаутов в systemd

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

sudo vi /etc/systemd/system.conf

Теперь система будет ждать только 5 секунд перед тем, как завершить проблемный процесс. Также на некоторых форумах рекомендуют установить сервис watchdog, чтобы он следил за правильностью работы системного таймера. Это тоже делается очень просто:

sudo apt install watchdog
sudo systemctl enable watchdog
sudo systemctl start watchdog

Выводы

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

30 инструментов мониторинга системы Linux, которые должен знать каждый сисадмин

Visitors have accessed this post 19083 times.

Ищете способы, как контролировать производительность сервера Linux? В большинстве дистрибутивов Linux уже встроены разные инструменты мониторинга. Используя их, можно посмотреть метрики с информацией о системных процессах. Эти инструменты можно использовать для поиска возможных причин возникновения проблем с производительностью. Команды, которые мы будем обсуждать в этой статье, относятся к самым фундаментальным. Они нужны для системного анализа и отладки проблем сервера Linux, таких как:

  1. Выявление узких мест в системе
  2. Проблемы производительности диска (хранилища)
  3. Проблемы производительности памяти и процессора
  4. Узкие места в сети

1. top — мониторинг активности процессов

Команда top отображает процессы Linux. Она позволяет представить работающую систему в реальном времени, то есть в момент фактической активности процесса. По умолчанию она отображает наиболее ресурсоемкие задачи, выполняемые на сервере, и обновляет их список каждые пять секунд.

Часто используемые горячие клавиши с лучшими инструментами мониторинга Linux

Ниже приведен список полезных горячих клавиш:

Горячая клавиша Применение
t Отображает, включена или выключена опция представления сводных данных
m Отображает, включена или выключена опция представления информации о памяти
A Сортирует задачи по активности потребления различных системных ресурсов. Полезно для быстрой идентификации задач, требующих высокой производительности в системе.
f Вход в интерактивный экран конфигурации для команды top. Полезно для настройки top под конкретную задачу.
o Позволяет выбрать способ упорядочивания информации для команды top.
r Выполняет команду renice.
k Выполняет команду kill.
z Включает или выключает цвет/моно

2. vmstat — статистика виртуальной памяти

Команда vmstat сообщает информацию о процессах, памяти, подгрузке страниц, блочном вводе-выводе, прерываниях и активности процессора.
# vmstat 3
Примеры выводов:
procs ————memory———- —swap— ——io—- —system— ——cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0
1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0
0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0
0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0
0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0
0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0
0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0

Использование памяти дисплея Slabinfo

Получить информацию об активных/неактивных страницах памяти

3. w — узнайте, кто вошел в систему и какие действия производит

Команда who (w) отображает информацию о пользователях, находящихся в данный момент в системе, и их процессах.
# w username
# w vivek
Примеры выводов:
17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf
root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w

4. uptime — узнайте, сколько уже работает система Linux

Команда uptime используется, чтобы узнать, как долго, с момента последней перезагрузки, работает после сервер. Текущее время, сколько времени система работает, сколько пользователей в системе на данный момент и средняя загрузка системы за последние 1, 5 и 15 минут.
# uptime
Вывод:
18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
1 пользователь в системе считается оптимальным значением нагрузки. Нагрузка может меняться от системы к системе. Для систем с одним ЦП приемлемо значение нагрузки 1–3, для систем SMP — 6–10.

5. ps — отображает процессы Linux

Команда ps сообщает о текущих процессах. Чтобы выбрать все процессы, используйте опцию -A или -e:
# ps -A
Примеры выводов:
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:02 migration/0
3 ? 00:00:01 ksoftirqd/0
4 ? 00:00:00 watchdog/0
5 ? 00:00:00 migration/1
6 ? 00:00:15 ksoftirqd/1
.
.
4881 ? 00:53:28 java
4885 tty1 00:00:00 mingetty
4886 tty2 00:00:00 mingetty
4887 tty3 00:00:00 mingetty
4888 tty4 00:00:00 mingetty
4891 tty5 00:00:00 mingetty
4892 tty6 00:00:00 mingetty
4893 ttyS1 00:00:00 agetty
12853 ? 00:00:00 cifsoplockd
12854 ? 00:00:00 cifsdnotifyd
14231 ? 00:10:34 lighttpd
14232 ? 00:00:00 php-cgi
54981 pts/0 00:00:00 vim
55465 ? 00:00:00 php-cgi
55546 ? 00:00:00 bind9-snmp-stat
55704 pts/1 00:00:00 ps
Команда ps чем-то напоминает top, но предоставляет больше информации.

Полноформатный вывод

# ps -Al
Чтобы вывести дополнительную информацию о процессе (он показывает аргументы командной строки, которые передаются процессу):
# ps -AlF

Вывод потоков ( LWP и NLWP)

Просмотр потоков после процессов

Вывод всех процессов на сервере

Вывод дерева процессов

# ps -ejH
# ps axjf
# pstree

Получить информацию о безопасности процесса Linux

# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM

Давайте выведем каждый процесс, запущенный от имени пользователя Vivek

# ps -U vivek -u vivek u

Конфигурация вывода команды ps в пользовательском формате

# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan

Попробуем отобразить только идентификаторы процессов Lighttpd

# ps -C lighttpd -o pid=
ИЛИ
# pgrep lighttpd
ИЛИ
# pgrep -u vivek php-cgi

Вывод имени PID 55977

# ps -p 55977 -o comm=

Топ 10 процессов, потребляющих память

# ps -auxf | sort -nr -k 4 | head -10

Отобразить Топ 10 процессоров с максимальным потреблением ресурсов системы

# ps -auxf | sort -nr -k 3 | head -10

6. free — отображает использование памяти Linux-сервером

Команда free показывает общий объем свободной и используемой физической памяти в системе, а также буферы, используемые ядром.
# free
Пример вывода:
total used free shared buffers cached
Mem: 12302896 9739664 2563232 0 523124 5154740
-/+ buffers/cache: 4061800 8241096
Swap: 1052248 0 1052248

7. iostat — отслеживает среднюю загрузку процессора и активность диска на Linux

Команда iostat предоставляет отчет по статистике центрального процессора (ЦП) и статистике ввода/вывода для устройств, директорий и сетевых файловых систем (NFS).
# iostat
Примеры выводов:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
avg-cpu: %user %nice %system %iowait %steal %idle
3.50 0.09 0.51 0.03 0.00 95.86
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.04 31.88 512.03 16193351 260102868
sda1 0.00 0.00 0.00 2166 180
sda2 22.04 31.87 512.03 16189010 260102688
sda3 0.00 0.00 0.00 1615 0

8. sar — мониторинг, сбор и отчетность о деятельности системы Linux

Команду sar используют для сбора, представления и сохранения информации о деятельности системы. Чтобы увидеть сетевой контроллер, введите:
# sar -n DEV | more
Сетевые контроллеры, начиная с 24:
# sar -n DEV -f /var/log/sa/sa24 | more
Вы также можете настроить отображение в реальном времени, используя команду sar:
# sar 4 5
Примеры выводов:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:45:12 PM CPU %user %nice %system %iowait %steal %idle
06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
Average: all 2.02 0.00 0.27 0.01 0.00 97.70

9. mpstat — отслеживает использование мультипроцессора в Linux

Команда mpstat отображает действия для каждого доступного процессора. Процессор 0 является первым. mpstat -P ALL отображает среднюю загрузку ЦП/процессора:
# mpstat -P ALL
Пример вывода:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89

10. pmap — отслеживает использование памяти процессом в Linux

Команда pmap показывает использование памяти процессом. Используйте эту команду, чтобы выяснить проблемы с потреблением памяти.
# pmap -d PID
Чтобы отобразить информацию о памяти процесса для pid # 47394, введите:
# pmap -d 47394
Примеры выводов:
47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x— 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw— 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw— 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw— 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw— 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x— 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r—- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw— 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x— 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 —— 000000000014c000 008:00002 libc-2.5.so
.
..
00002af8d48fd000 4 rw— 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x— 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 —— 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r—- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw— 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw— 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 —— 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K
Последняя строка очень важна:

  • mapped: 933712K общий объем памяти, сопоставленный с файлами;
  • writeable/private: 4304K объем недоступного адресного пространства;
  • shared: 768000K объем адресного пространства, который этот процесс делит с другими.

11. Команда netstat — инструмент для мониторинга сети и статистики Linux

Команда netstat отображает состояние TCP-соединений (как входящих, так и исходящих), таблицы маршрутизации, число сетевых интерфейсов и сетевую статистику по протоколам.
# netstat -tulpn
# netstat -nat

12. ss — статистика сети

Команда ss используется для вывода статистики сокетов. Позволяет отображать информацию, аналогичную netstat. Обратите внимание, что команда netstat считается устаревшей. Лучше использовать команду ss. Чтобы посмотреть все сокеты TCP и UDP в Linux:
# ss -t -a
ИЛИ
# ss -u -a

13. iptraf — получение сетевой статистики в реальном времени в Linux

Команда iptraf — это интерактивный цветной IP-дисплей. Генерирует различную сетевую статистику, включая информацию TCP, UDP-счетчики, информацию о ICMP и OSPF, о нагрузке Ethernet, статистику узлов, ошибки контрольной суммы IP и другое. Она может предоставить следующую информацию в удобочитаемом формате:

  • Статистика сетевого трафика по TCP-соединению
  • Статистика IP-трафика по сетевому интерфейсу
  • Статистика сетевого трафика по протоколу
  • Статистика сетевого трафика по TCP/UDP-порту и размеру пакета
  • Статистика сетевого трафика по адресу Layer2

14. tcpdump — детальный анализ сетевого трафика

Команда tcpdump — это простая команда, которая создает дамп трафика в сети. Тем не менее, вам нужно хорошо понимать принцип работы протокола TCP/IP, чтобы использовать этот инструмент. Например, для отображения информации о трафике DNS введите:
# tcpdump -i eth1 ‘udp port 53’
Для просмотра всех HTTP-пакетов IPv4 через порт 80 введите:
# tcpdump ‘tcp port 80 and (((ip[2:2] — ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)’
Показать все сеансы FTP до 202.54.1.5:
# tcpdump -i eth1 ‘dst 202.54.1.5 and (port 21 or 20’
Вывести всю сессию HTTP на 192.168.1.5:
# tcpdump -ni eth0 ‘dst 192.168.1.5 and tcp and port http’
Чтобы использовать wireshark для просмотра подробной информации о файлах, введите:
# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80

15. iotop — монитор ввода-вывода Linux

Команда iotop показывает таблицу текущего использования ввода-вывода, отсортированную по процессам или потокам на сервере.
$ sudo iotop
Пример выводов:

16. htop — интерактивный просмотрщик процессов

htop — это бесплатная программа с открытым исходным кодом на базе ncurses для просмотра процессов для Linux. Она очень проста в использовании. Вы можете выбрать процессы для команд kill или renice, не используя их PID и не выходя из интерфейса htop.
$ htop
Пример выводов:

17. atop — мониторинг процессов

atop — очень мощный и интерактивный монитор для просмотра нагрузки в системе Linux. Он отображает наиболее важные аппаратные ресурсы с точки зрения производительности. Вы можете посмотреть производительность процессора, памяти, диска и сети. Команда показывает, какие процессы ответственны за указанную нагрузку относительно загрузки процессора и памяти.
$ atop

18. Команды ac и lastcomm

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

  • Команда AC: статистика о времени подключения пользователей
  • Команда lastcomm: информация о ранее выполненных командах
  • Команда accton: включает или выключает учет процессов
  • Команда sa: обобщает учетную информацию

19. monit — контроль процессов

Monit — это бесплатное программное обеспечение с открытым исходным кодом, которое выполняет функции контроля за процессом. В нем встроена возможность перезапуска служб. Вы можете использовать Systemd, daemontools или любой другой подобный инструмент для той же цели.

20. nethogs — узнайте PID, которые используют наибольшую пропускную способность в Linux

NetHogs — это небольшой, но удобный инструмент для работы с сетью. Он группирует пропускную способность по имени процесса, например, Firefox, wget и так далее. В случае внезапного всплеска сетевого трафика, запустите NetHogs. Вы увидите, какой PID вызывает скачок пропускной способности.
$ sudo nethogs

21. iftop — показывает использование полосы пропускания на интерфейсе хоста

Команда iftop слушает сетевой трафик с заданным именем интерфейса, например, eth0. Она отображает таблицу текущего использования полосы пропускания парами узлов.
$ sudo iftop

22. vnstat — консольный монитор сетевого трафика

vnstat — это простой в использовании консольный монитор сетевого трафика для Linux. Он ведет журнал почасового, ежедневного и ежемесячного сетевого трафика для выбранного интерфейса.
$ vnstat

23. nmon — мониторинг серверов

nmon — это утилита, которая может показывать процессор, память, сеть, диски, файловые системы, NFS, основные ресурсы процесса и информацию о разделах из Cli.
$ nmon

24. glances — отслеживание системы Linux

glances — это кроссплатформенный инструмент мониторинга с открытым исходным кодом. Он предоставляет тонны информации на маленьком экране. Он также может работать в режиме клиент/сервер.
$ glances


25. strace — отслеживает системные запросы в Linux

Strace позволяет отслеживать системные запросы и сигналы Linux. Это пригодится при отладке веб-сервера и решении других проблем с ним.

26. /proc /file system — статистика ядра Linux

Файловая система /proc предоставляет подробную информацию о различных аппаратных устройствах и другие данные об ядре Linux. Типичные примеры /proc:
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts

27. Nagios — мониторинг серверов Linux и сетей

Nagios — это популярная программа с открытым исходным кодом для мониторинга сети. С ней вы можете контролировать все хосты, сетевое оборудование и сервисы. Она может отправлять оповещения, когда что-то идет не так и когда все стабилизируется.

28. Cacti — веб-инструмент для мониторинга Linux

Cacti — это комплексное решение для построения сетевых графиков, предназначенное для использования возможностей RRDTool по хранению и графическому отображению данных. В Cacti есть функционал для обследования сети, расширенные шаблоны графиков, несколько методов сбора данных и функции управления пользователями. Все это сведено в интуитивно понятный и простой в использовании интерфейс, который подходит даже для сложных сетей с сотнями устройств. Он может предоставлять данные о сети, процессоре, памяти, пользователях вошедших в систему, Apache, DNS-серверах и многое другое.

29. KDE System Guard — системы и отчеты Linux в режиме реального времени

KSysguard — это приложение для мониторинга системы для рабочего стола KDE. Его можно запускать через сессию ssh. Оно обеспечивает мониторинг локальных и удаленных хостов. Графический интерфейс использует так называемые датчики для извлечения отображаемой информации. Датчик может возвращать простые значения или более сложную информацию, например, таблицы. Для каждого типа информации предоставляется один или несколько дисплеев. Дисплеи организованы в виде листов, которые можно сохранять и загружать независимо друг от друга. Таким образом, KSysguard — это не только простой диспетчер задач, но и очень мощный инструмент для управления большими пулами серверов.

30. Системный монитор Gnome Linux

Приложение System Monitor позволяет отображать основную системную информацию и отслеживать системные процессы, использование системных ресурсов и файловых систем. Его также можно использовать для изменения поведения вашей системы. Хотя он и не такой мощный, как KDE System Guard, но зато он предоставляет основную информацию, которая может быть полезна для новых пользователей:

  • Отображение основной информации об аппаратном и программном обеспечении компьютера.
  • Версия ядра Linux
  • Версия GNOME
  • Аппаратные средства
  • Встроенная память
  • Процессоры и скорость работы
  • Состояние системы
  • Доступное дисковое пространство
  • Процессы
  • Память
  • Использование сети
  • Файловые системы
  • Список всех файловых систем с основной информацией о каждой.

Бонус: дополнительные инструменты

Еще немного инструментов:

  • nmap – сканирует сервер на наличие открытых портов.
  • lsof – список открытых файлов, сетевых подключений и многое другое.
  • ntop — веб-инструмент для наблюдения за использованием сети, программное обеспечение для мониторинга сетевого трафика. Вы можете видеть состояние сети, распределение трафика по протоколам для UDP, TCP, DNS, HTTP и других протоколов.
  • Conky – еще один классный инструмент мониторинга для системы X Window. Он легко настраивается и способен отслеживать многие системные переменные, включая состояние процессора, памяти, места подкачки, дискового пространства, температуры, процессов, сетевых интерфейсов, заряда батареи, системных сообщений, почтовых ящиков и т. д.
  • GKrellM – этот инструмент можно использовать для мониторинга состояния процессоров, основной памяти, жестких дисков, сетевых интерфейсов, локальных и удаленных почтовых ящиков и многого другого.
  • mtr – mtr объединяет функциональность программ traceroute и ping в одном инструменте диагностики сети.
  • vtop – графический монитор активности терминала в Linux.
  • gtop – панель мониторинга системы для терминала Linux/macOS Unix.

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

Если вы хотите освоить функционал системного администратора Linux на практике, приглашаем на наш практикум Linux by Rebrain.

Сторожевой таймер (watchdog)

В данном уроке рассматривается устройство и работа со сторожевым таймером, для управления которым предлагается использовать библиотеку GyverWDT (by N1gra), предоставляющую полный контроль за WDT и доступ ко всем его настройкам и режимам работы. Библиотека очень лёгкая и подходит для большинства МК AVR, т.е. в частности для всех плат Arduino на их базе. Сторожевой таймер в МК AVR представляет собой независимый асинхронный блок, тактирующийся от отдельного внутреннего RC генератора, частота которого составляет около 128 кГц (несколько зависит от температуры и напряжения питания). Следует учесть, что изначально данный генератор спроектирован как энергоэффективный источник тактирования, и не предполагает высокой точности, отклонение частоты при производстве составляет около 10%. При желании этот генератор может тактировать и ядро AVR, в случае, если внешний кварцевый резонатор не предусмотрен, а внутренний RC генератор на 8МГц не удовлетворяет требованиям энергопотребления. Сторожевой таймер представляет из себя простой 10-битный счетный регистр, он инкрементируется при каждом фронте тактового сигнала, приходящего из делителя. Как только значение в этом счетном регистре достигнет 1023 – произойдет тайм-аут, а сторожевой таймер, в зависимости от установленного режима, инициирует сброс МК или вызывает прерывание. Чтобы предотвратить тайм-аут, можно сбросить счет сторожевого таймера в 0, воспользовавшись короткой функцией Watchdog.reset() библиотеки GyverWDT, или ассемблерной инструкцией “WDR”. Зачем нужен сторожевой таймер? Он позволяет автоматически перезагрузить контроллер в случае зависания программы, что может быть просто необходимо в автономных проектах. Помимо этого, библиотека GyverWDT предоставляет возможность использовать сторожевой таймер и в других целях, например для генерации прерываний с высоким приоритетом без использования основных аппаратных таймеров, что может очень пригодиться в сложных проектах, например для регулярного опроса датчиков. Не стоит забывать, что сторожевой таймер остается активным во всех, даже самых глубоких режимах сна, и может разбудить контроллер прерыванием. Полезным может оказаться и комбинированный режим сторожевого таймера, в котором он может одновременно опрашивать датчики, выступать сторожевым таймером для внешнего устройства, и следить за работой собственного ядра, чтобы в случае зависания сбросить его. Делители частоты сторожевого таймера

Константа делителя GyverWDT Приблизительный тайм-аут Приблизительная частота тайм-аутов
WDT_PRESCALER_2 ~ 16ms ~ 62Hz
WDT_PRESCALER_4 ~ 32ms ~ 32Hz
WDT_PRESCALER_8 ~ 64ms ~ 16Hz
WDT_PRESCALER_16 ~ 0.125s ~ 8Hz
WDT_PRESCALER_32 ~ 0.25s ~ 4Hz
WDT_PRESCALER_64 ~ 0.5s ~ 2Hz
WDT_PRESCALER_128 ~ 1s ~ 1Hz
WDT_PRESCALER_256 ~ 2s ~ 0.5Hz
WDT_PRESCALER_512 ~ 4s ~ 0.25Hz
WDT_PRESCALER_1024 ~ 8s ~ 0.125Hz

blank

Почему приблизительная? Потому что частота генератора сторожевого таймера уже при производстве имеет приличный разброс, и если на малых значениях делителя это практически не проявляется (16 мс +/- 1.6 мс), то на больших это может стать серьезной проблемой (8 с +/- 1 с). Не стоит забывать, что RC генератор, в отличии от кварцевого резонатора, имеет небольшую зависимость частоты от температуры и напряжения питания.

Библиотека GyverWDT

Для работы с Watchdog можно использовать встроенную avr библиотеку, но у нас есть своя библиотека с более широким набором настроек: GyverWDT. Отдельная страница с документацией и ссылка на загрузку здесь. Функции библиотеки GyverWDT:

  • Watchdog.reset(); короткая и быстрая команда сброса сторожевого таймера в 0, вызывается внутри программы , для подтверждения нормальной работы.
  • Watchdog.disable(); короткая команда остановки работы сторожевого таймера. Вызывается для полного отключения watchdog.
  • Watchdog.enable(mode, prescaler); функция для конфигурации и запуска таймера (см. пример)
Режим (константа) Действие при тайм-ауте
INTERRUPT_MODE Прерывание, вызывающее функцию, указанную в watchdog_enable ()
INTERRUPT_RESET_MODE Прерывание, вызывающее функцию, указанную в watchdog_enable () , и автоматическая установка сторожевого таймера в режим reset.
(комбинированный режим) Соответственно первый тайм-аут инициирует прерывание, второй тайм-аут – инициирует сброс.

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

  • Если причина зависания кроется в программной ошибке, например, в бесконечном ожидании поступления данных. Первый тайм-аут вызовет прерывание с высоким приоритетом, если мы смогли в него войти и понять, что это случилось – зависание явно носит программный, а не аппаратный характер. В таком случае мы можем попытать исправить программную ошибку прямо внутри прерывания, или предупредить пользователя, что написанный код имеет проблемные участки. Если удалось оперативно решить проблему до наступления следующего тайм-аута, мы можем не отходя от кассы перенастроить сторожевой таймер функцией Watchdog.enable(…) , чтобы следующий тайм- аут отправил нас в прерывание-сигнализатор, вместо hard-reset. Если же не удалось оперативно исправить причину зависания – следующий тайм-аут автоматически сбросит контроллер.
  • Если необходимо использовать одновременно прерывания (например, для опроса датчиков), и защиту от зависания. В пользовательской функции прерывания, помимо необходимых нам действий, опроса датчиков и т.д. просто дописывается функция перенастройки Watchdog.enable (…) , если перенастройка не произошла, значит контроллер не вошел в процедуру прерывания, попросту зависнув. Следующий тайм-аут сбросит контроллер.
  • Если необходимо аппаратно следить следить как за работоспособностью внешнего устройства, так и самого МК. Например, при совместной работе МК и Bluetooth/Wi-Fi /GSM/GPS модуля. Как это реализовать? Watchdog настраивается на необходимый период. Внешнее устройство обязано периодически посылать на МК подтверждение своей работоспособности, это может быть как импульс, периодически создаваемый с помощью GPIO внешнего устройства, инициирующий внешнее прерывание МК, так и посылка, отправляемая внешним устройством по одному из последовательных интерфейсов, и аналогично инициируя прерывания МК. Внутри процедуры прерывания, вызывается короткая функция Watchdog.reset (); , сбрасывающая сторожевой таймер. Если внешнее устройство зависло и перестало посылать данные/импульсы, сбросов watchdog не происходит и происходит прерывание, внутри которого мы можем без труда сбросить внешнее устройство, подав на него низкий уровень (необходимо наличии внешней подтяжки к VCC). В этом же прерывании производится перенастройка watchdog. Если МК зависнет – он не перенастроит watchdog вовремя, и следующий тайм-аут инициирует сброс МК.

Примеры из библиотеки

WDT как источник прерываний
#include «GyverWDT.h» /* Пример использования watchdog в качестве генератора прерываний Зависимость таймаутов от делителей см. в GyverWDT.h */ void setup() < Serial.begin(9600); pinMode(13, OUTPUT); Watchdog.enable(INTERRUPT_MODE, WDT_PRESCALER_128); // Режим генерации прерываний , таймаут ~1с >void loop() < /* Загруженный цикл */ digitalWrite(13, HIGH); delay(5000); digitalWrite(13, LOW); delay(5000); >/* Прерывание watchdog */ ISR(WATCHDOG)
Перезагрузка при зависании

#include "GyverWDT.h" /* Пример классического применения watchdog - сброс устройства при зависании Если не вызвать Watchdog.reset() вовремя - произойдет сброс Зависимость таймаутов от делителей см. в GyverWDT.h */ void setup() < pinMode(13, OUTPUT); Watchdog.enable(RESET_MODE, WDT_PRESCALER_512); // Режим сторжевого сброса , таймаут ~4с >void loop() < /* Ваш полезный код */ digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); Watchdog.reset(); // Переодический сброс watchdog, означающий, что устройство не зависло >

Спим и просыпаемся по WDT

#include "GyverWDT.h" #include /* Пример использования watchdog в "будильника" Зависимость таймаутов от делителей см. в GyverWDT.h */ void setup() < pinMode(13, OUTPUT); set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Выбираем нужный режим сна >void loop() < /* Мигаем светодиодом , а в паузах спим */ digitalWrite(13, HIGH); Watchdog.enable(INTERRUPT_MODE, WDT_PRESCALER_128); // Режим прерываний , таймаут ~1c sleep_enable(); // Разрешаем сон sleep_cpu(); // Уходим в сон digitalWrite(13, LOW); Watchdog.enable(INTERRUPT_MODE, WDT_PRESCALER_128); // Режим прерываний , таймаут ~1c sleep_enable(); // Разрешаем сон sleep_cpu(); // Уходим в сон >/* Прерывание watchdog , в нем мы просыпаемся */ ISR(WATCHDOG) < sleep_disable(); // Запрещаем сон Watchdog.disable(); // Выключаем watchdog >

Контроль за двумя устройствами

#include "GyverWDT.h" /* Пример работы watchdog для контроля сразу за двумя устройствами В данном случае - arduino + esp8266 модуль Зависимость таймаутов от делителей см. в GyverWDT.h */ void setup() < Serial.begin(9600); // На этом последовательном порту у нас wifi-модуль pinMode(8, INPUT); // Этот пин сбрасывает wifi-модуль при переходе в режим OUTPUT Watchdog.enable(INTERRUPT_RESET_MODE, WDT_PRESCALER_1024); // Комбинированный сторжевой режим , таймаут ~8с >void loop() < /* Ваш полезный код */ >/* Если wifi-модуль нам что то отправил , а мы его поняли - никто из нас не завис */ void serialEvent() < Watchdog.reset(); // Сбросить watchdog >/* Если wifi-модуль не отправлял нам что то более 8с - он завис */ ISR(WATCHDOG) < pinMode(8, OUTPUT); // Тянем за reset модуля Watchdog.enable(INTERRUPT_RESET_MODE, WDT_PRESCALER_1024); // Если мы не смогли перенастроить watchdog - значит мы зависли Watchdog.reset(); // Если не зависли - сбросить watchdog и продолжить pinMode(8, INPUT); // Отпускаем reset модуля >

Комбинированный режим (прерывание + ресет)

#include "GyverWDT.h" /* Пример использования watchdog в комбинированном режиме Может использоваться для оповещения в случае зависания Первый тайм-аут вызывает прерывание, второе - сброс Перенастройте watchdog чтобы избежать сброса Зависимость таймаутов от делителей см. в GyverWDT.h */ void setup() < Serial.begin(9600); Serial.println("Program started"); Watchdog.enable(INTERRUPT_RESET_MODE, WDT_PRESCALER_128); // Комбинированный режим , таймаут ~1c Serial.println("watchdog enabled"); while (1); // Причина зависания Serial.println("loop started"); // Этого мы не увидим из-за зависания >void loop() < /* этого кода программа не достигнет - зависание в setup */ Serial.println("hello"); delay(500); >/* Первый тайм-аут вызывает прерывание */ ISR(WATCHDOG) < // Если причина зависания программная - тут можно попытаться исправить ее */ Serial.println("warning!"); // Если исправить причину не вышло - следующий таймаут вызывает сброс // Watchdog.enable(INTERRUPT_RESET_MODE, WDT_PRESCALER_128); // Если перенастроить watchdog здесь - сброса не будет >

Watchdog и сон

  1. Настроить МК на один из режимов сна
  2. Разрешить сон
  3. Взвести watchdog на определенный тайм-аут в режиме прерываний
  4. Уйти в сон
  5. При пробуждении, оказавшись в процедуре прерывания watchdog, запретить сон
  6. Продолжить выполнение программы

Проблемы

Основная проблема заключается в том, что режим автоматического сброса не работает на некоторых платах Arduino. Вернее работает то он просто отлично, только приводит к бесконечной перезагрузке или boot loop. Почему так происходит? Дело в том, что контроллеры свежих партий, в случае перезагрузки по watchdog автоматически перенастраивают сторожевой таймер на минимальный период, т.е. 16 мс, не отключая его. Чтобы избежать бутлупа необходимо при старте программы выключить watchdog, но как известно, в большинстве плат мы имеем МК с зашитым загрузчиком, время выполнения которого выше, чем 16 мс. Это приводит к тому, что контроллер даже не успевает приступить к выполнению основной программы, как уже улетает в hard reset , происходит это циклически и бесконечно долго. Единственный способ остановить этот процесс – обесточить плату. Во многих платах выпуска 2018+ года зашит более оптимизированный и продуманный загрузчик optiboot, который автоматически выключает watchdog при старте, что предотвращает бутлуп и позволяет нам использовать сторожевой таймер на 100%.

Проверка работоспособности Watchdog

В примерах к библиотеке идёт скетч тестирования поддержки watchdog на вашей плате. Загрузите его в плату и откройте монитор порта. Спустя 10 секунд паузы, установленной для упрощения перепрошивки при boot loop, в монитор порта начнет выводиться время работы программы в секундах. Если при достижении таймаута программа сбросилась и отсчет начался заново – ваша плата (загрузчик) поддерживает watchdog на все 100%. Если после перезагрузки корректный вывод времени в монитор порта прекратился, а светодиод на плате начал быстро и безостановочно мигать – загрузчик на вашей плате не поддерживает перезагрузку watchdog. Загрузите в плату любой другой скетч, чтобы продолжить использование.

Проверка WDT

#include /* Пример тестирующий поддержку всех функций watchdog на вашем устройстве > После 10 секунд отсчета программа стартует заного -> поддерживаются все функции > После таймаута устройство зависает, светодиод на D13 начинает мигать -> поддерживается только INTERRUPT_MODE В случае bootloop у вас будет 10 секунд на перепрошивку устройства после подачи питания Для добавления поддержки всего функционала watchdog загрузите optiboot или откажитесь от загрузчика */ void setup() < Serial.begin(9600); Serial.println("Program started , wait 10 seconds"); delay(10000); // 10 секунд на перепрошивку в случае bootloop Watchdog.enable(RESET_MODE, WDT_PRESCALER_1024); // Режим сторожевого сброса , таймаут ~8с Serial.println("watchdog enabled"); while (1) < // Бесконечный цикл , эмуляция "зависания" if (!(millis() % 1000)) < // Каждую секунду Serial.println((uint16_t)((millis() / 1000) - 10)); // Вывести время после включения watchdog в секундах delay(10); >> > void loop() <>

Что делать, если загрузчик на моей плате не поддерживает watchdog? Если вам действительно нужен полный функционал сторожевого таймера – необходимо перепрошить загрузчик, для этого необходим программатор, который поддерживает МК AVR, или другая плата Arduino + скетч Arduino ISP. Подробнее читайте в уроке про работу с программатором. Без перепрошивки загрузчика вам доступны обычные прерывания, не использующие таймеров и имеющие высокий приоритет, и соответственно возможность использования watchdog в режиме будильника МК.

Полезные страницы

  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

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

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

https://czena.narkolog-na-dom-voronezh-11.ru/