предисловие
В этой статье будут представлены часто используемые команды Linux для тестирования производительности, часто используемые методы настройки на уровне системы Linux и распространенные вопросы на собеседованиях.
1. uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.0212
Эта команда позволяет приблизительно увидеть общую загрузку компьютера.Числа после средней нагрузки представляют собой среднюю загрузку компьютера за 1 мин, 5 мин и 15 мин соответственно.
2. dmesg | tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.123456
Распечатайте содержимое кольцевого буфера ядра, которое можно использовать для просмотра некоторых ошибок.
В приведенном выше примере показано, что процесс 18694 был остановлен из-за нехватки памяти, а запрос TCP был отклонен. С помощью dmesg можно быстро определить, есть ли проблема, вызывающая ненормальную работу системы.
3. vmstat 1
$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
Печатать статистику по процессам, памяти, разделам подкачки, IO и CPU и т. д.
Формат vmstat следующий:
vmstat [options] [delay [count]]
Первый вывод vmstat представляет собой среднее значение с момента загрузки до запуска vmstat, остальные выходные данные представляют собой среднее значение за указанный интервал времени.В приведенном выше примере значение задержки установлено равным 1. За исключением первого раза, остальные are all Подсчитывается раз в 1 секунду.Если count не установлен, он будет печататься в цикле.
$ vmstat 10 3
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 0 2527112 1086888 13720228 0 0 1 14 2 1 1 1 99 0 0
0 0 0 2527156 1086888 13719856 0 0 0 104 3003 4901 0 0 99 0 0
0 0 0 2526412 1086888 13719904 0 0 0 10 3345 4870 0 1 99 0 0123456
В приведенном выше примере для задержки установлено значение 10, а для счетчика установлено значение 3, что означает, что печатается среднее значение каждой строки в течение 10 секунд, и печатается только 3 раза.
Столбцы для проверки:
1.r
Указывает количество процессов, запущенных или ожидающих планирования ЦП. Поскольку этот столбец данных не содержит статистики ввода-вывода, его можно использовать для определения того, загружен ли ЦП. Если число в столбце r больше, чем количество ядер ЦП, это означает, что ЦП уже загружен.
2.free
текущая оставшаяся память
3.si, so
Количество свопов в разделе подкачки и из него.Если количество свопов в и из раздела больше 0, это означает, что памяти недостаточно.
4.us, sy, id, wa
Статистическая информация о ЦП, представляющая время пользователя, системное время (ядра), простоя и ожидания ввода-вывода соответственно. Время, затраченное на обработку ввода-вывода, включено в системное время, поэтому, если системное время превышает 20 %, это может быть узким местом или аномалией в вводе-выводе.
4. mpstat -P ALL 1
$ mpstat -P ALL
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/30/2018 _x86_64_ (16 CPU)
04:03:55 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:03:55 PM all 3.67 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 95.02
04:03:55 PM 0 3.52 0.00 0.57 0.76 0.00 0.00 0.00 0.00 0.00 95.15
04:03:55 PM 1 3.83 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 94.85
04:03:55 PM 2 3.80 0.00 0.61 0.60 0.00 0.00 0.00 0.00 0.00 94.99
04:03:55 PM 3 3.68 0.00 0.58 0.60 0.00 0.00 0.00 0.00 0.00 95.13
04:03:55 PM 4 3.54 0.00 0.57 0.60 0.00 0.00 0.00 0.00 0.00 95.30
[...]
Эта команда используется для печати статистики каждого ЦП один раз в секунду, что можно использовать для проверки равномерности планирования ЦП.
5. pidstat 1
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
Эта команда используется для печати использования ЦП каждым процессом, аналогично тому, что отображается в верхней команде. Преимущество pidstat заключается в том, что он может прокручивать, чтобы распечатать текущее состояние процесса, вместо того, чтобы очищать экран, как сверху. В приведенном выше примере загрузка ЦП двумя процессами Java в %CPU достигла 1590% и 1573% соответственно, что указывает на то, что процесс Java занимает 16 ЦП.
6. iostat -xz 1
Как и в случае с vmstat, первым выводом является выборка данных из загрузки системы в статистику;
$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
проверить столбец
1.r/s, w/s, rkB/s, wkB/s, указывающее количество операций чтения, записи, чтения в килобайтах и записи в килобайтах, отправляемых на устройство ввода-вывода в секунду.
2. await, что означает среднее время ввода-вывода, в течение которого приложение находится в очереди и обслуживается.Если значение больше ожидаемого времени, это означает, что устройство ввода-вывода перегружено или ненормально.
3.avgqu-sz, который указывает среднее время, в течение которого запрос отправляется на устройство ввода-вывода.Если значение больше 1, это означает, что устройство ввода-вывода может быть насыщено.
4.%util, коэффициент использования устройства в секунду, если коэффициент использования превышает 60%, это означает, что устройство работает ненормально.
7. free -m
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 012345
Проверяемые столбцы:
1.buffers
For the buffer cache, used for block device I/O
2.cached
For the page cache, used by file systems
Если значения буферов и кэша близки к 0, использование ввода-вывода слишком велико, и в системе возникают проблемы с производительностью. В Linux в качестве кеша используется свободная память.Если приложению нужно выделить память, система может быстро высвободить память, занимаемую кешем.Поэтому свободная память включает в себя часть, занятую кешем.
8. sar -n DEV 1
sar — это сокращение от System Activity Reporter, отчета о состоянии системной активности.
-n {ключевое слово […] | ВСЕ } для создания отчетов о сетевой статистике. ключевое слово может быть одним или несколькими из следующих: DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 и UDP6.
-n DEV 1, считать использование сети каждую секунду;
-n EDEV 1, считать неправильную информацию о сети каждую секунду;
$ sar -n DEV 1
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/31/2018 _x86_64_ (16 CPU)
03:54:57 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
03:54:58 PM ens32 3286.00 7207.00 283.34 18333.90 0.00 0.00 0.00
03:54:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:54:58 PM vethe915e51 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:54:58 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:54:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
03:54:59 PM ens32 3304.00 7362.00 276.89 18898.51 0.00 0.00 0.00
03:54:59 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:54:59 PM vethe915e51 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:54:59 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
1.IFACE, имя сетевого интерфейса
2.rxpck/s, количество пакетов, полученных в секунду
3.txpck/s — количество отчетов, передаваемых в секунду (передача пакетов)
4.rxkB/s, количество килобайт, полученных в секунду
5. txkB/s — количество килобайт, отправляемых в секунду.
6.rxcmp/s, количество сжатых пакетов, полученных в секунду
7.txcmp/s, количество сжатых пакетов, отправляемых в секунду
8.rxmcst/s, количество групповых пакетов, полученных в секунду
9. sar -n TCP,ETCP 1
Эту команду можно использовать для приблизительной оценки пропускной способности сети, например, количества инициированных сетевых подключений и количества полученных сетевых подключений.
1.TCP, сообщает статистику о сетевом трафике TCPv4
2. ETCP, сообщает статистику о сетевых ошибках TCPv4
$ sar -n TCP,ETCP 1
Linux 3.10.0-514.26.2.el7.x86_64 (aushop) 05/31/2018 _x86_64_ (2 CPU)
04:16:27 PM active/s passive/s iseg/s oseg/s
04:16:44 PM 0.00 2.00 15.00 13.00
04:16:45 PM 0.00 3.00 126.00 203.00
04:16:46 PM 0.00 0.00 99.00 99.00
04:16:47 PM 0.00 0.00 18.00 9.00
04:16:48 PM 0.00 0.00 5.00 6.00
04:16:49 PM 0.00 0.00 1.00 1.00
04:16:50 PM 0.00 1.00 4.00 4.00
04:16:51 PM 0.00 3.00 171.00 243.00
Обнаруженные столбцы:
1.active/s
Количество локально инициированных TCP-подключений в секунду (например, через connect()), количество инициированных сетевых подключений
2.passive/s
Количество удаленно инициированных TCP-подключений в секунду (например, через accept()), количество полученных сетевых подключений
3.retrans/s
Количество повторных передач TCP в секунду, количество повторных передач
10. top
Команда top содержит больше статистики по индикатору и эквивалентна комплексной команде.
$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched12345678910111213141516171819
Суммировать
Я собрал копию здесь: информация, связанная с Linux, систематическая информация по Java: (включая основные точки знаний по Java, темы для интервью и последние 20 лет реальных вопросов в Интернете, электронные книги и т. д.). Друзья, нуждающиеся в помощи, могут обратить внимание на общественный номер [Программа Юань Сяован] можно получить.