Одна из вещей, которых больше всего боятся бэкенды, — это внезапный всплеск нагрузки на сервер, который может означать, что вот-вот поступит ослепительный звонок. Что делать в этой ситуации? Первой реакцией каждого должно быть войти на сервер, сначала нажать верхнюю команду, чтобы увидеть среднюю загрузку. Сегодняшняя статья расскажет вам, как посмотреть на этот «Load Average».
Load Average
Многие говорят, что индикатор Load Average может указывать на высокую загрузку системы, и это утверждение правильное. Так где именно давление? Как рассчитываются эти три значения? Многие люди не могут сказать все сразу.
Начнем с определения:Сумма количества процессов, которые ЦП обрабатывает и ожидает обработки ЦП в течение определенного периода времени.Три числа представляют собой статистические значения 1 минуты, 5 минут и 15 минут соответственно.
Следовательно, это значение действительно может отражать нагрузку на сервер. Однако это высокое значение напрямую не представляет проблемы с производительностью этой машины. Это может быть связано с выполнением расчетов, интенсивно использующих ЦП, или из-за проблемы с вводом-выводом, которая привела к блокировке очереди выполнения. Поэтому, когда мы видим рост этой стоимости, нам приходится детально анализировать конкретные проблемы. Модернизация машины напрямую проста и груба, но не устраняет симптомы.
верхняя командная строка за строкой
Команда top выводит много параметров, нам нужно смотреть на реальную загрузку сервера вместе с другими параметрами.
第一行:
top - 20:41:08 up 18 days, 5:24, 2 users, load average: 0.04, 0.03, 0.05
top:当前时间
up:机器运行了多少时间
users:当前有多少用户
load average:分别是过去1分钟,5分钟,15分钟的负载
Особое внимание следует уделить трем значениям средней нагрузки. Все мы знаем, что ЦП может запускать только один процесс за квант времени, а количество ядер ЦП напрямую влияет на количество процессов, которые машина может выполнять одновременно. Так что в целом значение Load Average не должно превышать общее количество ядер этой машины, и в принципе проблем нет.
第二行:
Tasks: 216 total, 1 running, 215 sleeping, 0 stopped, 0 zombie
Tasks:当前有多少进程
running:正在运行的进程
sleeping:正在休眠的进程
stopped:停止的进程
zombie:僵尸进程
Чем больше запущено, тем больше естественная нагрузка на сервер.
第三行:
%Cpu(s): 0.2 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us: 用户进程占CPU的使用率
sy: 系统进程占CPU的使用率
ni: 用户进程空间改变过优先级
id: 空闲CPU占用率
wa: 等待输入输出的CPU时间百分比
hi: 硬件的中断请求
si: 软件的中断请求
st: steal time
Эта строка представляет загрузку ЦП, и значение us слишком велико в течение длительного времени, что указывает на то, что пользовательский процесс занимает много времени ЦП. Если us+sy превышает 80 или 90 в течение длительного времени, это может означать, что производительность ЦП недостаточна, и необходимо добавить ЦП.
第四行&第五行
KiB Mem : 65810456 total, 30324416 free, 9862224 used, 25623816 buff/cache
KiB Swap: 7999484 total, 7999484 free, 0 used. 54807988 avail Mem
total:内存总量
free:空闲内存
used:使用的
buffer/cache: 写缓存/读缓存
Четвертая и пятая строки — это информация о памяти и информация о подкачке соответственно. Все программы выполняются в памяти, поэтому производительность памяти очень важна для сервера. Однако, когда свободной памяти становится меньше, нам не нужно слишком нервничать. Что вам действительно нужно посмотреть, так это используемую информацию в Swap. Раздел подкачки — это область подкачки, предоставляемая жестким диском.Когда физической памяти недостаточно, операционная система помещает временно неиспользуемые данные в подкачку. Поэтому, когда это значение становится высоким, это означает, что памяти действительно не хватает.
第五行往下
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19868 root 20 0 19.733g 369980 15180 S 0.7 0.6 129:53.91 java
19682 root 20 0 19.859g 5.766g 22252 S 0.3 9.2 139:42.81 java
54625 100 20 0 50868 33512 4104 S 0.3 0.1 0:04.68 fluentd
PID:进程id
USER:进程所有者
PR:优先级。数值越大优先级越高
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量
SWAP:进程使用的虚拟内存中被换出的大小
RES:进程使用的、未被换出的物理内存大小
SHR:共享内存大小
SHR:共享内存大小
S:进程状态。D表示不可中断的睡眠状态;R表示运行;S表示睡眠;T表示跟踪/停止;Z表示僵尸进程。
%CPU:上次更新到现在的CPU占用百分比 ;
%MEM:进程使用的物理内存百分比 ;
TIME+:进程使用的CPU时间总计,单位1/100秒;
COMMAND:命令名/命令行
Это информация о процессе, которая может видеть, какие процессы занимают системные ресурсы.
другие команды
Конечно, самая распространенная команда для просмотра состояния системы — это top. Есть много других команд. vmstat, w, uptime, iostat — все это часто используемые команды.
Подводить итоги
После понимания этих конкретных параметров вы будете знать, какие аспекты вашего кода необходимо улучшить, будь то оптимизация потребления памяти или оптимизация логики кода.Конечно, безмозглая машина также может быть использована, если вы убедите босса!