Настраиваем top в GNU/Linux

    Однажды мой знакомый, который на тот момент администрировал некое веб-приложение на сервере под управлением GNU/Linux, пожаловался на одного вредного администратора сервера. Тот ни в какую не хотел устанавливать htop, несмотря на все просьбы.

    Я немного удивился и поинтересовался, в чём причина такого странного поведения. Если упростить, то дальнейший наш диалог получился вот таким:

    — Он говорит, что вполне достаточно функциональности обычного top.
    — А её недостаточно, я правильно понимаю? Какого функционала в нём не хватает?
    — Ну… Он весь серый, мне на нём не видно ничего!


    Тут я удивился ещё сильнее. Но уже не вредности администратора сервера, а тому, что мой знакомый, имея приличный опыт работы с GNU/Linux, не знает всех возможностей такой распространённой утилиты, как top.

    Да, разумеется, если запустить top в свежесозданном профиле пользователя на большинстве дистрибутивов, то мы увидим примерно такую картину:



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



    Как видите, имеем целых четыре независимых окна, с разными наборами столбцов, в каждом из которых процессы отсортированы по своему параметру. И разумеется, всё это можно настроить так, как нужно вам. И что самое замечательное — для выполнения настроек вам хватит привилегий рядового пользователя.

    Как это сделать?


    Сначала способ быстрый (и неправильный).
    После того, как вы получили пользовательский сеанс, запустите top. Вы увидите интерфейс top по умолчанию:



    Но достаточно просто нажать «z», и интерфейс станет не таким уж серым:



    Уже лучше, но не видно, по какому параметру отсортированы процессы. Не беда, нажмём «x» и увидим:



    Ещё лучше, но окно у нас одно. Сделаем больше, нажмём «A»:



    Окон стало четыре, но три из них — чёрно-белые. Исправим ситуацию. Нажмём «a», а затем «z», «x».



    Процессы во втором окне отсортированы по PID, а нам надо по %Mem. Исправим это, нажимая «>» (или «<», если промахнулись):



    Повторим предыдущие действия для оставшихся окон: «a» для перехода в следующее окно, «z» для включения цветного отображения, «x» для подсветки столбца сортировки. Результат:



    Вот мы и получили тот же результат, который я продемонстрировал в самом начале статьи. Почти. Внимательные читатели сразу же укажут на то, что у меня в окнах другой набор полей, и цвета другие, и командную строку запуска процессов видно целиком, и так далее. А те, кто решил сразу же проверить, правду ли я пишу, могут с удивлением обнаружить, что при следующем запуске top снова стал серым и невзрачным.

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

    А теперь — правильный.

    Запустите top и нажмите «?».



    Да, вы видите встроенную справку. Она, между прочим, многоуровневая. Но вы удивитесь, сколько пользователей считает этот экран единственным. Поскольку бегло прочитав его, делали то, о чём их просили в последнем предложении — нажимали «q» или «Esc», кому что было удобнее.

    А если её внимательно прочитать, то можно выяснить, например, что после всех нужных настроек для их сохранения нужно нажать «W», и ваши настройки сохранятся в файле ~/.toprc. Что цвета, набор полей в каждом окне, режимы отображения некоторых полей и многое другое тоже настраивается.

    Небольшой оффтоп
    Я ни в коем случае не ставлю своей целью занудное напоминание о пользе чтения документации. Также я не ставлю своей целью подробное описание всех настроек top в рамках данной статьи, хотя, если читатели проявят к этому интерес, с удовольствием опубликую и описание. Я не считаю труд разработчиков htop и других утилит бесполезным. И разумеется, я рассматривал современную версию top.


    Я всего лишь хотел сказать, что:
    • Даже опытные специалисты могут не знать элементарных, казалось бы, вещей. Просто потому, например, что им это никогда не требовалось.
    • Даже если утилита появилась в прошлом столетии, это не значит, что проект застрял во времени и не развивается. Например, в прошлом столетии не было отображения контейнера LXC, в котором исполняется процесс.
    • Многие утилиты, несмотря на примитивный внешний вид по умолчанию, очень гибко настраиваются. Это, к слову, касается не только утилит GNU/Linux. И считать утилиту «плохой» и «несовременной», потому что вам не подходят её настройки по умолчанию, по меньшей мере странно. Вы же не бежите покупать новый разводной ключ, если старый настроен не на тот размер гайки, который вам нужен.
    • Иногда вместо того, чтобы требовать для выполнения задачи чего-то дополнительного (или жаловаться, что такой возможности вам не предоставили), стоит потратить несколько минут на изучение возможностей уже имеющихся у вас инструментов.


    Спасибо за внимание.

    Что ещё полезного можно почитать в блоге Cloud4Y

    Путь искусственного интеллекта от фантастической идеи к научной отрасли
    4 способа сэкономить на бэкапах в облакеAI помогает изучать животных Африки
    Лето почти закончилось. Не утекших данных почти не осталось
    IoT, туман и облака: поговорим про технологии?

    Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью! Пишем не чаще двух раз в неделю и только по делу.
    Cloud4Y
    #1 Корпоративный облачный провайдер

    Comments 69

      +7

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


      И еще есть человеческое сопротивление новому (или необучаемость). Например, в моей практике есть случай, когда встретил человека, который гордится тем, что использует только Unix-way, работает только в командной строке. Я обрадовался, что появился единомышленник, но буквально сразу же заметил, что человек:
      1) не знает и не использует даже основные ключи grep/fgrep/egrep
      2) не знает и не использует команды find, xargs
      3) не знает даже самые простые команды редактора vim
      4) категорически отвергает улучшенные альтернативы grep, такие как ack-grep, ripgrep


      В итоге, он так и продолжает использовать командную строку в лучшем случае на 50%. Но всех не переучишь, я сначала пытался помочь, но моя помощь с гневом отвергалась, и я забил. При этом человек на 10 лет моложе меня, то есть, казалось бы, должен быть намного менее консервативен.

        +11

        А как всё это помнить? Я как-то решился, прошел курс для себя по awk и sed, пользовался активно xargs и find. Проходит какое-то время, снова хочу использовать эти утилиты, а вспомнить не получается. Снова лезу в справку, снова изучаю, снова пишу нужный скрипт, снова проходит несколько месяцев — всё забывается. Еще же у каждой утилиты свой язык регулярных выражений, свой язык подстановки параметров, свой способ экранирования символов. Еще ведь есть и разные версии утилит, синтаксис может незначительно отличаться. И вот не нужно мне каждый день awk использовать, даже каждый месяц использовать не нужно.

          +5

          Невозможно все помнить. Думаю, изучение помогает просто потому что запоминаешь скорее факт: «этим инструментом можно решить такой класс задач», и когда требуется, сразу знаешь в какой ман смотреть, чтобы освежить знания.


          А вот те инструменты, которыми пользуюсь многократно каждый день, стараюсь изучить в совершенстве и периодически освежать знания. Это:


          • оболочка и терминал, которыми пользуюсь
          • язык программирования, на котором пишу (синтаксис и стандартная библиотека)
          • текстовый редактор (vim)
          • программы, которыми пользуюсь ежедневно (ripgrep, git)

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


          А так — те же самые проблемы у всех. Тоже редко использую awk, и если требуется что-то за пределами awk /rrr/ '{ print $1 }', приходится заново читать документацию.


          Да что там говорить, когда-то писал на Perl (не очень долго, но все же). Вчера надо было залезть в чужой исходник на Perl, чтобы понять кое-что о старом формате файлов, с которым придется работать. Почти ничего не смог в нем понять (честно говоря, за это и не любил Perl, на мой взгляд, это всегда был write-only язык).

            +4
            Вывод: интуитивность и однотипность использования указанных инструментов оставляет желать лучшего…
              +1

              Ага. Чего только стоит вспомнить как вызвать справку в каждой из них.


              tar -> --help, --usage
              openssl -> help
              awk -> -h, -?
              find -> --help

              и т.д.

                +2
                BSD-стиль против SYSV-стиля. Разые утилиты пришли из разного юзерспейса и сохраняют такой формат своих опций исторически, а не для того, чтобы вам было запутаться проще :)
                  0

                  Несомненно, Вы правы. Эти отличия пошли исторически. Но может всё-таки стоит повернуться теперь лицом к пользователю? Я не хочу запоминать 100500 способов вызвать справку ) и добавление новых аргументов, ну, явно, не должно сломать совместимость с уже существующим поведением стандартных приложений.

                  +4
                  А потом волей случая заносит в Windows и ты, с заметно большей долей раздражения начинаешь писать /h /d /F /I
                    +1

                    главное /? запомнить.

                +1
                awk, sed, где-то я это видел, я знаю эти буквы, а да — как быстро мигрировать со скриптов awk и sed в perl, не оно случайно? Вообщем после перехода на perl, ни awk, ни sed, ни хargs как-то не нужны стали мне (кроме xargs for find), бывает нужен bash и find (простые вещи надо делать просто, сложные сложно) и ещё всякие grep и модификации их, хотя вот перловка тоже имеет свой find etc, но каждый делает как ему удобнее.
                К автору — По поводу htop — очень мне нравится утилита, красява просто, просто top ещё шагать и шагать :) шутка, красоту вырви глаз и разбирайся сам, не оценил, htop можно гибко под себя и на 2-х мониторах поднять screeen-ом 8 окон серверов и там будут графические шкалы для cpu и памяти и прочего, но наверное гораздо интереснее отлавливать цифры top-a и угадывать где оно запущено и что происходит.
                Я вот могу понять когда нет возможности поставить админский пакет по безопасности или там дистр так стар что всё, или нет свободных 10Кб в системе, или он что так напряг систему?… Почему нельзя поставить удобное для админа средство? tcpdump тоже под запретом?
                Мой друг не сильно изучил топ, а я пишу чтобы написать статью в хабр о топ, а, Вы успели написать про штатную утилиту и как её раскрасить, но почему друга-то не обучили?
                0

                По п.4 я могу с ним согласиться. По работе часто приходится работать с разными конфигурациями и правильным методом является использование минимального достаточного набора утилит. Ну, вот реально — ack-grep и ripgrep чем принципиально помогают? Тем более в условиях ограничений (pod kubernetes'а со стандартным alpine и без возможности установить утилиты или ИБшники ничего дополнительного не устанавливают — и в принципе — они правы)

                  +1

                  Я знаю, как заменить ripgrep посредством find, xargs, grep. Поэтому в ограниченных условиях могу использовать их в качестве замены. А вот когда занимаюсь разработкой в привычном окружении, ripgrep (ну или любой аналог) намного удобнее. Хотя бы потому что, можно, например, исключить файлы из .gitignore или любые другие, команда для поиска по типу файла, гораздо короче аналогичной конструкции из find.


                  В общем-то, наверное, если посчитать по истории, то возможно, использую grep почти так же часто, как и ripgrep. Но в разных ситуациях.

                    +1

                    Самое смешное, что зайдя в pod kubernetes на стандартном alpine и без возможности установить утилиты — вы увидите, что там ни одна из перечисленных команд не работает, даже "?", только этот набор команд


                    Keys:
                        N/M/P/T: show CPU usage, sort by pid/mem/cpu/time
                        S: show memory
                        R: reverse sort
                        1: toggle SMP
                        Q,^C: exit
                      0

                      Спасибо, факт интересный, но вполне логичный, учитывая, что в alpine busybox и саой обрезанный облегченный набор стандартных утилит.
                      Я уж не говорю о том, что скорее всего top в pod'е будет абсолютно бесполезен и нужно смотреть во внешний мониторинг.

                  +25
                  фанатик админ отказалься установить htop и заставляет пользователя изучить top, как его выучил он )… это ли не признак раздутого ЧСВ у админа?

                  PS как-то давно баловался с top'ом и его настройками цветастости и шорткатами, но забылось сильно быстро ибо htop реально после apt install дает максимум комфорта и информации
                    0
                    У htop есть проблемы с поеданием ресурсов. Он на питоне и очень прожорлив. Разница между top и htop заметна. Был случай когда мне как админу запрещали ставить htop девелоперы.
                      +5
                      Он на питоне и очень прожорлив.
                      Што.
                      Vecanoi ~ # file /usr/bin/htop
                      /usr/bin/htop: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
                        +1
                        И правда. Ошибочка вышла. Не знаю почему подумал что питон. Видимо с чем то перепутал.
                        github.com/hishamhm/htop
                          +1
                          А знаете что самое забавное — я тоже думал что htop на питоне. Тоже уже не помню почему.
                        +3
                        Думаю, перепутали с iotop. Вот он реально тормозной
                          +7
                          Вот уж не знаю, некрофил во мне говорит, что htop жрет на 0.3% больше процессора, чем top. Процессор — Pentium-II 300Mhz.
                          +1
                          реалии работы с существующей у заказчика инфраструктурой:
                          1. не везде htop есть.
                          2. не везде его можно просто так взять и установить.
                          +17
                          а если ещё в top`e нажать m1t
                          =)
                            +5
                            Как всегда в комментариях можно много интересного откопать!
                              0

                              И что это делает? Не томите! Открывает встроенный тетрис? :-)

                                +3
                                да, так действительно удобнее, а как сделать так чтобы в top поле Command отображалось как в htop

                                Ps: Ниже в коментах нашел, клавиша «c»
                                  +4

                                  m1tt

                                  +2

                                  Буду занудной — ну и ладно. Как же можно "GNU/Linux" через обратный слэш?! Элементарная грамотность, после которой (уже в заголовке) опасно читать статью.

                                    +2
                                    Спасибо, исправил.
                                    А статью читать безопасно, ручаюсь.
                                    +2
                                    У вас 20 ядер и нужно посмотреть, как распределена нагрузка.
                                    htop покажет. top — не уверен (хотя если кто знает магическую последовательность нажатия буковок и циферок — киньте сюда заклинание)
                                      +1
                                      В этом случае спасёт nmon от IBM.
                                        +1
                                        nmon есть под Linux, но я не уверен, что он тот же самый, что и в AIX.
                                        +7
                                        Если мне не изменят память, магическая комбинация — это цифра 1. Попробуйте?
                                          +7
                                          Всегда меня умиляла логика именования аргументов и хоткеев GNU-утилит.
                                            +1

                                            А причем здесь GNU? top — часть пакета procps-ng, он не принадлежит проекту GNU.

                                            +2
                                            A-a-a-a-a! It's alive! Страшное колдунство работает!
                                          +7
                                          Вот так при помощи нескольких несложных движений можно из буханки хлеба сделать модель htop. Но зачем?
                                          Потому что человек должен обслуживать технику, и ни в коем случае не наоборот.
                                            +1

                                            Прикольно, что в термуксе ни одна из команд не работает. Не удивлюсь, что у кого-то на какой-то старой центоси тоже не заработает)
                                            А вот htop работает как надо)

                                              +9

                                              Божественная статья, спасибо! В результате которой, обнаружил долгожданную функцию показа процесса с аргументами, не благодарите, это клавиша "с".

                                                +1
                                                о, спасибо.
                                                +2

                                                За что люблю top, так за отображение подробностей жизни ядер CPU. Большой load average? А почему? Откроешь — а там, например, высокий iowait. И понятно, в какую сторону стоит дальше копать.

                                                  +4

                                                  А можно мне, неучу, подсказать куда копать в таких случаях? Просто для общего развития, вдруг понадобится :) буду благодарен :)

                                                    +3
                                                    В htop тоже можно увидеть iowait глазами: F2 — display options — detailed CPU time. Если включить данную галочку, ожидание ввода-вывода будет отображаться серым цветом.
                                                    +2
                                                    А еще полезно бывает сохранить конфигурационные настройки команды top для текущего пользователя — нажмите W
                                                      +6

                                                      Так то да, но top не может показать отдельно загрузку всех 54 ядер(ибо не влезают по вертикали), а htop может

                                                        +3

                                                        И всёж легче поставить htop, чем как на пианино играть по клавиатуре — чтоб получить хотяб что-то более менее удобно-читабельное на экране :)

                                                          +1
                                                          ИМХО — одинаково htop,top,ps… это инструменты, помогающие решить кейс. Всех программ с параметрами не упомнишь.
                                                          А вот чем действительно всегда приходится пользоваться — это apropos и man.
                                                          Могу посоветовать почитать/посмотреть Дмитрия Кетофа.
                                                          +1
                                                          для меня у htop есть одна киллерфича которой нет у top, и это tree view.
                                                            +2
                                                            man top
                                                            /tree
                                                            V
                                                            +1
                                                            Устаревшие в прошлом веке и не развиваются? Тут уже говорили про net-tools (ifconfig, netstat)?
                                                              0

                                                              ifconfig — дно. Аргументирую. Этот исполняемый файл лежит в sbin. Следовательно, обычный юзер его не может запустить. А если нужна диагностика? Поэтому утилита ip — прям must.
                                                              Другой вопрос, что многие считают, что выхлоп ifconfig более читаемый. Но это спорно.

                                                                +2
                                                                Обычный пользователь может запустить ifconfig, указав полный путь /sbin/ifconfig
                                                                  +1
                                                                  ifconfig — дно. Аргументирую. Этот исполняемый файл лежит в sbin. Следовательно, обычный юзер его не может запустить. А если нужна диагностика?
                                                                  Што^2
                                                                  Vecanoi ~ # equery files sys-apps/net-tools | grep bin
                                                                  /bin
                                                                  /bin/dnsdomainname
                                                                  /bin/hostname
                                                                  /bin/ifconfig
                                                                  /bin/netstat
                                                                  /bin/route
                                                                  /sbin
                                                                  /sbin/arp
                                                                  /sbin/ipmaddr
                                                                  /sbin/iptunnel
                                                                  /sbin/mii-tool
                                                                  /sbin/nameif
                                                                  /sbin/rarp
                                                                    0
                                                                    georg.gaal@HOST:~$ which ifconfig
                                                                    /sbin/ifconfig
                                                                    georg.gaal@HOST:~$ lsb_release -a
                                                                    No LSB modules are available.
                                                                    Distributor ID: Ubuntu
                                                                    Description:    Ubuntu 18.04.2 LTS
                                                                    Release:    18.04
                                                                    Codename:   bionic

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

                                                                +4
                                                                htop для обычного юзера намного более user-friendly, чем тот же top. В принципе, учитывая, что top появился хрен знает когда, это нормально.

                                                                P.S. Админа тоже можно понять, это защитная реакция от лишнего хлама в OS. А то юзеры же сначала htop, потом еще что-то, а через год — в системе уже всевозможные утилиты и куча зависимостей.
                                                                  +2
                                                                  Сегодня он играет джаз, а завтра он играет джаз! Запретить! Только голый ассемблер, только хардкор. А то так, сегодня он С компилирует, а завтра у него уже микросервисы на JS.
                                                                  +1
                                                                  Так же можно посмотреть на atop и glances. Оба умеют писать лог, и потом можно в replay просмотреть, что происходило с системой в определённое время. Glances — вообще монстр, умеет работать в клиент-серверном режиме, есть API, есть Web-UI, кроме инфы о системе умеет собирать информацию с некоторых приложений.
                                                                    0

                                                                    Ну, давайте тогда уж netdata рекламировать — а чо? красива!
                                                                    https://github.com/netdata/netdata


                                                                    glances поглядел. Не очень зашло.

                                                                    +2
                                                                    Нажимаем X потом нажимаем A потом Z потом снова A и X и A и Z
                                                                    Сразу вспомнились старые времена, когда на игровых приставках вводили коды, которые перед этим приходилось заучивать наизусть, и даже вспомнился Doom95 со своими iddqd и idkfa
                                                                    Введи код, и получи бессмертие и все оружие TOPa ))
                                                                      +1

                                                                      htop от top отличается удобными палочками в верхнем левом углу, которые показывают загрузку ядер и памяти :)


                                                                      Реально удобно оценивать изменения нагрузки.

                                                                        +3
                                                                        Вы про эти?

                                                                          +1
                                                                          Точно так.
                                                                            +1
                                                                            Да, но на скриншоте выше именно top. :)
                                                                              +1
                                                                              Экзактли.

                                                                              А теперь вернёмся к исходникам и перечитаем мою прекрасную шутку :)
                                                                                +2
                                                                                Сорри, видимо, я сегодня слишком серьезен. :)
                                                                        +4
                                                                        А весёлый админ сделал бы своему пользователю алиас для запуска top через „htop”.
                                                                          +1

                                                                          А может кто-то поделится красивыми toprc?
                                                                          Вот для примера мой.


                                                                          top's Config File (Linux processes with windows)
                                                                          Id:i, Mode_altscr=0, Mode_irixps=1, Delay_time=0.800, Curwin=0
                                                                          Def     fieldscur=Ĺ@&*'-068>?ACFML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
                                                                                  winflags=163772, sortindx=18, maxtasks=0, graph_cpus=1, graph_mems=1
                                                                                  summclr=6, msgsclr=2, headclr=3, taskclr=5
                                                                          Job     fieldscur=*(-068>?@ACFGĻML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
                                                                                  winflags=193852, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=0
                                                                                  summclr=6, msgsclr=6, headclr=7, taskclr=6
                                                                          Mem     fieldscur=&*'(-0689FGijML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
                                                                                  winflags=193852, sortindx=21, maxtasks=0, graph_cpus=0, graph_mems=0
                                                                                  summclr=5, msgsclr=5, headclr=4, taskclr=5
                                                                          Usr     fieldscur=-3468;<=>?@ACFGML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
                                                                                  winflags=193852, sortindx=3, maxtasks=0, graph_cpus=0, graph_mems=0
                                                                                  summclr=3, msgsclr=3, headclr=2, taskclr=3
                                                                          Fixed_widest=0, Summ_mscale=0, Task_mscale=0, Zero_suppress=0
                                                                            +1
                                                                            Не катит. top не запускается.
                                                                            top: window entry #1 corrupt, please delete .toprc
                                                                            Видимо в файле есть спец символы не копируемые…
                                                                            +3
                                                                            Сначала подумал, блин пойду-ка я top подучу. А потом вспомнил, что я админ и люблю htop.

                                                                            Only users with full accounts can post comments. Log in, please.