Профилировщик памяти для Linux
Софт отслеживает все выделения памяти и аннотирует эти события с помощью трассировки стека. Специальные инструменты анализа позволяют интерпретировать профиль памяти кучи, чтобы:
⏩ найти «горячие точки», которые необходимо оптимизировать, чтобы уменьшить объем памяти приложения
⏩ найти утечки памяти, т. е. места, где выделяется память, которая никогда не деаллоцируется
⏩ найти «горячие точки» выделения, то есть места в коде, которые вызывают большое количество вызовов выделения памяти
⏩ находить временные выделения, то есть выделения, за которыми непосредственно следует их деаллокация
⛓ Ссылка: GitHub
👉 DevOps Portal | #ресурсы
Софт отслеживает все выделения памяти и аннотирует эти события с помощью трассировки стека. Специальные инструменты анализа позволяют интерпретировать профиль памяти кучи, чтобы:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3😁1
Что означает 2>&1?
Это про стандартные потоки вывода. Они имеют файловые дескрипторы:
stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)
Получается (2>&1) = stderr > stdout — направляем поток с ошибками, в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.
Логичным было бы сделать конструкцию: 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.
Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.
А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.
Операция command &2>&1 анализируется так: command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.
Есть альтернатива с оператором |&.
|& это сокращенный вариант от 2>&1 |
Пример:
Все что
В официальной документации можно подробнее изучить эту штуку.
👉 DevOps Portal
Это про стандартные потоки вывода. Они имеют файловые дескрипторы:
stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)
Получается (2>&1) = stderr > stdout — направляем поток с ошибками, в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.
Логичным было бы сделать конструкцию: 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.
Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.
А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.
Операция command &2>&1 анализируется так: command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.
Есть альтернатива с оператором |&.
|& это сокращенный вариант от 2>&1 |
Пример:
script.sh |& tee -a /var/log/script.log
Все что
script.sh выведет в потоки stdout и stderr, будет перенаправлено в файл script.log.В официальной документации можно подробнее изучить эту штуку.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.gnu.org
Bash Features ¶
Next: Introduction, Previous: (dir), Up: (dir) [Contents][Index]
👍32
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34❤8
Рассмотрим ситуацию, когда случайно/специально 😱 удалился исполняющийся bash скрипт.
Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.
Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.
Создадим подопытный скрипт: touch /tmp/script.sh:
#!/bin/bash
sleep 1000
exit
Делаем исполняемым chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &
Символ & может служить разделителем между командами command & command, две команды выполнятся параллельно.
Скрипт запустили, он крутится в фоне. Удалим сам файл:
rm -f /tmp/script.sh ключ -f удалит без лишних вопросов.
Восстанавливаем:
lsof -c 'script.sh'
На экран выведется простыня, нам нужна строка где в конце указан путь до скрипта, который был удален:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh
Берем PID = 261899, берем FD = 255 и делаем так:
cat /proc/261899/fd/255
А вот и исходник скрипта:
File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit
Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof
👉 DevOps Portal
Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.
Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.
Создадим подопытный скрипт: touch /tmp/script.sh:
#!/bin/bash
sleep 1000
exit
Делаем исполняемым chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &
Символ & может служить разделителем между командами command & command, две команды выполнятся параллельно.
Скрипт запустили, он крутится в фоне. Удалим сам файл:
rm -f /tmp/script.sh ключ -f удалит без лишних вопросов.
Восстанавливаем:
lsof -c 'script.sh'
На экран выведется простыня, нам нужна строка где в конце указан путь до скрипта, который был удален:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh
Берем PID = 261899, берем FD = 255 и делаем так:
cat /proc/261899/fd/255
А вот и исходник скрипта:
File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit
Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39❤14🔥1
GoReplay
Это опенсорсный инструмент мониторинга сети, который может записывать ваш трафик в реальном времени и использовать его для отслеживания, нагрузочного тестирования, мониторинга и детального анализа.
⏩ Установка
Загрузите последнюю версию бинарника и соберите
⏩ Как оно работает
Самый простейший вариант: sudo ./gor --input-raw :8000 --output-stdout который действует как tcpdump. Если у вас уже есть тестовая среда, вы можете сделать так: sudo ./gor --input-raw :8000 --output-http http://staging.env
Дополнительная информация: FAQ, Troubleshooting, Issues
👉 DevOps Portal | #ресурсы
Это опенсорсный инструмент мониторинга сети, который может записывать ваш трафик в реальном времени и использовать его для отслеживания, нагрузочного тестирования, мониторинга и детального анализа.
Загрузите последнюю версию бинарника и соберите
Самый простейший вариант: sudo ./gor --input-raw :8000 --output-stdout который действует как tcpdump. Если у вас уже есть тестовая среда, вы можете сделать так: sudo ./gor --input-raw :8000 --output-http http://staging.env
Дополнительная информация: FAQ, Troubleshooting, Issues
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Цель этого материала — задокументировать методы выполнения различных задач с использованием только встроенных функций bash.
Использование фрагментов из этой библии может помочь удалить ненужные зависимости из скриптов и в большинстве случаев ускорить их выполнение
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
Справочник сисадмина. Все, что нужно, под рукой
Автор: Левицкий Н.Д., Матвеев М.Д.
Год: 2024
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Левицкий Н.Д., Матвеев М.Д.
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5
modinfo zfs | head -n 9 — узнать версию ZFS и другие подробностиИнформация о пулах / файловых системах (ФС) на пулах
zpool list — статус пулов zpool status -v — статус пулов подробныйzfs list — список ФС, так называются монтируемые разделы в пулахzfs get all — вся информация по пуламУправление пулами / дисками
ls -lha /dev/disk/by-id/ — выяснить id дисков чтобы потом на них создать пул (не юзайте имя диска типа sda — они динамически меняются)zpool create zfspool disk-id-1 disk-id-2 — может быть сколько угодно дисковzpool create -m /mnt/backups zfspool disk-id-1 — создать пул с указанием папки zpool destroy zfspool — уничтожить пулmkfile 100m disk1 disk2 — создать файлы дисковzpool create backups /disk1 /disk2- создать пул backups на созданных файлахzpool create zfspool mirror /disk1 /disk2 — создать пул zfspool с зеркалированием на 2 дискаzpool add zfspool /disk3 — добавить диск в пулzpool attach zfspool /disk3 — добавить устройство в пул, если он в зеркале — добавится в зеркало, если простой — пул расширитсяzpool detach zfspool /disk3 — исключить устройство из пулаzpool remove zfspool /disk3 — удаление устройства из пулаzpool add zfspool spare /disk3 — добавление диска горячей замены в пулzpool remove zfspool spare /disk3 — удаление диска горячей замены из пулаzpool offline zfspool /disk1 — отключить устройство, на него не будет чтения/записи, если добавить ключ -t, то после ребута станет онлайнzpool online zfspool /disk1 — включить disk1zpool replace zfspool /disk1 /disk3 — заменить disk 1, на disk3zpool upgrade -v — увидеть версию, и фичи текущего ZFS, -a обновит все пулы до новейшей версииСоздание и свойства ФС
zfs create zfspool/data — создать ФС datazfs create zfspool/backups создать ФС backups, обе ФС будут бесконтрольно расти, пока не выставлены квоты
zfs destroy -fr zfspool/backups/old — уничтожит ФС old, ключ -r — рекурсивно, если внутри ещё несколько ФС, -f — форситьzfs set reservation=1G zfspool/data — зарезервировать 1 Гигабайт, который ФС гарантированно получит, а другие не займутzfs list -o quota zfspool/backups — выяснить квоту в пуле на ФС backupszfs set quota=1G zfspool/backups — установить квоту в 1 Гигабайт на ФС backupszfs list -o compression — проверить включена компрессия или нетzfs set compression=on zfspool/backups — включить компрессию на ФС backups в пуле zfspool
zfs set sharesmb=on zfspool/backups — расшарить по SMB ФС backups средствами ZFSzfs set sharenfs=on zfspool/backups — расшарить по NFS ФС backups средствами ZFSМонтирование
zfs mount — показать все примонтированные ФСzfs mount zfspool/backups — примонтировать backupszfs umount zfspool/backups — размонтировать ФС backupszfs mount -a — смонтировать все ФСzfs umount -a Umount — размонтировать все ФССнапшоты
zfs list -t snapshot — отобразить все снапшотыzfs list -o space — сколько занимают места снапшотыzfs snapshot zfspool/backups@test — создать снапшот ФС backups с названием testzfs rollback zfspool/backups@test — вернуться к снапшоту backups с названием test, с ключом -r рекурсивно уничтожит промежуточные снапшоты, с ключом -f форсит анмаунт и ремаунтzfs destroy zfspool/backups@test — уничтожить снапшот backups с названием testzfs send zfspool/backups@march2021 > /home/backups/march2021.bak — сделать локальный бекап снапшота march2021zfs receive zfspool2/backups2 < /home/backups/march2021.bak — восстановить из локального снапшота ФС на другом пулеzfs send zfspool/backups@march2021 | ssh COMP02 «zfs receive testpool/testfs» — отправить снапшот по SSH на хост COMP02zfs clone zfspool/backups@march2021 /clones/backups — клонировать существующий снапшотzfs destroy zfspool/backups@march2021 — уничтожить клонPlease open Telegram to view this post
VIEW IN TELEGRAM
👍14
Шпаргалка по Расширенным параметрам в Bash
Что такое расширенные параметры? Допустим у вас есть переменная ${var%}, что такое знак %?
${var%} удалит короткий суффикс
$(var%%} удалит длинный суффикс
${var#} & ${var##} удалит короткий и длинный префикс
На экран выведется слово hello. То есть произошло удаление короткого суффикса. Вот еще пример:
🔜 PDF можно забрать отсюда
👉 DevOps Portal
Что такое расширенные параметры? Допустим у вас есть переменная ${var%}, что такое знак %?
${var%} удалит короткий суффикс
$(var%%} удалит длинный суффикс
${var#} & ${var##} удалит короткий и длинный префикс
var='hello world'
echo ${var%world}
На экран выведется слово hello. То есть произошло удаление короткого суффикса. Вот еще пример:
var='hello world'
echo ${var%o*} # hello w
echo ${var%%o*} # hell
Более подробно про расширенные параметры можно почитать на официальной странице.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Самоучитель системного администратора, 7-е издание
Автор: Кенин А.М.
Год: 2024
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Кенин А.М.
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Бывает, что выполнение удаленно запущенной команды может затянуться, а необходимо дождаться ее выполнения (кстати, в этом случае весьма полезным может стать использование screen), или пришлось отвлечься, а сессия SSH в это время отвалилась.
На сервере в конфигурационном файле /etc/ssh/sshd_config прописываем:
TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 60
TCPKeepAlive — установлен в «yes», значит сервер будет периодически пинговать клиента, проверяя жив ли он.
ClientAliveInterval — задает интервал пинга для проверки состояния клиента (в секундах). Параметр работает только для протокола версии 2 (Protocol 2).
ClientAliveCountMax — количество пингов клиента.
Таким образом в примере таймаут сессии будет равен 60*300/60 = 300 минут = 5 часов.
После изменения настроек не забудьте перезапустить сервис ssh.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Unix и Linux. Руководство системного администратора, 5-е издание
Автор: Дэн Макин
Год: 2021
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Дэн Макин
Год: 2021
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Держите полезные сочетания клавиш для повышения эффективности работы в bash
⏩ Навигация
⏩ Редактирование
⏩ Bash History
⏩ Общие хоткеи
👉 DevOps Portal
Ctrl+A переместить курсор в начало строки
Ctrl+E переместить курсор в конец строки
Ctrl+F переместить курсор на один символ вправо
Ctrl+B переместить курсор на один символ влево
Alt+B / Esc+B переместить курсор влево на одно слово
Ctrl+U удалить все и вернуться в начала строки
Ctrl+K удалить все после курсора
Ctrl+W удалить слово перед курсором
Alt+D удалить слово после курсора
Ctrl+Y вернуть удаленное
Ctrl+D удалить символ под курсором
Ctrl+H аналогично backspace
Alt+T смена позиции текущего слова на предыдущее
Ctrl+T замена местами двух символа перед курсором
Alt+U перевод слова в заглавные после курсора
Alt+L перевод слова в строчные после курсора
Ctrl+_ отмена последнего ввода
Ctrl+R режим обратного поиска
Ctrl+P переход к предыдущей команде
Ctrl+N переход к следующей команде
Ctrl+O выполнить найденную команду
Ctrl+G выход из режима поиска
!! выполнить предыдущую команду
!vim выполнить последнюю команду, которая начиналась на vim
!vim:p вывести последнюю команду, которая начиналась на vim
!n запустить n команду из history
Ctrl+C завершить команду
Ctrl+L очистить экран
Ctrl+S приостановить вывод, остановить прокрутку
Ctrl+Q возобновить прокрутку
Ctrl+D закрыть оболочку
Ctrl+Z приостановить процесс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥7