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

Java

предисловие

В этой статье будут представлены часто используемые команды 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 лет реальных вопросов в Интернете, электронные книги и т. д.). Друзья, нуждающиеся в помощи, могут обратить внимание на общественный номер [Программа Юань Сяован] можно получить.