1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-llthw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex28.md 27 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 03:02 8398775

Упражнение 28: производительность: получение данных о производительности, uptime, free, top

Это упражнение простое. Прежде всего, какие данные о производительности нам нужны?

  • Использование процессора:
    • Какова его загрузка?
    • Какие процессы используют его?
  • Использование памяти:
    • Сколько памяти используется?
    • Сколько памяти свободно?
    • Сколько памяти занято кэшем?
    • Какие процессы потребляют её?
  • Использование диска:
    • Сколько операций ввода/вывода выполняется?
    • Каким процессом?
  • Сетевое использование:
    • Какой объём данных передаётся?
    • Какому процессу это нужно?
  • Состояние процессов:
    • Сколько процессов запущено?
    • Что они делают или чего ждут?
    • Если они ждут, то чего именно — процессор, диск или сеть?

Чтобы получить эту информацию, мы можем использовать следующие инструменты:

  • uptime — сколько времени система работает.
  • free — показывает количество доступной и используемой памяти в системе.
  • vmstat — информация о процессах, памяти, подкачке, блочном вводе-выводе, ловушках, диске и активности процессора.
  • top — отображает текущие задачи Linux в реальном времени.

Давайте посмотрим на эту программу и её вывод.

Вывод uptime:

user1@vm1:~$ uptime
#(1)      (2)                (3)                    (4)   (5)   (6)
 03:13:58 up 4 days, 22:45,  1 user,  load average: 0.00, 0.00, 0.00
Поле Описание
(1) Текущее время.
(2) Время работы системы (после запуска).
(3) Количество текущих пользователей, вошедших в систему.
(4) Средняя загрузка процессора за последнюю минуту. Это не нормализованное значение, поэтому средняя загрузка, равная 1, означает полную загрузку одного процессора, но на четырёхпроцессорной системе это означает, что она простаивает 75% времени.
(5) Средняя нагрузка на процессор за последние 5 минут.
(6) Средняя нагрузка на процессор за последние 15 минут.

Вывод free:

user1@vm1:~$ free -mt
#            (1)         (2)        (3)         (4)        (5)        (6)
             total       used       free     shared    buffers     cached
Mem:           496        267        229          0         27        196
#                         (7)        (8)
-/+ buffers/cache:         43        453
# 9
Swap:          461          0        461
# 10
Total:         958        267        691
Поле Описание
(1) Общий объём физической памяти.
(2) Используемый объём физической памяти.
(3) Свободный объём физической памяти.
(4) Столбец общей памяти следует игнорировать; он устарел.
(5) Объём оперативной памяти и метаданных файловой системы, выделенных для кэширования дисковых блоков.
(6) Общий объём страниц, используемых для чтения файлов из кэша.
(7) Общий объём памяти, исключая буферы и кэш (поле 2 минус поля 5 и 6).
(8) Свободная физическая память, включая свободные буферы и кеш (поле 1 минус поле 7).
(9) Информация об использовании файла подкачки.
(10) Общая информация об использовании памяти, включая файл подкачки.

Вывод vmstat:

user1@vm1:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
#(1,2)  (3)    (4)    (5)   (6)    (7)   (8)   (9)  (10) (11) (12,13,14,15,16)
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0    229     27    196    0    0     0     0   11    6  0  0 100  0
 
user1@vm1:~$ vmstat -S M -a
#                    (17)    (18)
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa
 0  0      0     11    434     19    0    0    24     2   11    6  0  0 100  0
 
user1@vm1:~$ vmstat -d
#19    (20)    (21)    (22)    (23)  (24)    (25)    (26)    (27)   (28)    (29)
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda    11706    353  402980   17612   9303  40546  336358   46980      0     19
sr0        0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
 
user1@vm1:~$ vmstat -m | head
#(30)                       (31)  (32)   (33)   (34)
Cache                       Num  Total   Size  Pages
ext3_inode_cache          13700  13700    808     10
ext3_xattr                    0      0     88     46
journal_handle              170    170     24    170
journal_head                 37     72    112     36
revoke_table                256    256     16    256
revoke_record               128    128     32    128
kmalloc_dma-512               8      8    512      8
ip6_dst_cache                16     24    320     12
UDPLITEv6                     0      0   1024      8
Режим Ситуация Поле Описание
Виртуальная память Процессы (1) r: количество процессов, ожидающих выполнения.
(2) b: количество спящих процессов.
Память (3) swpd: используемая виртуальная память.
(4) free: свободная память.
(5) buff: память, выделенная для буферов.
(6) cache: память, используемая для кэша.
(17) inact: неактивная память.
(18) active: активная память.
so: объём памяти, сохранённой на диск (в секунду).
bi: количество блоков, полученных от устройства (блоков в секунду).
bo: количество блоков данных, отправленных на устройство (блоков в секунду).
in: количество прерываний в секунду, включая тактовые.
cs: количество переключений контекста в секунду.
us: время выполнения кода, не относящегося к ядру (пользовательское время, включая приоритетное).
sy: время выполнения ядра (системное время).
id: время простоя. В Linux 2.5.41 и ранее включает время ожидания ввода-вывода.
wa: время ожидания ввода-вывода. В Linux 2.5.41 и ранее включено во время простоя.

Диск, -d: устройство
чтение
общее количество успешных операций чтения (total).
количество операций чтения, сгруппированных для одной операции ввода-вывода (merge).
сектора, успешно прочитанные (sectors).
время, затраченное на чтение (ms).
запись
общее количество успешных записей (total).
количество записей, сгруппированных в одну операцию ввода-вывода (merge).
записанные сектора (sectors).
время записи (ms).
текущая операция ввода-вывода (cur).
время в секундах, затраченное на ввод-вывод (s).

Slab, -m: Slab
кэш: имя кэша (cache).
число активных объектов (num).
общее число доступных объектов (total).
размер каждого объекта (size).
страницы с хотя бы одним активным объектом (page).

#     (1)      (2)                (3)      (4)
top - 03:22:44 up 4 days, 22:54,  1 user,  load average: 0.00, 0.00, 0.00
#        (5)         (6)         (7)            (8)          (9)
Tasks:  63 total,   1 running,  62 sleeping,   0 stopped,   0 zombie
#        (10)     (11)     (12)    (13)      (14)     (15)     (16)     (17)
Cpu(s):  0.0%us,  1.1%sy,  0.0%ni, 98.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
#                (18)            (19)            (20)            (21)
Mem:    508820k total,   273792k used,   235028k free,    27844k buffers
#                (22)            (23)            (24)            (25)
Swap:   473080k total,        0k used,   473080k free,   201252k cached
 
#(26) (27)     (28)(29) (30) (31) (32,33) (34)(35)      (36) (37)
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  8356  804  676 S  0.0  0.2   0:05.99 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.06 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    6 root      20   0     0    0    0 S  0.0  0.0   0:03.25 events/0
    7 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuset
<...>
Часть Поле Описание
Нормальное время работы (1) Текущее время.
(2) Время работы после запуска.
(3) Сколько пользователей в данный момент вошли в систему.
(4) Загрузка процессора за последние 1, 5 и 15 минут. Это не нормализованное значение, поэтому загрузка одного процессора на 1 означает полную загрузку, но на четырёхпроцессорной системе это означает 75% свободного времени.
Задачи (5) Общее количество запущенных процессов.
(6) Количество процессов, запущенных в данный момент.
(7) Количество спящих процессов в данный момент.
(8) Количество остановленных процессов (например, с помощью CTRL + Z).
(9) Количество уже остановленных («зомби») процессов, которые были завершены, но ещё не собраны их родительскими процессами.
Процессор (S) (10) Время, потраченное процессором на выполнение неприоритетных пользовательских процессов.
(11) Время выполнения процессором системных процессов и их потоков.
(12) Время, потраченное процессором на выполнение приоритетных пользовательских процессов.
(13) Время простоя процессора.
(14) Время ожидания процессором завершения ввода-вывода.
(15) Время обслуживания процессором аппаратных прерываний.
(16) Время обслуживания процессором программных прерываний.
(17) Общий объём процессорного времени, «украденного» у этого виртуального компьютера другими задачами (например, запуск другого виртуального компьютера).
Память/обмен (18) Общий объём физической памяти.
(19) Объём используемой физической памяти.
(20) Полностью свободная физическая память.
(21) Общий объём оперативной памяти и метаданных файловой системы, выделенных для кэширования дисковых блоков.
(22,23,24) Общий, используемый и свободный объём виртуальной памяти подкачки.
(25) Общий объём страниц оперативной памяти, используемых для чтения файлов.
Процесс (26) Уникальный идентификатор процесса (PID), который периодически обновляется, хотя процесс никогда не перезапускается.
(27) Эффективное имя пользователя владельца процесса.
(28) Приоритет процесса.
(29) Значение приоритета процесса. Отрицательное значение приоритета указывает на более высокий приоритет, а положительное — на более низкий. Нулевое значение в этом поле просто означает, что приоритет процесса не будет изменён при планировании задач.
(30) Общий объём виртуальной памяти процесса, включая весь код, данные и совместно используемые библиотеки, а также заменённые страницы и незагруженные, но отображённые страницы.
(31) Непереключённый объём физической памяти, используемый процессом.
(32) Общий объём совместно используемой памяти процесса. Он отражает только память, которая может быть разделена с другими процессами.
(33) Состояние процесса может быть одним из следующих: D=непрерывный сон, R=работает, S=спит, T=отслеживается или остановлен, Z=зомби.
(34) Доля процессорного времени процесса с момента последнего обновления экрана, выраженная в процентах от общего процессорного времени.
(35) Доля доступной физической памяти, используемой процессом.
(36) Процессорное время в сотых долях секунды, такое же, как TIME, но с более высокой детализацией.
(37) Команда — командная строка или название программы. ```
user1@vm1:~$ uptime
05:36:45 up 6 days, 1:08, 1 user, load average: 0.00, 0.00, 0.00
user1@vm1:~$ free
         total       used       free     shared    buffers     cached

Mem: 508820 239992 268828 0 820 213720 -/+ buffers/cache: 25452 483368 Swap: 473080 0 473080


В этом фрагменте кода пользователь выполняет команды `uptime`, `free` и `vmstat` для мониторинга состояния системы. Команда `uptime` показывает время работы системы, количество пользователей и среднюю загрузку процессора. Команда `free` отображает информацию об использовании памяти в системе. Команда `vmstat` предоставляет подробную статистику о состоянии виртуальной памяти, процессах, блочных устройствах и других аспектах системы.

user1@vm1:~$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 0 268828 820 213720 0 0 21 10 14 11 0 0 100 0


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

Далее пользователь запускает команду `sleep`, затем `dd` для создания файла, после чего снова запускает `vmstat`. Это позволяет отслеживать изменения в системе во время выполнения этих команд.

[1] 6078 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 1 0 268556 828 213736 0 0 21 10 14 11 0 0 100 0 0 0 0 268556 828 213772 0 0 16 0 19 10 0 0 100 0 0 0 0 268556 828 213772 0 0 0 0 13 8 0 0 100 0 0 0 0 268556 828 213772 0 0 0 0 15 11 0 0 100 0 0 0 0 268556 828 213772 0 0 0 0 14 10 0 0 100 0 0 0 0 268556 828 213772 0 0 0 0 18 13 0 0 100 0 1 0 0 267316 836 213844 0 0 74 0 267 26 0 99 1 0 1 0 0 267316 836 213844 0 0 0 0 303 7 0 100 0 0 1 0 0 267316 836 213844 0 0 0 0 271 11 0 100 0 0 1 0 0 267316 836 213844 0 0 0 0 257 12 0 100 0 0 30+0 records in 30+0 records out 31457280 bytes (31 MB) copied, 4.95038 s, 6.4 MB/s 0 0 0 267928 860 213860 0 0 27 0 265 29 1 97 2 0 0 0 0 267936 860 213848 0 0 0 0 15 9 0 0 100 0 0 0 0 267936 860 213848 0 0 0 0 14 7 0 0 100 0 0 0 0 267936 860 213848 0 0 0 0 14 7 0 0 100 0 0 0 0 267936 860 213848 0 0 0 0 13 11 0 0 100 0 Terminated


Эти строки показывают изменение статистики системы во времени.

Затем пользователь снова выполняет команду `uptime`.

user1@vm1:~$ uptime 05:22:15 up 6 days, 54 min, 1 user, load average: 0.07, 0.02, 0.00 [1]+ Done ( sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat )


Эта строка показывает текущее время и нагрузку на систему.

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

( sleep 5 && dd if=/dev/zero of=test.img bs=32 count=$((321024200)) && sleep 5 && killall vmstat )& vmstat -nd 1 | egrep -v 'loop|sr0' [1] 6086 disk- ------------reads------------ ------------writes----------- -----IO------ total merged sectors ms total merged sectors ms cur sec sda 146985 2230744 21821320 105848 32190 1343154 10927338 1330144 0 105 sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105 sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105 sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105 sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105 sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105 sda 146999 2230744 21821680 105856 32190 1343154 10927338 1330144 0 105 sda 146999 2230744 21821680 105856 32190 1343154 10927338 1330144 0 105 sda 147000 2230744 21821688 105856 32208 1344160 10935530 1330288 0 105 sda 147000 2230744 21821688 105856 32274 1349214 10976490 1330748 0 105


Этот фрагмент показывает активность диска и использование ресурсов системы при выполнении операций ввода-вывода. ```
11114762 1337348      0    105
sda   147001 2230744 21821696  105856  32525 1370529 11149018 1337732      0    105
sda   147001 2230744 21821696  105856  32573 1374577 11181786 1338064      0    105
sda   147001 2230744 21821696  105856  32698 1386562 11278666 1346244      0    105
6553600+0 records in
6553600+0 records out
209715200 bytes (210 MB) copied, 11.7088 s, 17.9 MB/s
sda   147001 2230744 21821696  105856  32698 1386562 11278666 1346244      0    105
sda   147001 2230744 21821696  105856  32698 1386562 11278666 1346244      0    105
sda   147001 2230744 21821696  105856  32698 1386562 11278666 1346244      0    105
sda   147001 2230744 21821696  105856  32698 1386562 11278666 1346244      0    105
sda   147001 2230744 21821696  105856  32762 1393910 11337962 1349192      0    105
user1@vm1:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
[1]+  Done                    ( sleep 5 && dd if=/dev/zero of=test.img bs=32 count=$((32*1024*200)) && sleep 5 && killall vmstat )
user1@vm1:~$ free -mt ; find / >/dev/null 2>&1 ; free -mt
             total       used       free     shared    buffers     cached
Mem:           496         30        466          0          0          5
-/+ buffers/cache:         24        472
Swap:          461          0        461
Total:         958         30        928
             total       used       free     shared    buffers     cached
Mem:           496         64        432          0         22          6
-/+ buffers/cache:         35        461
Swap:          461          0        461
Total:         958         64        894
user1@vm1:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
user1@vm1:~$ cat test.img /dev/null ; free -mt
             total       used       free     shared    buffers     cached
Mem:           496        230        265          0          0        205
-/+ buffers/cache:         24        471
Swap:          461          0        461
Total:         958        230        727
user1@vm1:~$

Объяснение

  1. Печать текущего времени работы системы.
  2. Вывод информации об используемой и свободной памяти.
  3. Интересный эксперимент. Сначала в фоновом режиме запускается команда (sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat)&, затем непрерывно запускается vmstat, который будет выводить информацию до прерывания. Можно увидеть, что через 5 секунд после запуска команды загрузка процессора заметно увеличивается на некоторое время, а затем снижается. Через следующие 5 секунд vmstat уничтожается.
  4. Повторная печать текущего времени работы системы. Обратите внимание на изменение средней загрузки.
  5. Ещё один эксперимент, почти такой же, как предыдущий, но с записью данных на диск.
  6. Удаление всех кэшей и буферов.
  7. Другой эксперимент. Мы хотим посмотреть, как чтение всех файлов и каталогов в системе влияет на кэш файловой системы в памяти, и мы видим, что они кэшируются в буферах для ускорения последующего доступа. Это имеет теоретическое обоснование.
  8. Снова удаление всех кэшей и буферов.
  9. На этот раз мы хотим посмотреть, как чтение файла влияет на кеш файловой системы в памяти. Мы видим, что прочитанный файл кэшируется для ускорения последующего доступа.

Дополнительные вопросы

  • Почему в нашем первом эксперименте загрузка процессора system возрастает до 100%, а не user?
  • Что означает эта команда: dd if=/dev/zero of=test.img bs=32 count=$( (32*1024*200) )?
  • Запустите top и нажмите h. Теперь попробуйте отсортировать его вывод по процессору, памяти и PID.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-llthw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-llthw-zh.git
oschina-mirror
wizardforcel-llthw-zh
wizardforcel-llthw-zh
master