Инструменты пользователя

Инструменты сайта


proccess_and_resurce

Подробное рассмотрение процессов и использования ресурсов

Отслеживание процессов

top

Инструкции для команды top

ИнструкцияДействие
Клавиша ПробелНемедленно обновить экран
MВыполнить сортировку по количеству используемой резидентной памяти
TВыполнить сортировку по общему (кумулятивному) применению ЦПУ
PВыполнить сортировку по текущему использованию ЦПУ (по умолчанию)
uОтобразить процессы только для одного пользователя
fВыбрать другие параметры для отображения
?Отобразить статистику использования всех команд top

Поиск открытых файлов с помощью команды lsof

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

Чтение результатов вывода команды lsof

  • COMMAND. Командное имя для процесса, который удерживает дескриптор файла.
  • PID. Идентификатор процесса.
  • USER. Пользователь, запустивший процесс.
  • FD. Это поле может содержать два типа элементов. В приведенном выше результате столбец FD показывает назначение файла. Это поле может также содержать файловый дескриптор открытого файла — число, которое процесс использует вместе с системными библиотеками и ядром, чтобы идентифицировать файл и работать с ним.
  • TYPE. Тип файла (обычный файл, каталог, сокет и т. п.).
  • DEVICE. Старший и младший номера устройства, которое удерживает данный файл.
  • SIZE. Размер файла.
  • NODE. Номер дескриптора inode для данного файла.
  • NAME. Имя файла.

Потоки

Однопоточные и многопоточные процессы

В Linux некоторые процессы разделены на части, называемые потоками. Поток очень похож на процесс: у него есть идентификатор (TID, или ID потока), и ядро планирует запуск потоков и запускает их так же, как и процессы. Однако в отличие от отдельных процессов, которые обычно не используют совместно с другими процессами такие системные ресурсы, как оперативная память и подключение к вводу/выводу, все потоки внутри какого-либо процесса совместно задействуют ресурсы системы и некоторую часть памяти.

Просмотр потоков

 ps m -o pid,tid,command
  PID   TID COMMAND
 5365     - /usr/bin/python /usr/lib64/xsconsole/XSConsole.py -f root
    -  5365 -
 5366     - /sbin/mingetty tty3
    -  5366 -
 5367     - /sbin/mingetty tty4
    -  5367 -
 5368     - /sbin/agetty hvc0 115200 linux
    -  5368 -
 5384     - /bin/bash /opt/xensource/libexec/dom0term.sh
    -  5384 -
11074     - sudo -i
    - 11074 -
11131     - -bash
    - 11131 -
17621     - vi backup_vm_bash
    - 17621 -
19499     - sudo -i
    - 19499 -
19527     - -bash
    - 19527 -
25957     - ps m -o pid,tid,command
    - 25957 -

Измерение процессорного времени

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

$ top -p pid1 [-p pid2 ...]

Память

Один из самых простых способов проверить состояние системной памяти в целом — запустить команду free или посмотреть файл /proc/meminfo, чтобы понять, сколько реальной памяти используется для кэша и буферов.

Как работает память

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

Запуск и работу команды в качестве нового процесса.

  1. Ядро загружает начало кода с инструкциями команды в страницы памяти.
  2. Ядро может выделить несколько страниц рабочей памяти для нового процесса.
  3. Во время своей работы процесс может дойти до такого момента, когда следующей инструкции не окажется ни в одной из страниц, загруженных ядром изначально. Тогда ядро вступает в действие, загружает необходимые страницы в память и позволяет команде продолжить выполнение.
  4. Подобным же образом, если команде необходимо больше рабочей памяти, чем было выделено изначально, ядро решает эту задачу, отыскивая свободные страницы (или освобождая пространство) и назначая их данному процессу

Ошибки из-за отсутствия страниц

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

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

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

Отслеживание ошибок из-за отсутствия страниц

$ /usr/bin/time cal > /dev/null
0.00user 0.00system 0:00.06elapsed 0%CPU (0avgtext+0avgdata 3328maxresident)k
648inputs+0outputs (2major+254minor)pagefaults 0swaps

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

Если вы хотите увидеть ошибки для работающих процессов, воспользуйтесь командой top или ps. При запуске команды top используйте флаг f, чтобы изменить отображаемые поля, и флаг u, чтобы отобразить количество больших ошибок. Результаты будут показаны в новом столбце, nFLT. Количество малых ошибок вы не увидите.

$ ps -o pid,min_flt,maj_flt 20365
PID MINFL MAJFL
20365 834182 23

Столбцы MINFL и MAJFL показывают число малых и больших ошибок из-за отсутствия страниц.

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

root@uba64:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   6892 234588  13464 174292    0    0     1     1   11   18  0  0 100  0  0
 0  0   6892 234572  13464 174292    0    0     0     0   25   44  0  0 100  0  0
 0  0   6892 234572  13464 174292    0    0     0     0   29   49  0  0 100  0  0
 0  0   6892 234572  13464 174292    0    0     0     0   35   64  0  0 100  0  0
  • procs — для процессов
  • memory — для использования памяти
  • swap — для страниц, которые перемещаются в область подкачки и из нее
  • io — для использования диска
  • system — для количества переключений ядра на его код
  • cpu — для количества времени, затраченного различными частями системы

Отслеживание ввода/вывода

Использование команды iostat

root@uba64:~# iostat
Linux 3.19.0-25-generic (uba64)         19.01.2016      _x86_64_        (2 CPU)
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,00    0,00    0,02    0,02    0,00   99,96
 
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0,15         3,22         4,06    1931243    2437868
sdb               0,00         0,00         0,00       2341         44
sdc               0,00         0,01         0,05       4505      32837
sdd               0,00         0,01         0,00       5447        224
tpsСреднее количество пересылок данных в секунду
kB_read/sСреднее количество считанных килобайтов в секунду
kB_wrtn/sСреднее количество записанных килобайтов в секунду
kB_readОбщее количество считанных килобайтов
kB_wrtnОбщее количество записанных килобайтов

Отслеживание использования ввода/вывода каждого процесса с помощью команды iotop

Total DISK READ :       0.00 B/s | Total DISK WRITE :      25.78 M/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:      41.65 M/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 8477 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.01 % [kworker/u4:1]
 8493 be/4 root        0.00 B/s   25.78 M/s  0.00 %  0.00 % dd if=/dev/urandom of=/root/zero bs=2M count=1000
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
 1028 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % sshd: titov [priv]
    5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcuos/0]

Отслеживание процессов с помощью команды pidstat

root@uba64:~# pidstat -p 8479 1
Linux 3.19.0-25-generic (uba64)         19.01.2016      _x86_64_        (2 CPU)
 
10:37:04      UID       PID    %usr %system  %guest    %CPU   CPU  Command
10:37:05        0      8479    1,00    0,00    0,00    1,00     0  iotop
10:37:06        0      8479    0,00    1,00    0,00    1,00     0  iotop
10:37:07        0      8479    0,00    0,00    0,00    0,00     0  iotop
10:37:08        0      8479    1,00    1,00    0,00    2,00     0  iotop
10:37:09        0      8479    0,00    0,00    0,00    0,00     0  iotop
10:37:10        0      8479    0,00    0,00    0,00    0,00     0  iotop
10:37:11        0      8479    0,00    1,00    0,00    1,00     0  iotop
10:37:12        0      8479    1,00    1,00    0,00    2,00     0  iotop
10:37:13        0      8479    0,00    0,00    0,00    0,00     0  iotop
^C
Среднее:     0      8479    0,33    0,44    0,00    0,78     -  iotop

Хотя команда pidstat по умолчанию показывает использование процессора, она может намного больше этого. Например, можно применять параметр -r, чтобы отслеживать память, или параметр -d, чтобы включить отслеживание диска.

root@uba64:~# pidstat -p 8479 1 -d
Linux 3.19.0-25-generic (uba64)         19.01.2016      _x86_64_        (2 CPU)
 
10:44:03      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
10:44:04        0      8479      0,00      0,00      0,00  iotop
10:44:05        0      8479      0,00      0,00      0,00  iotop
10:44:06        0      8479      0,00      0,00      0,00  iotop
10:44:07        0      8479      0,00      0,00      0,00  iotop
10:44:08        0      8479      0,00      0,00      0,00  iotop
^C
Среднее:     0      8479      0,00      0,00      0,00  iotop
root@uba64:~# pidstat -p 8479 1 -r
Linux 3.19.0-25-generic (uba64)         19.01.2016      _x86_64_        (2 CPU)
 
10:44:11      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
10:44:12        0      8479      0,00      0,00   57596  14272   2,85  iotop
10:44:13        0      8479      0,00      0,00   57596  14272   2,85  iotop
10:44:14        0      8479      0,00      0,00   57596  14272   2,85  iotop
10:44:15        0      8479      0,00      0,00   57596  14272   2,85  iotop
10:44:16        0      8479      0,00      0,00   57596  14272   2,85  iotop
10:44:17        0      8479      0,00      0,00   57596  14272   2,85  iotop
^C
Среднее:     0      8479      0,00      0,00   57596  14272   2,85  iotop
proccess_and_resurce.txt · Последние изменения: 2016/01/19 02:59 — sander